B2B pricing

Public SaaS and B2B pricing-page change alerts

This Actor fetches public competitor pricing pages from competitors[], snapshots extracted text, and emits source-linked change rows when price/tier copy drifts. Live required field is competitors, not a top-level urls array.

Not authenticated billing portals, CPQ, or invoices. Not PDF contracts. Public web only. Distinct from SaaS Pricing Tracker, which uses targets[] for pricing/terms/features.

from $9.00 / 1,000 Delivered monitoring result row ($0.009 per delivered apify-default-dataset-item). No Actor Start. Unchanged runs that write zero default-dataset rows typically charge $0.00 on current PPE.

Open B2B Pricing Scraper on Apify

B2B Pricing Scraper, not a neighboring Actor

Use this page for this Actor’s job. Use SaaS Pricing Tracker for Pricing/terms diffs; Use Website Content Extractor for One-shot page-to-markdown; Use Shopify Store Scraper for Public Shopify catalogs.

This ActorSaaS Pricing TrackerWebsite Content ExtractorShopify Store Scraper
Intent B2B Pricing ScraperPricing/terms diffsOne-shot page-to-markdownPublic Shopify catalogs
Primary input see schematargets[]urlsstoreUrls
What it reads Public sources listed on the Store pagepublic SaaS pagespage HTMLShopify JSON endpoints
Primary output Dataset rows billed per live PPESaaS change rowsmarkdown/textstore/catalog rows
Not this job Not authenticated billing portals, CPQ, or invoices. Not PDF contracts. Public web only. Distinct from SaaS Pricing Tracker, which uses targets[] for pricing/terms/features.Not B2B competitor pricing packsNot recurring pricing diffsNot Shopify App Store reviews

Store ID: taroyamada/competitive-pricing-monitor. Respect source terms, robots.txt, and rate limits.

Use cases

How is B2B Pricing Scraper different from SaaS Pricing Tracker and Website Content Extractor?

B2B Pricing Scraper (taroyamada/competitive-pricing-monitor): This Actor fetches public competitor pricing pages from competitors[], snapshots extracted text, and emits source-linked change rows when price/tier copy drifts. Live required field is competitors, not a top-level urls array. Not authenticated billing portals, CPQ, or invoices. Not PDF contracts. Public web only. Distinct from SaaS Pricing Tracker, which uses targets[] for pricing/terms/features. SaaS Pricing Tracker is for Pricing/terms diffs (input targets[]; public SaaS pages; SaaS change rows). Not B2B competitor pricing packs. Website Content Extractor is for One-shot page-to-markdown (input urls; page HTML; markdown/text). Not recurring pricing diffs. Shopify Store Scraper is for Public Shopify catalogs (input storeUrls; Shopify JSON endpoints; store/catalog rows). Not Shopify App Store reviews.

What input is required?

Live required fields: competitors. Published exampleRunInput is shown below. Monitor SaaS and ecommerce competitor pricing pages for plan changes, price increases/decreases, new/removed tiers, and packaging shifts

Field Type Default Notes
competitors any[] required empty required Competitors to monitor. Each entry is one competitor. Provide pricing page URLs, optional include/exclude patterns, and a stable id. One summary row per competitor is written to the dataset.
requestTimeoutSeconds integer 30 Request timeout (seconds). HTTP request timeout per pricing page fetch. min=5 max=120
userAgent string empty Custom User-Agent. Optional User-Agent header used for pricing page requests.
maxChars integer 40000 Max extracted chars per page. Upper bound for extracted text per pricing page. Increase for long pricing pages with many plans. min=1000 max=200000
delivery string enum dataset Delivery mode. dataset: write competitor rows to Apify dataset (recommended for starters). webhook: POST JSON payload to webhookUrl. email: placeholder, not implemented in MVP. enum: dataset, webhook, email
datasetMode string enum changes_only Dataset rows to include. changes_only: only competitors with detected changes. all: all competitors regardless of change status. action_needed: only high-severity changes. enum: action_needed, changes_only, all
webhookUrl string empty Webhook URL. Required when delivery is webhook.
notifyOnNoChange boolean false Notify even if no change. When false, webhook delivery is skipped if no competitors changed. Reduces noise.
snapshotKey string competitive-pricing-monitor Snapshot key (keep stable). Key used to persist pricing snapshots between runs. Keep this stable across runs. First run seeds the baseline; second run detects the first changes.
summaryMaxLines integer 15 Max diff lines per page. Maximum added and removed lines included in change summaries per page. min=5 max=50
concurrency integer 3 Concurrency. Concurrent page fetches. Keep at 2–3 for respectful crawling. min=1 max=10
batchDelayMs integer 500 Inter-batch delay (ms). Delay between concurrency batches to reduce rate-limit pressure. min=0 max=10000
nowIso string empty Override current time (ISO). Optional deterministic timestamp override for testing.
dryRun boolean false Dry run (no snapshot save). Preview competitor pricing pages without persisting snapshots. Leave false when you want the baseline to count.

