SaaS Pricing & Terms Monitor API
Pricing
from $1.00 / 1,000 results
SaaS Pricing & Terms Monitor API
Monitor pricing, terms, and feature pages with machine-readable diffs, snapshot history, and dataset/webhook delivery.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
太郎 山田
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Track arbitrary websites for stealthy modifications and automatically extract structured text diffs using this reliable web scraper. Business intelligence teams and product managers can schedule recurring data fetches to keep a close eye on competitor SaaS pricing pages, Terms of Service updates, or user policy shifts without writing custom scraping logic. By crawling provided URLs using an automated browser, the actor strips away superficial layout noise, captures clean text data, takes SHA256 snapshots, and compares historical states to pinpoint exact changes.
Run this website monitoring tool on a daily or weekly schedule to catch unannounced price hikes or compliance shifts across the web. Instead of manually checking target pages or running google search queries for cached versions, you can rely on this scraper to detect real modifications. When a page updates, instantly trigger webhook alerts to notify Ops teams or send email digests.
The extracted results isolate the precise details of what changed, providing specific structured fields like previousHash, currentHash, addedContent, and removedContent. This ensures your downstream tools only process meaningful text updates. Safely track scraped data from critical websites, integrate the findings into your analytics dashboards, and export the exact diffs to stay ahead.
Store Quickstart
- Start with
store-input.example.jsonfor a proven three-page first run. - If that output fits, switch to
store-input.templates.jsonand pick one of: Quickstart Pricing Monitorfor the cheapest first successPricing + Terms + Featuresfor broader daily monitoringWebhook Alertfor Slack, Discord, or internal pipelines
Key Features
- • **複数ターゲット監視 (
price|terms|features|general** — 複数ターゲット監視 (price|terms|features|general`) - • テキスト抽出 + SHA256スナップショット管理 — テキスト抽出 + SHA256スナップショット管理
- • 変更サマリ(追加/削除行) — 変更サマリ(追加/削除行)
- • Apify KV が使えない環境でもローカル
state/にフォールバック — Apify KV が使えない環境でもローカルstate/にフォールバック
Use Cases
| Who | Why |
|---|---|
| Developers | Automate recurring data fetches without building custom scrapers |
| Data teams | Pipe structured output into analytics warehouses |
| Ops teams | Monitor changes via webhook alerts |
| Product managers | Track competitor/market signals without engineering time |
Input
| Field | Type | Default | Description |
|---|---|---|---|
| targets | array | prefilled | List of targets. Each item supports id, name, kind, url, includePatterns, excludePatterns, maxChars, fixtureHtml, fixtur |
| requestTimeoutSeconds | integer | 30 | HTTP request timeout per target. |
| userAgent | string | — | Optional user-agent header for target requests. |
| maxChars | integer | 25000 | Upper bound for extracted text length. |
| delivery | string | "dataset" | Where to send run results. |
| datasetMode | string | "changes_only" | Choose whether dataset/webhook sends all targets or only event items. |
| webhookUrl | string | — | Required when delivery is webhook. |
| notifyOnNoChange | boolean | false | When false, webhook mode skips if no event items. |
Input Example
{"targets": [{"id": "notion-pricing","name": "Notion Pricing","kind": "price","url": "https://www.notion.so/pricing","includePatterns": ["price","free","business","enterprise"],"excludePatterns": ["cookie","login"]}],"requestTimeoutSeconds": 30,"maxChars": 25000,"delivery": "dataset","datasetMode": "changes_only","notifyOnNoChange": false,"snapshotKey": "saas-change-monitor-snapshots","dryRun": false}
Output
| Field | Type | Description |
|---|---|---|
meta | object | |
results | array | |
results[].id | string | |
results[].name | string | |
results[].kind | string | |
results[].url | string | |
results[].capturedAt | timestamp | |
results[].changed | boolean | |
results[].status | string | |
results[].hash | string | |
results[].previousHash | string | |
results[].previousCapturedAt | string | |
results[].lineCount | number | |
results[].changeSummary | object | |
results[].preview | string | |
results[].error | string | |
results[].finalUrl | string |
Output Example
{"meta": {"generatedAt": "2026-03-13T09:40:25.990Z","now": "2026-03-13T09:40:25.951Z","input": {"targets": [{"id": "notion-pricing","name": "Notion Pricing","kind": "price","url": ""},{"id": "linear-terms","name": "Linear Terms","kind": "terms","url": ""}],"requestTimeoutSeconds": 30,"maxChars": 25000,"delivery": "dataset","datasetMode": "all","dryRun": false},"snapshot": {"key": "saas-change-monitor-proof-sample","loadedFrom": "local","savedTo": "local"},"warnings": ["target(notion-pricing): includePatterns is empty, full-page text will be monitored","target(linear-terms): includePatterns is empty, full-page text will be monitored"],"totals": {"targets": 2,"changed": 0,"initial": 2,"unchanged": 0,"errors": 0
API Usage
Run this actor programmatically using the Apify API. Replace YOUR_API_TOKEN with your token from Apify Console → Settings → Integrations.
cURL
curl -X POST "https://api.apify.com/v2/acts/taroyamada~saas-change-monitor-actor/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{ "targets": [ { "id": "notion-pricing", "name": "Notion Pricing", "kind": "price", "url": "https://www.notion.so/pricing", "includePatterns": [ "price", "free", "business", "enterprise" ], "excludePatterns": [ "cookie", "login" ] } ], "requestTimeoutSeconds": 30, "maxChars": 25000, "delivery": "dataset", "datasetMode": "changes_only", "notifyOnNoChange": false, "snapshotKey": "saas-change-monitor-snapshots", "dryRun": false }'
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("taroyamada/saas-change-monitor-actor").call(run_input={"targets": [{"id": "notion-pricing","name": "Notion Pricing","kind": "price","url": "https://www.notion.so/pricing","includePatterns": ["price","free","business","enterprise"],"excludePatterns": ["cookie","login"]}],"requestTimeoutSeconds": 30,"maxChars": 25000,"delivery": "dataset","datasetMode": "changes_only","notifyOnNoChange": false,"snapshotKey": "saas-change-monitor-snapshots","dryRun": false})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('taroyamada/saas-change-monitor-actor').call({"targets": [{"id": "notion-pricing","name": "Notion Pricing","kind": "price","url": "https://www.notion.so/pricing","includePatterns": ["price","free","business","enterprise"],"excludePatterns": ["cookie","login"]}],"requestTimeoutSeconds": 30,"maxChars": 25000,"delivery": "dataset","datasetMode": "changes_only","notifyOnNoChange": false,"snapshotKey": "saas-change-monitor-snapshots","dryRun": false});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Tips & Limitations
- Schedule weekly runs for procurement watchlists; daily for critical vendors.
- Use webhook delivery to drop diffs into a shared procurement Slack channel.
- Track competitor pricing quarterly to inform your own pricing strategy.
- Store snapshots persistently — these are valuable for contract renegotiation evidence.
- Combine with
vendor-change-monitorfor term-level changes alongside pricing.
FAQ
How are diffs computed?
Semantic diff on structured fields (prices, plan names, feature tables) rather than raw HTML — filters out cosmetic changes.
What happens if a vendor redesigns their site?
The actor falls back to best-effort structured extraction; material redesigns may require a vendor-specific adapter update.
Can I track changes to downloadable contracts/PDFs?
The actor tracks content text; PDF-only vendors with dynamic URLs may require manual review.
Does this bypass anti-bot measures?
No — it uses standard requests. Some vendors with aggressive bot protection may not be monitorable; report these issues and we'll adjust fetch strategy.
Can I monitor internal portals?
No — this actor is public-web only. Internal portals with auth are out of scope.
Related Actors
SaaS & Vendor Monitoring cluster — explore related Apify tools:
- SaaS / Company Site Change Monitor Pro — Premium monitor for pricing, terms, and feature page diffs with dataset/webhook delivery.
- Vendor Pricing, Terms & Renewal Watch API — Monitor vendor pricing changes, terms-of-service updates, renewal language, privacy / DPA policy diffs, and procurement / vendor-risk alerts with one summary-first vendor digest per monitored vendor.
- Vendor Status Page & Incident Digest Monitor — Monitor public vendor status pages and incident feeds.
Cost
Pay Per Event:
actor-start: $0.01 (flat fee per run)dataset-item: $0.003 per output item
Example: 1,000 items = $0.01 + (1,000 × $0.003) = $3.01
No subscription required — you only pay for what you use.
⭐ Was this helpful?
If this actor saved you time, please leave a ★ rating on Apify Store. It takes 10 seconds, helps other developers discover it, and keeps updates free.
Bug report or feature request? Open an issue on the Issues tab of this actor.