Website Change Monitor — Diff, Screenshot & AI Summary avatar

Website Change Monitor — Diff, Screenshot & AI Summary

Pricing

from $2.00 / 1,000 page checkeds

Go to Apify Store
Website Change Monitor — Diff, Screenshot & AI Summary

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

Al Moutasem Nabil

Maintained by Community

Actor 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; ignorePatterns neutralises timestamps and counters; minChangePercent sets a floor; and a CSS selector narrows 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

  1. Fill in the input and Save as task.
  2. Add a Schedule to the task — daily at 07:00 is typical; hourly for stock or status pages.
  3. Open the task's Integrations tab and add Slack, Email, Webhook, Make or Zapier on Run succeeded. In changes mode the dataset is empty when nothing changed, so you only hear from it when something actually moved.
  4. For Slack, map name, url, changePercent and aiSummary.summary into 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.

EventPriceWhen
Page checked$0.002Per page fetched and compared. A page that could not be fetched is free.
Change detected$0.01Per page reported as changed or new.
AI change summary$0.02Per AI summary produced.
Screenshot$0.005Per 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: true says so.
  • JS-heavy pages need a browser. Pages whose HTML comes back as an empty shell are retried in one automatically; set renderJs per page to force it.
  • Rotating content (adverts, "related articles", A/B tests) will report changes until you exclude it with ignoreSelectors or ignorePatterns. A selector is the most reliable fix.
  • Changing your own settingsselector, ignorePatterns, textOnly — changes what is compared, so the next run legitimately reports a change.
  • ../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.

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.