Website Change Monitor
Pricing
Pay per usage
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
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>/#contentcontainer 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), aword_diff([-removed-]{+added+}),similarity_score,content_length_before/after, andsignificant_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
- Add one or more URLs.
- (Optional) set a CSS selector to compare only that region, and Ignore patterns (regex) to strip volatile bits like timestamps or view counts.
- Run it once to store the baseline (every page comes back
first_seen: true). - Schedule the Actor. From then on, each run flags what changed.
- (Optional) turn on Only output changed pages so the dataset stays a clean change-log.
Input
| field | notes |
|---|---|
urls | list of page URLs to monitor (or url for a single one) |
selector | CSS selector to isolate a region — empty = whole page body |
mode | text (visible text, ignores markup churn) or html (raw HTML) |
ignorePatterns | regexes stripped before comparing (timestamps, tokens, ad slots…) |
notifyOnly | output a row only for changed / first-seen / errored pages |
stateKey | name 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:
| field | meaning |
|---|---|
url, checked_at, http_status, status | request outcome (ok / error) |
changed | true if content differs from the last run |
significant_change | true when more than 5 % of the content changed |
first_seen | true on the first run for this URL (baseline stored) |
similarity_score | 0–1 similarity between old and new content |
content_length_before, content_length_after | main-content size, chars |
changed_sections | array of { type: "added" | "removed", content } blocks |
word_diff | inline diff string: [-removed-] {+added+} |
current_hash, previous_hash, previous_checked_at | fingerprints |
error | message 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
stateKeynamespaces 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.