Website Change Monitor avatar

Website Change Monitor

Pricing

$3.00 / 1,000 page checkeds

Go to Apify Store
Website Change Monitor

Website Change Monitor

Watch any web page and get told exactly what changed since the last run: the added lines, the removed lines and how much of the page moved. Narrow it to one region with a CSS selector, and ignore the clocks and counters that change on every load.

Pricing

$3.00 / 1,000 page checkeds

Rating

0.0

(0)

Developer

Peach O

Peach O

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Website Change Monitor: Know Exactly What Changed on Any Page

Watch any page and get told what changed since the last run — the lines that appeared, the lines that disappeared, and how much of the page moved. Not "something changed": the actual text.

Built for people who need to hear about a competitor's price change, a policy update or a quietly edited claim on the day it happens.

How it works

flowchart LR
A["Pages to watch"] --> B["Fetch<br/>(optionally in a browser)"]
B --> C["Narrow to your selector"]
C --> D["Strip clocks, tokens,<br/>ignored regions"]
D --> E["Hash and compare<br/>with last run"]
E -->|different| F["changed + line diff"]
E -->|same| G["unchanged"]
E -->|selector gone| H["page redesigned"]

It stays quiet unless something real happened

A monitor that cries wolf gets switched off, so this one works hard at silence:

  • Clocks, dates, CSRF tokens and cache busters are stripped before comparing. A page carrying "Updated at 14:32:01" differs on every single load; that is not a change.
  • Whitespace is normalised, so a template reflow that reindents every line is not a change.
  • Reordering is not a change. The diff is set-based, so blocks moving around do not produce a wall of false differences.
  • minChangePercent lets you ignore pages with constant small churn until something substantial moves.
  • ignoreSelectors removes the ad slots, cookie banners and live counters before anything is compared.

Built for

  • Competitor watching — pricing pages, feature lists, positioning copy
  • Compliance and legal — terms, privacy policies, regulatory pages
  • Procurement — supplier price lists and stock pages
  • Engineering — status pages, changelogs, API docs, a sitemap or a JSON endpoint

Input

{
"urls": ["https://competitor.com/pricing"],
"selector": ".pricing-table",
"ignoreSelectors": [".cookie-banner", ".live-visitor-count"],
"onlyChanged": true,
"minChangePercent": 2
}
SettingWhat it does
urlsThe pages to watch, each tracked separately
selectorNarrow the watch to one region, so the nav and footer are ignored
ignoreSelectorsStrip the parts that change on every load
renderJavaScriptLoad in a real browser, for React and Vue pages
ignoreNumbersMask every digit — turn this off when watching a price
minChangePercentOnly report when this much of the page moved
onlyChangedReturn nothing on a quiet run
timeBudgetSecsHow long a run may spend checking before it returns what it has

Output

{
"url": "https://competitor.com/pricing",
"changeType": "changed",
"changed": true,
"changePercent": 6.7,
"addedLines": 1,
"removedLines": 1,
"summary": "1 line added, 1 line removed (6.7% of the page)\n+ Pro plan $49 / month\n- Pro plan $39 / month",
"added": ["Pro plan $49 / month"],
"removed": ["Pro plan $39 / month"],
"checkedAt": "2026-09-17T15:54:02.881Z"
}

summary is written to be pasted straight into a Slack message or an email alert.

changeType is one of changed, unchanged, first-run, below-threshold, selector-not-found or failed.

A selector that stops matching is itself a signal

If your CSS selector matches nothing, the run does not silently report "no change" — it returns selector-not-found. That almost always means the page was redesigned, which is exactly when you want to know.

It is not limited to HTML

A JSON API response, an XML sitemap, robots.txt or a plain-text changelog all work. Anything fetchable over HTTP is compared as text, so you can watch an endpoint the same way you watch a page.

Run it as an API

curl -X POST "https://api.apify.com/v2/acts/arched_friend~website-change-monitor/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"urls": ["https://competitor.com/pricing"],
"selector": "main",
"onlyChanged": true
}'

Pricing

You pay $0.003 for each page checked. A quiet run costs exactly the same as one that finds a change.

Watching 10 pages, twice a dayMonthly cost
Checking by handroughly 10 hours
Most page-watching tools$10 to $100 per month
This Actor$1.80 per month

Common questions

Why did the first run report no change? There was nothing to compare against. The first run records the baseline and reports first-run; every run after that compares to it.

The page uses React and comes back empty. Turn on renderJavaScript. It loads the page in a real browser first, which is slower and costs more compute, but sees what a visitor sees.

It is reporting changes I do not care about. Narrow selector to the region you care about, add the noisy parts to ignoreSelectors, or raise minChangePercent. In that order.

Where is the previous version kept? Each run stores the normalised text it saw and compares the next run against it, so history builds from your first run. Turn on includeContentSnapshot to keep your own copy in the dataset.

  • Broken Link Checker to find the dead links on the pages you are watching
  • SEO Meta & Content Auditor to catch title and description changes across a whole site
  • Competitor Content Tracker to watch what a rival publishes, not just what they edit
  • Shopify Price Tracker and Amazon Price Tracker for structured price watching
  • Domain & SSL Monitor to catch expiry and certificate problems on the same domains