Website Change Monitor avatar

Website Change Monitor

Pricing

$5.00 / 1,000 result items

Go to Apify Store
Website Change Monitor

Website Change Monitor

Monitor any list of URLs for true content changes — CSS-selector targeting, keyword watches, noise-filtered diffing and webhook-on-change. Built for scheduled runs. Pay per result.

Pricing

$5.00 / 1,000 result items

Rating

0.0

(0)

Developer

ziv shay

ziv shay

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Monitor any list of URLs for true content changes — and fire a webhook only when something real changes. CSS-selector targeting, keyword watches, noise-filtered diffing, and clean machine-consumable output. Built for scheduled runs. Pay per result.

Most "website change detection" actors diff raw HTML, so they fire on every page load — cache busters, session tokens, ad slots and timestamps all look like "changes." This actor normalizes the page first (strips scripts/styles/comments, volatile attributes, hashes, session ids, cache-buster query params, whitespace reflow) and compares against the last scheduled run, so you get signal, not noise.

What it does

  • Fetches each URL, extracts the watched region (whole page or a CSS selector).
  • Normalizes content and compares it to the previous run's snapshot (stored in a persistent named Key-Value store — it survives between scheduled runs).
  • Emits a structured change-event per URL that actually changed: added/removed lines, counts, a unified-diff preview, a 0–1 change ratio, and keyword appeared/disappeared signals.
  • A minChangeRatio threshold suppresses trivial edits.

Why it's different

  • True-change detection, not raw-HTML diffing. Volatile noise is stripped before comparison, so you don't get paged on a cache-buster.
  • State persists across scheduled runs. It compares against your last run, not within one run — the only way change detection actually works on a schedule.
  • Clean output. addedLines / removedLines / changeRatio / keywordsAppeared are webhook-ready — your consumer acts on the fields, no HTML parsing.

Input

FieldTypeDescription
startUrlsarrayURLs to watch. Strings, or objects with per-URL url + selector + keywords.
selectorstringGlobal CSS selector applied to URLs that don't set their own. Blank = whole <body>.
keywordsarrayWords to watch; run reports present + appeared/disappeared (e.g. In stock, Sold out).
modestringtext (default, ignores markup churn) or html.
minChangeRationumber0–1. Only flag a change when ≥ this fraction of lines changed.
emitUnchangedbooleanAlso output unchanged URLs (default off → webhook fires only on real changes).
storeArchivebooleanStore previous content for line-level diffs (default on).
proxyConfigurationobjectApify proxy (recommended).

Example input

{
"startUrls": [
"https://news.ycombinator.com",
{ "url": "https://shop.example.com/item", "selector": ".price", "keywords": ["In stock", "Sold out"] }
],
"minChangeRatio": 0.02
}

Output

One change-event per changed/first-seen/errored URL:

{
"url": "https://shop.example.com/item",
"changed": true,
"changeType": "changed",
"fingerprint": "a1b2c3d4e5f60718",
"previousFingerprint": "9988776655443322",
"addedLines": ["$24.99", "In stock"],
"removedLines": ["$29.99", "Sold out"],
"addedCount": 2,
"removedCount": 2,
"changeRatio": 0.5,
"keywordsAppeared": ["In stock"],
"keywordsDisappeared": ["Sold out"],
"preview": "- $29.99\n- Sold out\n+ $24.99\n+ In stock",
"checkedAt": "2026-06-21T13:40:00.000Z",
"previousCheckedAt": "2026-06-21T12:40:00.000Z"
}

changeType is one of: first_seen, unchanged, below_threshold, changed, error.

Schedule + webhook

  1. Schedule the actor (e.g. hourly/daily) — the named state store remembers the last snapshot between runs.
  2. Add an Apify webhook on run succeeded and, in your endpoint, act on rows where changed: true. Or use the dataset's changed/changeType fields to filter.

Pricing

Pay per result — you're charged per change-event row returned. Default output mode only returns rows that changed (or were first-seen / errored), so steady-state monitoring of stable pages is cheap.


Built by MoneyMachine. Public data only; respect each site's terms and robots.