Published Store example run input (omitted fields take schema defaults):

{
  "competitors": [
    {
      "id": "hubspot",
      "name": "HubSpot",
      "tier": "direct",
      "tags": [
        "crm",
        "marketing",
        "smb"
      ],
      "pricingPages": [
        {
          "id": "hubspot-pricing",
          "name": "HubSpot Pricing",
          "url": "https://www.hubspot.com/pricing",
          "includePatterns": [
            "starter",
            "professional",
            "enterprise",
            "per month",
            "per user",
            "\\$",
            "pricing",
            "free"
          ],
          "excludePatterns": [
            "cookie",
            "sign in",
            "sign up",
            "footer",
            "nav",
            "blog"
          ]
        }
      ]
    },
    {
      "id": "salesforce",
      "name": "Salesforce",
      "tier": "direct",
      "tags": [
        "crm",
        "enterprise"
      ],
      "pricingPages": [
        {
          "id": "salesforce-pricing",
          "name": "Salesforce Sales Cloud Pricing",
          "url": "https://www.salesforce.com/crm/pricing/",
          "includePatterns": [
            "essentials",
            "professional",
            "enterprise",
            "unlimited",
            "per user",
            "\\$",
            "annually"
          ],
          "excludePatterns": [
            "cookie",
            "sign in",
            "sign up"
          ]
        }
      ]
    }
  ],
  "requestTimeoutSeconds": 30,
  "maxChars": 40000,
  "delivery": "dataset",
  "datasetMode": "changes_only",
  "notifyOnNoChange": false,
  "snapshotKey": "competitive-pricing-quickstart",
  "summaryMaxLines": 15,
  "concurrency": 2,
  "batchDelayMs": 800,
  "dryRun": false
}

Run B2B Pricing Scraper on Apify

How do dataset, webhook, and dry-run delivery work?

delivery defaults to dataset on the live schema. Dataset output is the billable surface when rows are written. webhookUrl is used when delivery is webhook (and typically not during dryRun). dryRun true validates or samples without the usual dataset/webhook side effects described on the Store schema. datasetMode can limit emits to changes_only / changed_only / action_needed versus all. Unchanged runs that write zero default-dataset rows typically charge $0.00 on current PPE.

What does a result contain?

Published README Output Example / Sample Output JSON. Treat README samples as illustrations, not a live coverage guarantee. There is no published output JSON schema on the Store page.

How is B2B Pricing Scraper priced?

Billing is pay per event. The live Store card is from $9.00 / 1,000 Delivered monitoring result row ($0.009 per delivered apify-default-dataset-item). No Actor Start. Unchanged runs that write zero default-dataset rows typically charge $0.00 on current PPE. Current PPE:

Event Price Emitted when
apify-default-dataset-item (Delivered monitoring result row) $0.009 Charged only when a new or changed monitoring result row is delivered. Unchanged runs are free.

The published README Cost block is stale versus the live Store pricing tab. README Cost still quotes actor-start $0.01. README Cost quotes dataset-item $0.003; live primary is $0.009 (Delivered monitoring result row). Live: Delivered monitoring result row $0.009. This page quotes live PPE only.

from $9.00 / 1,000 Delivered monitoring result row ($0.009 per delivered apify-default-dataset-item). No Actor Start. Unchanged runs that write zero default-dataset rows typically charge $0.00 on current PPE.

See B2B Pricing Scraper pricing on Apify

Limits to keep in mind

Open B2B Pricing Scraper on Apify

Related pages