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
6 days 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
This is the Console prefill. It watches two public pages, reports them on the first run with a screenshot each, and turns on AI summaries for later runs. It finishes in about 20 seconds and costs about $0.03:
{"pages": [{"url": "https://www.gov.uk/government/announcements","name": "GOV.UK announcements"},{"url": "https://nodejs.org/en/blog","name": "Node.js blog"}],"trackingId": "my-watch","mode": "changes","ignorePatterns": ["Last updated:.*", "\\d{1,2}:\\d{2}\\s*(AM|PM)?"],"emitBaselineAsChanged": true,"screenshotOnChange": true,"aiSummary": true,"proxyConfiguration": {"useApifyProxy": true}}
Run it again (or schedule it) with the same trackingId and you get only what changed since the previous
run: the added and removed lines, changePercent, a screenshot and an AI summary. Diffs and AI summaries
start from the second run, because they need a previous version to compare with.
To watch one element instead of the whole page, pass a CSS selector, for example
{ "url": "https://www.apify.com/pricing", "name": "Apify pricing", "selector": ".pricing-table" }, and
add watchKeywords such as ["Sold out", "Discontinued"] for keyword alerts.
With emitBaselineAsChanged off, the first run is a silent baseline: it records the pages and returns
a single free no_changes row saying so, so your first alert is a real change.
Output
One item per page. Every field is documented in .actor/dataset_schema.json; the Console shows
Changes and All pages views. A real changed-page record from a test run (a page whose content changes on every visit, watched with aiSummary on):
{"url": "https://httpbin.org/uuid","name": "uuid","status": "changed","httpStatus": 200,"checkedAt": "2026-09-13T01:46:44.173Z","lastChangedAt": "2026-09-13T01:46:44.173Z","changePercent": 100,"diff": {"added": ["\"uuid\": \"5ff3010a-9ac0-405f-967c-d0a2dff1e0b9\""],"removed": ["\"uuid\": \"be192262-6064-465b-bfaa-f6ec4daee41d\""]},"keywordHits": null,"contentHash": "949a01c54519b5b4583956fbbe3801f319dd7345","wordCount": 4,"pageTitle": null,"screenshotUrl": null,"aiSummary": {"summary": "The UUID value changed from \"be192262-6064-465b-bfaa-f6ec4daee41d\" to \"5ff3010a-9ac0-405f-967c-d0a2dff1e0b9\".","category": "content_update","importance": 2},"error": null,"truncated": false}
Pages that could not be fetched come back with status: "error" and the reason in error, and are
never charged. When nothing changed, changes mode returns one free row with status: "no_changes"
that says so. If an AI summary was requested but could not be produced, the changed page says why in
error.
Sample output
Real items verified on the Apify platform in September 2026: a changed page from a second run (diff and AI summary), and a page reported on the first run of the example input (with its screenshot link). Long text and lists are shortened for this page; field names and values are otherwise exactly as the Actor returns them.
[{"url": "https://httpbin.org/uuid","name": "uuid","status": "changed","httpStatus": 200,"checkedAt": "2026-09-13T01:46:44.173Z","lastChangedAt": "2026-09-13T01:46:44.173Z","changePercent": 100,"diff": {"added": ["\"uuid\": \"5ff3010a-9ac0-405f-967c-d0a2dff1e0b9\""],"removed": ["\"uuid\": \"be192262-6064-465b-bfaa-f6ec4daee41d\""]},"keywordHits": null,"contentHash": "949a01c54519b5b4583956fbbe3801f319dd7345","wordCount": 4,"pageTitle": null,"screenshotUrl": null,"aiSummary": {"summary": "The UUID value changed from \"be192262-6064-465b-bfaa-f6ec4daee41d\" to \"5ff3010a-9ac0-405f-967c-d0a2dff1e0b9\".","category": "content_update","importance": 2},"error": null,"truncated": false},{"url": "https://www.gov.uk/government/announcements","name": "GOV.UK announcements","status": "new","httpStatus": 200,"checkedAt": "2026-09-13T02:13:20.778Z","lastChangedAt": "2026-09-13T02:13:20.778Z","changePercent": 100,"diff": null,"keywordHits": null,"contentHash": "6ba78701980a9c6f0c013efae8d2d7d845522f75","wordCount": 4192,"pageTitle": "News and communications - GOV.UK","screenshotUrl": "https://api.apify.com/v2/key-value-stores/kmCilLuOeuVuJXUjZ/records/screenshot-www.gov.uk-government-announcements-2026-09-13T02-13-20-778Z?signature=1lRhOgN8jRDapro7VWRSn","aiSummary": null,"error": null,"truncated": false}]
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 a quiet run contains only a singleno_changesrow, so filter onstatus=changedto hear from it only 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 (Standby)
The Actor runs in Standby mode, so a workflow or an AI agent can check one page per HTTP request:
GET https://almoutasem-nabil--page-change-monitor.apify.actor/?url=https://example.com/pricing&trackingId=my-watch&aiSummary=1Authorization: Bearer <your Apify token>
Parameters mirror the input (url, selector, trackingId, renderJs, aiSummary,
summaryLanguage, screenshotOnChange, minChangePercent, watchKeywords). The response is JSON with
items, charged with the same events as a normal run. 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.
-
The example input above, first run: 2 × $0.002 + 2 × $0.01 + 2 × $0.005 = $0.034.
Default memory is 2048 MB, which covers the headless browser used for screenshots and JS-heavy pages.
Apify's start fee scales per GB, so with screenshotOnChange and renderJs off you can run at 1024 MB.
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 on Google and LinkedIn, and top ads on TikTok.
- ../mena-jobs-aggregator — four 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.