SaaS Pricing Page Scraper avatar

SaaS Pricing Page Scraper

Pricing

from $2.90 / 1,000 results

Go to Apify Store
SaaS Pricing Page Scraper

SaaS Pricing Page Scraper

Extract accurate, dynamically rendered pricing data from any SaaS website. Built with Playwright to bypass JS loading screens. Supports custom CSS selectors. Perfect for competitor intelligence, n8n workflows, and feeding clean text to AI Agents (LLMs) for pricing analysis.

Pricing

from $2.90 / 1,000 results

Rating

0.0

(0)

Developer

Aether

Aether

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

SaaS Pricing Monitor Actor

A production-grade Apify Actor built for scraping dynamically rendered SaaS pricing pages. Powered by Playwright, Crawlee, and the Apify platform, it extracts structured data and full-page screenshots from any pricing page—regardless of how JavaScript-heavy it is.

Why This Actor?

Most SaaS companies render their pricing behind JavaScript frameworks (React, Vue, Next.js). Traditional HTTP scrapers fail silently on these pages, returning empty bodies or loading spinners. This Actor solves that problem with a full Playwright browser engine that executes JavaScript, waits for network idle, and captures the fully rendered page exactly as a human sees it.

Key Advantages

FeatureBenefit
Full Browser RenderingHandles React, Vue, Angular, Next.js, and any JS-rendered page. No more blank responses from curl or fetch.
Full-Page ScreenshotsEvery crawl produces a high-resolution PNG screenshot automatically stored to Apify cloud storage with a permanent public URL. Perfect for visual verification and archival.
Smart Selector ExtractionTarget specific pricing plan containers, feature comparison tables, or any DOM element with a CSS selector. Falls back gracefully to full-body extraction when no selector is provided or the selector is not found.
Structured Output for n8n / Make / ZapierEvery result is pushed as clean JSON to the Apify Dataset, making it instantly consumable by automation platforms.
AI & LLM ReadyClean extractedText and extractedHtml fields are ready to feed into GPT, Claude, or any LLM for pricing analysis, competitive intelligence, and trend detection.
Zero-Config RobustnessBuilt-in retries (up to 2 attempts), network idle timeout handling, selector not-found fallback, and comprehensive error reporting per URL.
Docker-Based DeploymentRuns on Apify's official apify/actor-node-playwright-chrome:20 image with all Playwright browsers pre-installed. No setup required.
Single-File ArchitectureThe entire Actor logic lives in one clean, readable file (src/main.js). Easy to audit, modify, and extend.

How It Works

Input (URL + optional selector)
┌──────────────────────────────┐
│ Playwright Browser Launch │
(Full Chromium engine)
└──────────────┬───────────────┘
┌──────────────────────────────┐
│ Page Load & Render │
│ • Wait for network idle │
│ • Extra 2s settling time │
│ • Handle selector lookup │
└──────────────┬───────────────┘
┌──────────────────────────────┐
│ Data Extraction │
│ • HTML (from selector/body)
│ • Plain text (InnerText)
│ • Page title │
└──────────────┬───────────────┘
┌──────────────────────────────┐
│ Screenshot Capture │
│ • Full-page PNG screenshot │
│ • Stored in Apify KV Store │
│ • Public URL generated │
└──────────────┬───────────────┘
┌──────────────────────────────┐
│ Output to Apify Dataset │
│ • Structured JSON
│ • Ready for n8n / API
└──────────────────────────────┘

Input

The Actor accepts two fields via Apify's input schema:

