API to Extract SaaS Pricing from Any Website

Extract SaaS pricing tiers, plan names, and features from any website using WebCrawler Agent API. Works even when pricing lives on unexpected pages.

Written byAndrii
Published on

How to Extract SaaS Pricing from Any Website

You want to know what a SaaS company charges. Should be easy, right? But pricing pages are all over the place.

Some companies put pricing at /pricing. Some put it on the homepage. Some bury it in a FAQ, a docs page, or a "Contact Sales" wall with no numbers at all. There's no standard. If you're tracking pricing across 50 or 100 competitors, you can't hardcode a scraper for each one.

WebCrawler Agent handles this. You give it a URL and a prompt, and it browses the site like a person would, finds the pricing wherever it lives, and returns structured JSON.

How it works

curl --request POST \
  --url https://api.webcrawlerapi.com/v1/agent \
  --header 'Authorization: Bearer <YOUR_API_KEY>' \
  --data '{
    "prompt": "Find all pricing plans for this SaaS product. For each plan return the plan name, monthly price in USD, annual price if available, and a list of included features.",
    "urls": ["https://example-saas.com"],
    "max_spend_usd": 0.5
  }'

The agent starts at the URL you give it. If pricing isn't on that page, it follows links until it finds it. You don't need to know where the pricing page is. The agent figures that out.

The flow is the same as any Agent request:

  1. Send a POST with your prompt, a seed URL, and a budget.
  2. The agent browses the site, finds relevant pages, extracts data.
  3. Poll for the result. When status is done, you get JSON back.

Why pricing extraction is tricky

If you've tried scraping pricing pages before, you know the problems.

  • No consistent URL. Some sites use /pricing, others use /plans, /packages, or nothing at all.
  • JavaScript rendering. Many pricing pages load plans dynamically. A simple HTTP request gets you an empty div.
  • Toggle switches. Monthly vs annual pricing, different currencies, enterprise tiers that show "Contact us" instead of a number.
  • Pricing on the homepage. Smaller SaaS products sometimes list everything on one page. No dedicated pricing section exists.

The agent renders pages in a real browser and reads them the way you would, so none of this matters on your end.

Writing a good prompt

Be specific about what fields you want back. "Get the pricing" is too vague. Tell the agent exactly what to extract.

A good prompt for pricing extraction:

Find all pricing plans on this website. For each plan, return:
- plan_name: the name of the plan (e.g. "Starter", "Pro", "Enterprise")
- price_monthly_usd: monthly price in USD, or null if not listed
- price_annual_usd: annual price in USD, or null if not listed
- features: array of features included in this plan
- has_free_trial: true or false

If a plan says "Contact Sales" instead of showing a price, set the price fields to null and add a note field explaining this.

Notice the last line. Telling the agent how to handle edge cases (like "Contact Sales" plans) makes a big difference. Without it, the agent has to guess, and guesses aren't always right.

Prompt template

Here's a reusable template. Swap the URL for each company you're tracking.

Find all pricing plans for {company_name} at {website_url}.

For each plan return:
- "plan_name": name of the pricing tier
- "price_monthly_usd": monthly price in USD, or null if not shown
- "price_annual_usd": annual price in USD, or null if not shown  
- "billing_options": array of available billing periods (e.g. ["monthly", "annual"])
- "features": array of included features
- "has_free_trial": true or false
- "notes": any relevant context (e.g. "price requires annual commitment", "contact sales for pricing")

You can also lock the output shape with output_schema if you want guaranteed structure. Check the Agent API docs for details on that.

Wrapping up

Pricing extraction is one use case. The same API handles anything you can describe in a prompt: feature lists, customer logos, job postings, team pages, product specs.

The output is JSON, so it plugs right into whatever you're building. A database, an AI agent that needs live pricing data, an automation that runs weekly and alerts you when a competitor changes their prices.

Grab an API key and try it on one competitor's pricing page first. Full Agent API docs are here.

The same agent also handles other use cases: finding a company website by name, extracting customer lists from SaaS sites, or pulling contact emails from any website.


About the Author

Andrii Mazurian
Andrew Mazurian@andriixzvf

Founder, WebCrawlerAPI · 🇳🇱 Netherlands

Engineer with 15 years of experience in APIs, big data, and infrastructure. Founded WebCrawlerAPI in 2024 with a single goal: to build the best data API, and have been shipping it every day since.