Website Change Monitor avatar

Website Change Monitor

Pricing

Pay per usage

Go to Apify Store
Website Change Monitor

Website Change Monitor

Monitor any web page(s) for content changes. Fetch, fingerprint, diff against the last run; report what changed with a preview. No API key.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Andres Clap

Andres Clap

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Watch any web page for changes. Give it one or more URLs; each run fetches them, builds a stable content fingerprint, and compares it with the fingerprint saved from the previous run. You get a row per page saying whether it changed, by how much, and a short diff preview — RSS for pages that don't have a feed.

What does Website Change Monitor do?

  • Fetches each URL and extracts its main content — nav, header, footer, sidebars, cookie/consent banners, ads and forms are stripped, and a <main> / <article> / #content container is preferred — so the monitor isn't tripped by boilerplate. A CSS selector overrides this.
  • Fingerprints the content (SHA-256) and stores it in a persistent key-value store, keyed per URL.
  • On the next run, compares fresh content to the stored baseline and emits a structured change report: changed_sections (added / removed blocks), a word_diff ([-removed-] {+added+}), similarity_score, content_length_before / after, and significant_change (true when more than 5 % of the content changed).
  • No API key, no browser, deterministic. Schedule it on Apify (hourly, daily…) and wire the output into Slack, email, webhooks or Zapier via Apify integrations.

Why use it?

  • Competitor & market watch — pricing pages, feature lists, product pages.
  • Compliance & legal — terms of service, privacy policies, regulatory pages.
  • Jobs & opportunities — a careers page, a grants list, a tender board.
  • Ops — status pages, release notes, documentation, changelogs.
  • Research — track how any public page evolves over time.

How to use it

  1. Add one or more URLs.
  2. (Optional) set a CSS selector to compare only that region, and Ignore patterns (regex) to strip volatile bits like timestamps or view counts.
  3. Run it once to store the baseline (every page comes back first_seen: true).
  4. Schedule the Actor. From then on, each run flags what changed.
  5. (Optional) turn on Only output changed pages so the dataset stays a clean change-log.

Input

fieldnotes
urlslist of page URLs to monitor (or url for a single one)
selectorCSS selector to isolate a region — empty = whole page body
modetext (visible text, ignores markup churn) or html (raw HTML)
ignorePatternsregexes stripped before comparing (timestamps, tokens, ad slots…)
notifyOnlyoutput a row only for changed / first-seen / errored pages
stateKeyname of the fingerprint store — use different names for independent monitors
{
"urls": ["https://apify.com/pricing"],
"selector": "main",
"ignorePatterns": ["\\d{4}-\\d{2}-\\d{2}"],
"notifyOnly": true
}

Output

One row per URL:

fieldmeaning
url, checked_at, http_status, statusrequest outcome (ok / error)
changedtrue if content differs from the last run
significant_changetrue when more than 5 % of the content changed
first_seentrue on the first run for this URL (baseline stored)
similarity_score0–1 similarity between old and new content
content_length_before, content_length_aftermain-content size, chars
changed_sectionsarray of { type: "added" | "removed", content } blocks
word_diffinline diff string: [-removed-] {+added+}
current_hash, previous_hash, previous_checked_atfingerprints
errormessage when the fetch or selector failed
{
"url": "https://example.com/pricing",
"changed": true,
"significant_change": true,
"similarity_score": 0.83,
"content_length_before": 4120,
"content_length_after": 4460,
"changed_sections": [
{ "type": "removed", "content": "Starter — $29 / month" },
{ "type": "added", "content": "Starter — $39 / month" }
],
"word_diff": "Starter — $[-29-]{+39+} / month"
}

A run summary (checked, changed, significant_changes, first_seen, errors, pushed) is written to the key-value store as OUTPUT. Download the dataset as JSON, CSV, Excel or XML.

Pricing

Pay-per-event: url-checked once per URL fetched, plus change-detected once per URL with a significant change. Each check is one lightweight HTTP request plus a little text processing — a monitor over a handful of URLs runs in seconds. Cost scales with the number of URLs and how often you schedule it.

Tips

  • Use a selector — page-wide monitoring trips on cookie banners, CSRF tokens and rotating ads. Watch .pricing, #content, main.
  • Add ignore patterns for anything time-based (\d{2}:\d{2}, "lastModified":\s*\d+).
  • Keep separate stateKey namespaces for unrelated monitors so a schedule change doesn't reset everything.
  • JavaScript-rendered pages: this Actor reads the served HTML, so content that only appears after client-side rendering won't be seen.

FAQ & disclaimers

The Actor performs plain GET requests with a descriptive User-Agent and stores only content fingerprints and a text snippet for diffing — no personal data. Respect the target site's Terms of Service and robots policy, and pick a sane schedule. Bug or feature request? Use the Actor's Issues tab.