Vendor page diffs

Public vendor pricing and terms diffs for procurement watchlists

SaaS Vendor Pricing & Page Change Scraper headless-crawls public vendor pricing, terms, feature, security, and status pages you list. It snapshots text, emits semantic diffs (previous vs current prices, plan and feature changes), severity, recommended actions, and section or PDF text. The first run seeds a baseline; later runs prove diffs. It is not the simpler targets[] SaaS page watcher — that job is SaaS Pricing Tracker — and it is not one-shot page markdown (Website Content Extractor).

Try Input: 1 vendor, datasetMode all, dryRun false. Live Store card: $10.00 / 1,000 delivered monitoring result rows ($0.01 per new or changed row). Unchanged runs are free. No Actor Start.

Try the cheapest first paid SaaS Vendor Pricing & Page Change Scraper run on Apify Input

Open taroyamada/vendor-change-monitor on the Apify Store

Vendor pack diffs, not one-shot markdown or a single URL target list

Use this page when procurement needs structured vendor packs (pricing, terms, and optional security/status/privacy). Use SaaS Pricing Tracker when the input is a flat targets[] list of public SaaS pages. Use B2B Pricing Scraper when the job is competitor pricing pages in competitors[]. Use Website Change Monitor when you only need generic page diffs on URLs you watch.

SaaS Vendor Pricing & Page Change Scraper SaaS Pricing Tracker B2B Pricing Scraper
Intent Procurement vendor packs with severity and recommended actions Public SaaS page hash/text drift on targets[] Competitor pricing page diffs
Primary input vendors[] with urlPacks targets[] of id, name, kind, url competitors[] pricing pages
What it reads Public vendor pricing, terms, and optional pack URLs Public SaaS pages you list Public competitor pricing pages
Primary output Monitoring result rows when new or changed SaaS change rows Pricing change rows
Not this job Not authenticated billing portals. Not a CPQ login. Not vendor pack criticality/owner metadata. Not multi-pack vendor monitoring.

Store ID: taroyamada/vendor-change-monitor. Categories on the live Store card: Business, Automation. Fetch only sources you are authorized to use. Respect source terms, robots.txt, and rate limits.

Use cases

The live Store tagline is: track hidden subscription cost hikes and plan changes across your software stack; extract exact previous vs current prices for contract renewal leverage. Default memory on the Store listing is 1024 MB.

How is SaaS Vendor Pricing & Page Change Scraper different from SaaS Pricing Tracker and B2B Pricing Scraper?

SaaS Vendor Pricing & Page Change Scraper (taroyamada/vendor-change-monitor) takes a vendors JSON array of id, name, criticality, owner, tags, and urlPacks. Live PPE is $0.01 per delivered new or changed monitoring result row ($10.00 / 1,000). Unchanged runs are free. SaaS Pricing Tracker uses targets[] of public SaaS pages and bills SaaS change rows. B2B Pricing Scraper uses competitors[] pricing pages. Website Change Monitor is generic URL diffs. Use this Actor for vendor packs. Use SaaS Pricing Tracker for a flat target list. Use B2B Pricing Scraper for competitor price pages.

What input is required?

vendors is required. Prefill shape is one vendor (Stripe) with pricing and terms packs; each page has id, name, url, includePatterns, and excludePatterns. Live schema also includes requestTimeoutSeconds (default 30, min 5, max 120), userAgent, maxChars (default 30000, min 1000, max 200000), delivery (dataset, webhook, or email; default dataset), datasetMode (action_needed, changes_only, all; default changes_only), webhookUrl, notifyOnNoChange (default false), snapshotKey (default vendor-pricing-terms-watch), diffMode (line_summary or hash_only; default line_summary), summaryMaxLines (default 12, min 5, max 50), concurrency (default 3, min 1, max 10), batchDelayMs (default 500), nowIso, and dryRun (default false). README Input Examples that send urls or sectionSelector are not live schema fields.

