SaaS Pricing Scraper avatar
SaaS Pricing Scraper

Pricing

$0.01 / 1,000 results

Go to Apify Store
SaaS Pricing Scraper

SaaS Pricing Scraper

Extract structured pricing data from any SaaS website. Get tiers, features, billing options as clean JSON. AI-powered.

Pricing

$0.01 / 1,000 results

Rating

0.0

(0)

Developer

DataHQ

DataHQ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Multi-source SaaS pricing intelligence. Extract pricing tiers, features, and competitor data from any SaaS product in seconds.


⚡ Quick Start

{
"query": "Notion",
"useLLM": true,
"llmProvider": "openai",
"openaiApiKey": "sk-..."
}

Or with a direct URL:

{
"url": "https://www.notion.so/pricing",
"useLLM": true,
"llmProvider": "anthropic",
"claudeApiKey": "sk-ant-..."
}

🔄 How It Works

  1. Discovery → Find pricing page via search or direct URL
  2. Scrape → Playwright captures page, clicks billing toggles automatically
  3. Extract → LLM or DOM selectors parse pricing tiers
  4. Enrich → Calculate confidence score, detect pricing model

🚀 Key Features

  • Universal Scraping: Works on most SaaS pricing pages (Notion, Slack, HubSpot, Vercel, etc.)
  • Smart Interactions: Auto-detects and clicks "Annual/Monthly" toggles to capture discount pricing
  • LLM Extraction: Uses GPT-5.2 or Claude 4.5 Sonnet for accurate parsing of complex pricing tables
  • BYOK: Bring your own OpenAI or Anthropic API key
  • Structured Output: Clean JSON with tiers, features, billing options, pricing model detection

💰 Pricing

Free to use. You only pay:

  • Apify platform costs (~$0.01-0.05 per run)
  • Your own LLM API costs if enabled (~$0.01-0.03 per run)

🎯 Use Cases

  • Founders: Benchmark pricing against competitors before launch
  • Sales Teams: Get competitor pricing during deal negotiations
  • VCs & Analysts: Track SaaS pricing trends across sectors
  • Procurement: Verify you're getting the best deal

⚙️ Input Parameters

FieldTypeRequiredDescription
querystringYes*Product name (e.g., "Notion", "Slack")
urlstringYes*Direct pricing page URL
useLLMbooleanNoEnable AI extraction. Default: true
llmProviderstringNoopenai or anthropic
llmModelstringNoOverride model. Defaults: gpt-5.2, claude-4-5-sonnet-latest
openaiApiKeystringNoYour OpenAI key
claudeApiKeystringNoYour Anthropic key

*Either query or url required


📊 Output Example

{
"product": {
"name": "Notion",
"website": "https://www.notion.so/pricing"
},
"pricing": {
"model": "seat-based",
"has_free_tier": true,
"currency": "USD",
"billing_options": ["monthly", "annual"],
"tiers": [
{
"name": "Free",
"price_monthly": 0,
"price_annual": 0,
"price_unit": "per member",
"features": ["Collaborative workspace", "Basic page analytics"]
},
{
"name": "Plus",
"price_monthly": 10,
"price_annual": 8,
"price_unit": "per member",
"features": ["Unlimited blocks", "Unlimited file uploads", "30-day page history"]
},
{
"name": "Business",
"price_monthly": 18,
"price_annual": 15,
"price_unit": "per member",
"features": ["SAML SSO", "Advanced analytics", "90-day page history"]
}
]
},
"metadata": {
"extraction_status": "success",
"extraction_method": "llm-openai",
"confidence_score": 0.95,
"tiers_found": 4
}
}

📈 Confidence Scores

ScoreMeaning
0.9+High confidence, LLM validated
0.7-0.9Good, DOM extraction worked
0.3-0.7Partial data, some tiers may be missing
<0.3Low confidence, enable LLM for better results

⚠️ Limitations

  • Enterprise pricing (Salesforce, SAP, Oracle) often requires login
  • Usage-based pricing shows estimates only
  • Some sites block automated browsers
  • Results cached 24 hours to reduce costs
  • No LLM fallback returns empty tiers if selectors fail

🔗 API Integration

Run programmatically via Apify API:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('datahq/saas-pricing-radar').call({
query: 'Notion',
useLLM: true,
llmProvider: 'openai',
openaiApiKey: process.env.OPENAI_API_KEY
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

📬 Feedback

Found a bug or have a feature request? Use the Issues tab or leave a review.