FieldTypeRequiredDescription
urlstringYesThe full URL of the SaaS pricing page to scrape.
selectorstringNoA CSS selector to target a specific section (e.g., .pricing-container, #plans, .plan-grid). Leave empty to scrape the full page body.

Example Input

{
"url": "https://www.notion.so/pricing",
"selector": ""
}

With a specific selector:

{
"url": "https://www.linear.app/pricing",
"selector": ".pricing-plans"
}

Output

Each crawl pushes a structured JSON object to the Apify Dataset:

FieldTypeDescription
urlstringThe crawled URL
titlestringPage <title> tag content
selectorstringThe CSS selector used (defaults to "body")
extractedHtmlstringRaw HTML of the extracted section
extractedTextstringPlain text content (innerText) of the extracted section
screenshotUrlstringPermanent public URL of the full-page screenshot
crawledAtstringISO 8601 timestamp of the crawl
errorstringError message (only present on failure)

Example Output

{
"url": "https://www.notion.so/pricing",
"title": "Notion Pricing – Plans & Features",
"selector": "body",
"extractedHtml": "<div class=\"pricing-page\">...</div>",
"extractedText": "Free\n$0/month\nPlus\n$10/month\nBusiness\n$18/month\nEnterprise\nContact sales",
"screenshotUrl": "https://api.apify.com/v2/key-value-stores/xxx/records/pricing-screenshot-1712345678901.png",
"crawledAt": "2025-05-24T10:00:00.000Z"
}

Use Cases

1. Competitor Pricing Intelligence

Schedule this Actor to scrape your competitors' pricing pages daily. The structured extractedText output makes it trivial to detect plan changes, price adjustments, and new feature tiers.

2. n8n Automation Workflows

Connect the Actor to n8n via the official Apify integration. Trigger actions when pricing changes are detected—send Slack alerts, update spreadsheets, or feed data into internal dashboards.

3. AI-Powered Pricing Analysis

Feed the extractedText output directly into LLMs (GPT-4, Claude, Gemini) to generate competitive analysis reports, pricing strategy recommendations, and market positioning insights.

4. Screenshot Archival

Every crawl generates a permanent, publicly accessible screenshot URL. Build a visual timeline of pricing page changes to track redesigns and messaging shifts over time.

5. Multi-Page Batch Scraping

Feed multiple URLs into the Actor to scrape dozens of competitors in a single run. Combine with the Apify API to build fully automated competitor monitoring pipelines.


Project Structure

saas-pricing-monitor-actor/
├── Dockerfile # Apify-ready Docker image (Playwright + Chrome pre-installed)
├── INPUT_SCHEMA.json # Apify input field definitions
├── package.json # Node.js dependencies (apify, crawlee, playwright)
├── src/
│ └── main.js # Core Actor logic (entry point)
├── storage/
│ └── key_value_stores/
│ └── default/
│ └── INPUT.json # Local development input sample
└── .actor/
└── actor.json # Apify Actor specification

Tech Stack

TechnologyPurpose
ApifyActor runtime, Dataset storage, Key-Value Store for screenshots
CrawleeWeb scraping framework with built-in retry logic and request management
PlaywrightFull Chromium browser engine for rendering JavaScript-heavy pages
Node.jsRuntime environment (ES modules)

Running Locally

# Install dependencies
npm install
# Set up your input (edit storage/key_value_stores/default/INPUT.json)
{
"url": "https://www.notion.so/pricing",
"selector": ""
}
# Run the Actor
npm start

Deploying to Apify

  1. Install the Apify CLI:

    $npm install -g apify-cli
  2. Log in to your Apify account:

    $apify login
  3. Push the Actor to Apify:

    $apify push
  4. Run it from the Apify Console, API, or n8n integration.

Error Handling

The Actor is designed to fail gracefully:

  • Network idle timeout: If the page takes too long to stabilize, the Actor proceeds with whatever content is loaded.
  • Selector not found: Falls back to extracting the full <body> content instead of crashing.
  • Extraction failures: Catches errors per-URL, logs them, and pushes an error entry to the Dataset so downstream workflows can handle failures without breaking.
  • Automatic retries: Failed requests are retried up to 2 times before giving up.

Notes

  • The maximum request handler timeout is set to 120 seconds to accommodate slow-loading pricing pages with heavy JavaScript.
  • Screenshots are stored in the Apify Key-Value Store with a timestamp-based filename for uniqueness.
  • The Actor is designed to be integrated into larger automation pipelines—all output is structured and machine-readable.

License

MIT