Website Change Monitor
Pricing
$3.00 / 1,000 page checkeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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 LRA["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.
minChangePercentlets you ignore pages with constant small churn until something substantial moves.ignoreSelectorsremoves 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}
| Setting | What it does |
|---|---|
urls | The pages to watch, each tracked separately |
selector | Narrow the watch to one region, so the nav and footer are ignored |
ignoreSelectors | Strip the parts that change on every load |
renderJavaScript | Load in a real browser, for React and Vue pages |
ignoreNumbers | Mask every digit — turn this off when watching a price |
minChangePercent | Only report when this much of the page moved |
onlyChanged | Return nothing on a quiet run |
timeBudgetSecs | How 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 day | Monthly cost |
|---|---|
| Checking by hand | roughly 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.
Related products
- 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


