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
- Procurement and finance: seed a baseline on one vendor pricing page, then alert when public prices or plan copy change.
- RevOps and legal: watch terms packs alongside pricing, with include/exclude patterns to drop cookie banners and sign-in chrome.
- Portfolio review: set
datasetModetoallwhen you need a delivered row on the first success; keepchanges_onlyfor later free unchanged polls.
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
vendorsrequired. Public pages only; no authenticated billing portals.- Unchanged runs are free on the live card; first
changes_onlyrun often only seeds baseline. - README examples that send
urlsorsectionSelectorare not live schema fields. - Not a visual QA product and not legal advice.
- Respect vendor site terms, robots.txt, and rate limits.
Open SaaS Vendor Pricing & Page Change Scraper on Apify
Related pages
- SaaS Pricing Tracker — Flat targets[] page diffs, not vendor packs.
- B2B Pricing Scraper — competitors[] pricing pages.
- SaaS Pricing Competitor Monitor — Price-page snapshots.
- Website Change Monitor — Generic URL diffs.
- Docs & Changelog Drift Scraper — Docs/changelog surfaces, not procurement packs.
- Website Terms & Policy Scraper — SHA256 legal-page diffs.
- Website Content Extractor — One-shot markdown, not recurring vendor diffs.
- Tools