Website Change Monitor — Diff, Screenshot & AI Summary
Pricing
from $2.00 / 1,000 page checkeds
Website Change Monitor — Diff, Screenshot & AI Summary
Watch pricing pages, product availability, terms, docs or any URL. Get only what changed since the last run — added/removed text, change %, screenshot — plus an optional AI summary of what the change means.
Pricing
from $2.00 / 1,000 page checkeds
Rating
0.0
(0)
Developer
Al Moutasem Nabil
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Website Change Monitor — Track Any Page for Changes, with Diff, Screenshot & AI Summary
Watch pricing pages, product availability, terms, docs or any URL. Get only what changed since the last run — added/removed text, change %, screenshot — plus an optional AI summary of what the change means. Schedule it and route alerts to Slack or email.
Who it's for
- Product marketers watching competitors' pricing and plan pages.
- E-commerce and procurement teams watching stock status, prices and tender portals.
- Legal and compliance watching terms, privacy policies and regulatory pages.
- Developers watching API docs, changelogs and status pages.
- Analysts and journalists watching government announcements and published figures.
What makes it different
- Only what changed. Each run compares against the last one and returns the changed pages, not a fresh copy of everything.
- A real diff. Added and removed lines, plus a
changePercent, so you can tell a new pricing tier from a reworded footer at a glance. - Noise control that actually works. Nav, footers and cookie banners are stripped before
comparing;
ignorePatternsneutralises timestamps and counters;minChangePercentsets a floor; and a CSSselectornarrows the watch to a single price or status line. - Keyword alerts. "Sold out" appearing or "In stock" disappearing is reported however small the edit, regardless of the change threshold.
- AI meaning, not just text. An optional summary says what the change means, categorises it (price, availability, legal, content, outage) and scores importance 1–5, so you can route only the 4s and 5s to a human. Arabic summaries are written in Modern Standard Arabic.
- Screenshots of changed pages, stored with the run.
Input
{"pages": [{ "url": "https://www.apify.com/pricing", "name": "Apify pricing", "selector": ".pricing-table" },{ "url": "https://nodejs.org/en/blog", "name": "Node.js releases" },{ "url": "https://shop.example.com/item/42", "name": "Stock", "ignoreSelectors": [".reviews"] }],"trackingId": "competitor-watch","mode": "changes","ignorePatterns": ["Last updated:.*", "\\d{1,2}:\\d{2}\\s*(AM|PM)?"],"minChangePercent": 0.5,"watchKeywords": ["Sold out", "Discontinued"],"aiSummary": true,"screenshotOnChange": true}
The first run is a silent baseline — it records the pages and reports nothing, so your first
alert is a real change. Set emitBaselineAsChanged if you want that first run reported.
Output
One item per page. Every field is documented in .actor/dataset_schema.json; the Console shows
Changes and All pages views. A changed page, from a real test run:
{"url": "https://www.apify.com/pricing","name": "Apify pricing","status": "changed","httpStatus": 200,"checkedAt": "2026-09-07T06:00:00.000Z","lastChangedAt": "2026-09-07T06:00:00.000Z","changePercent": 11.901,"diff": {"added": ["Pay per event - you pay a fixed price for the events the Actor's developer defines."],"removed": ["A line that will disappear", "Another removed line"]},"keywordHits": null,"contentHash": "3f2a1c9e8b7d6f5a4c3b2a1908f7e6d5c4b3a291","wordCount": 1482,"pageTitle": "Pricing | Apify","screenshotUrl": "https://api.apify.com/v2/key-value-stores/.../records/screenshot-...png","aiSummary": {"summary": "The Pro plan price rose from $49 to $59 per month and annual billing was added.","category": "price_change","importance": 5},"error": null,"truncated": false}
Pages that could not be fetched come back with status: "error" and are never charged.
Schedule it and get alerts
- Fill in the input and Save as task.
- Add a Schedule to the task — daily at 07:00 is typical; hourly for stock or status pages.
- Open the task's Integrations tab and add Slack, Email, Webhook, Make or
Zapier on Run succeeded. In
changesmode the dataset is empty when nothing changed, so you only hear from it when something actually moved. - For Slack, map
name,url,changePercentandaiSummary.summaryinto the message — that is usually all a human needs to decide whether to look.
n8n and Make
Use the Apify node with Run Actor and get dataset, then branch on
aiSummary.importance >= 4 to page someone, and log the rest. Filtering on category lets you send
price_change to sales and legal_policy to legal.
Use as an API / MCP tool
With Standby enabled the Actor stays warm and checks one page per request:
GET https://<your-actor>.apify.actor/?url=https://example.com/pricing&trackingId=my-watch&aiSummary=1
Parameters mirror the input (url, selector, trackingId, renderJs, aiSummary,
summaryLanguage, screenshotOnChange, minChangePercent, watchKeywords). GET /health returns
{"ok":true}.
Pricing
Pay-per-event. You pay for pages checked and changes found.
| Event | Price | When |
|---|---|---|
| Page checked | $0.002 | Per page fetched and compared. A page that could not be fetched is free. |
| Change detected | $0.01 | Per page reported as changed or new. |
| AI change summary | $0.02 | Per AI summary produced. |
| Screenshot | $0.005 | Per screenshot captured. |
- 50 pages checked daily: 50 × $0.002 × 30 = $3.00 a month, plus $0.01 per change.
- A typical month with ~30 changes: about $3.30. With AI summaries on those changes, under $1 extra.
Default memory 1024 MB. Use 2048 MB when renderJs or screenshotOnChange is on — Apify's
start fee scales per GB, so leave them off unless a page needs them.
Limitations
- Login-walled pages are not supported. The Actor never logs in and sends no cookies.
- Very large pages are truncated at 300 KB of text;
truncated: truesays so. - JS-heavy pages need a browser. Pages whose HTML comes back as an empty shell are retried in
one automatically; set
renderJsper page to force it. - Rotating content (adverts, "related articles", A/B tests) will report changes until you
exclude it with
ignoreSelectorsorignorePatterns. Aselectoris the most reliable fix. - Changing your own settings —
selector,ignorePatterns,textOnly— changes what is compared, so the next run legitimately reports a change.
Related actors
- ../hiring-signals-monitor — track companies' career pages and get new, removed and changed roles.
- ../ad-library-intelligence — track competitors' live ads across Google, LinkedIn and TikTok.
- ../mena-jobs-aggregator — five MENA job boards in one deduplicated feed.
Legal note
The Actor reads publicly accessible pages — the same content any visitor sees — and never logs in or sends cookies. It stores a normalized text snapshot of each page purely so the next run has something to compare against; nothing is republished. It extracts no personal data: no emails, no phone numbers, no names are pulled into fields. Requests are paced and concurrency is capped. Use it in line with each site's terms and the laws that apply to you.