Field Type Default Notes
vendors array (json) required Starter: 1 vendor, pricing + terms. Advanced: 2–3 vendors, more packs.
requestTimeoutSeconds integer 30 HTTP timeout per monitored page. min 5, max 120.
userAgent string — Optional User-Agent.
maxChars integer 30000 Max extracted text per page. min 1000, max 200000.
delivery string dataset Enum: dataset, webhook, email.
datasetMode string changes_only Enum: action_needed, changes_only, all.
webhookUrl string — Required when delivery is webhook.
notifyOnNoChange boolean false If false, webhook skips when nothing changed.
snapshotKey string vendor-pricing-terms-watch Stable recurring monitor key.
diffMode string line_summary Enum: line_summary, hash_only.
summaryMaxLines integer 12 Max added/removed lines per page. min 5, max 50.
concurrency integer 3 Parallelism. min 1, max 10.
batchDelayMs integer 500 Inter-batch delay. min 0, max 10000.
nowIso string — Optional deterministic timestamp.
dryRun boolean false Preview without persisting snapshots or sending alerts.

Cheapest first paid input (one vendor, datasetMode all so a first-success row can bill):

{
  "vendors": [
    {
      "id": "stripe",
      "name": "Stripe",
      "criticality": "high",
      "owner": "Procurement",
      "tags": [
        "payments"
      ],
      "urlPacks": {
        "pricing": [
          {
            "id": "stripe-pricing",
            "name": "Stripe Pricing",
            "url": "https://stripe.com/pricing",
            "includePatterns": [
              "pricing",
              "annual",
              "enterprise",
              "billing"
            ],
            "excludePatterns": [
              "cookie",
              "sign in"
            ]
          }
        ]
      }
    }
  ],
  "delivery": "dataset",
  "datasetMode": "all",
  "snapshotKey": "vendor-pricing-terms-watch",
  "diffMode": "hash_only",
  "concurrency": 1,
  "dryRun": false
}

If a monitoring result row is delivered, documented live PPE is $0.01. A changes_only first run that only seeds baseline may be $0.

Run this 1-vendor input on Apify

What is the cheapest first paid Try Input?

The live Store card says unchanged runs are free. A changes_only first run seeds baseline and may therefore be $0. To request a billable delivered row on first success, use datasetMode all with one vendor, one pricing URL, dryRun false, and hash_only to keep the diff cheap. Unit price if a row is delivered: $0.01.

What does a result contain?

actor.json requiredOutputFields are generatedAt, now, input, and snapshot. README fields include meta, recurringDigest, actionNeeded[] (vendorId, vendorName, owner, severity, status, reason, changedPacks, recommendedActions, executiveSummary), and results. Example rows also show vendorSummary. There is no published output JSON schema on the Store page. Treat README samples as illustrations, not a live coverage guarantee.

How is SaaS Vendor Pricing & Page Change Scraper priced?

Billing is pay-per-event. The live Store card is $10.00 / 1,000 delivered monitoring result rows. The current event is apify-default-dataset-item titled Delivered monitoring result row at $0.01, charged only when a new or changed monitoring result row is delivered. Unchanged runs are free. No Actor Start on the current card (an older superseded card had apify-actor-start $0.001 plus result $0.01). The README Cost section still quotes actor-start $0.01 and dataset-item $0.003. Prefer the live Store card.

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

README Cost still lists actor-start $0.01 and dataset-item $0.003. This page quotes live PPE only.

$10.00 / 1,000 delivered monitoring result rows. No Actor Start. Unchanged runs are free.

See SaaS Vendor Pricing & Page Change Scraper pricing on Apify

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

delivery defaults to dataset and also accepts webhook or email. webhookUrl is required when delivery is webhook. notifyOnNoChange defaults to false, so webhook skips when there are no changed digests and no action-needed items. dryRun previews without persisting snapshots or sending alerts. datasetMode changes_only is the default; all is the first-paid path when you need a delivered row on first success.

Limits to keep in mind

Open SaaS Vendor Pricing & Page Change Scraper on Apify

Related pages