Content Change Monitor: Website Change Detection & AI Alerts
Pricing
from $2.00 / 1,000 page checkeds
Content Change Monitor: Website Change Detection & AI Alerts
Website change monitor with AI: get alerts only when a page change matters, like prices, outages, releases and policy updates. Email, Slack, Discord or webhook, with before/after screenshots. Pay per check, built for AI agents.
Pricing
from $2.00 / 1,000 page checkeds
Rating
0.0
(0)
Developer
Pardha Saradhi Mallela
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Security
Limited permissionsShare
Content Change Monitor — get alerted only when a webpage change matters
Most website monitors alert on every timestamp, view counter and rotating ad. Content Change Monitor filters that noise out and tells you only when something real changes: a price, an outage, a new release, a policy update.
- Noise filtered out: timestamps, counters, ads, session tokens and reordered widgets are ignored
- AI judge: tell it what matters in plain English, e.g. "only alert if a price changes"
- Alerts where you work: email, Slack, Discord or webhook, with before/after screenshots
- Pay per use: from $0.002 per check, no subscription, and our own failures are free
- Built for AI agents: call it with just a URL through the Apify API or MCP, get a one-line answer
What people use it for
- Competitor pricing: plans, tiers and limits on pricing pages
- Outages: status pages of the services you depend on
- Releases: changelogs, release notes, API docs
- Legal: terms of service and privacy policies
- Prices and stock: product pages and fares, with drop-only alerts
- Jobs and notices: job boards, government and regulator announcements
- Any public webpage you need to keep an eye on
Quick start
- Add the pages you want to watch and click Start. The first run saves a baseline of each page.
- Schedule it (hourly, daily…). Every run compares against the last one.
- Add
emailTo, or a Slack/DiscordwebhookUrl, to get alerts.
{"targets": [{ "url": "https://example.com/pricing", "label": "Competitor pricing" }],"aiInstruction": "only notify if a price changes","webhookUrl": "https://hooks.slack.com/services/XXX","webhookFormat": "slack"}
The smallest input is { "targets": [{ "url": "https://example.com" }] }; everything else has a
sensible default.
Output: one record per page per run.
{"url": "https://example.com/pricing","label": "Competitor pricing","status": "changed","significant": true,"category": "price_change","summary": "Pro plan moved from $49 to $59 per month","diff": { "removed": [{ "text": "$49" }], "added": [{ "text": "$59" }] },"screenshotBefore": "https://…", "screenshotAfter": "https://…"}
Each run also saves a short summary (OUTPUT) with changed: true/false and a one-line
summary, so a script or an AI agent can answer "did anything change?" without reading the dataset.
Pricing
Pay per event. No subscription, no monthly minimum, no platform-usage fees.
| Event | Price | When |
|---|---|---|
| Page checked | $0.002 | each page fetched and compared |
| Change detected | $0.01 | a significant change was found |
| AI review | $0.004 | the built-in AI judged a change (about 5% of checks; free with your own key) |
| Screenshots | $0.002 | before/after pictures of a change (only if includeScreenshots is on) |
| Browser render | $0.002 | a page that needed a real browser (JavaScript-heavy sites) |
| Residential proxy | $0.002 | a check through a residential proxy (only if you enable it) |
Example: 100 pages checked daily for a month ≈ $6.90.
Not charged: checks that fail because of the Actor itself, and pages that robots.txt disallows.
Set a maximum charge per run and the Actor stops cleanly at that limit.
How it decides what matters
- Noise rules remove what changes on every visit: timestamps ("updated 3 minutes ago"), counters, ads, tracking parameters, session tokens, generated class names and rotating widgets.
- Size check: tiny changes are ignored, except prices, versions, dates, service status and policy wording, which always get through, however small.
- AI review: what's left is judged by AI, guided by your
aiInstruction. Use the built-in AI, or your own OpenAI, Anthropic, Gemini or OpenAI-compatible key (llmProvider,llmApiKey). AI review is optional: setuseAiAdjudication: falseto use the rules alone.
Pages that keep flipping between two versions are marked flapping and don't alert.
Compare modes
mode | Compares | Best for |
|---|---|---|
text (default) | the readable content of the page | docs, policies, news, changelogs |
html | the markup, including attributes | when a link or attribute matters |
structured | product data (JSON-LD, microdata, OpenGraph) | prices, stock, ratings |
price | only the product's own price, currency and stock | price tracking |
Price mode ignores recommendation and "was" prices. Fine-tune it with priceDirection
(any, drop or rise), minPriceChangePercent, and pricePick (first, lowest or
highest when a page lists several prices).
Use selector to watch one part of a page, and ignoreSelectors or ignorePatterns to skip parts.
Content behind a click? Give the target actions (click, waitFor, fill, scrollTo,
wait) to reach it, for example opening a panel before reading a fare. If a step fails, the check
reports action_failed instead of comparing the wrong page.
Alerts
- Email: up to 5 recipients, one digest per run or one email per change. With
includeScreenshots, the before/after pictures are included, with the change highlighted. First alert in Spam? Mark it "Not spam" and add the sender to your contacts. - Slack / Discord: set
webhookFormattoslackordiscordand paste the webhook URL. - Webhook (JSON): one signed POST per run. With
webhookSecretset, verify theX-Actor-Signatureheader against the raw body:
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
For AI agents
- Pay per use, nothing up front: an agent pays only for the checks it runs, and the run's maximum charge is always respected.
- Minimal input:
{ "url": "https://example.com" }works. - One-line answer: read
changedandsummaryfrom the run'sOUTPUTrecord. - Works with the Apify API, client libraries and Apify's MCP server (Claude, Cursor and other MCP clients).
Reliability
- A problem with one page never fails the run. A 404, a timeout or a blocked page becomes a
record with a clear
statusand reason, and the other pages are still checked. - Statuses:
baseline_created,baseline_migrated,unchanged,changed,insignificant,flapping,unreachable,blocked,selector_miss,timeout,skipped_robots,error. - Upgrades don't cause false alerts: when the noise rules improve, saved baselines are updated first, so you aren't alerted about the upgrade itself.
Limits
- Public pages only: no logins or paywalls.
robots.txtis always respected, with no bypass.- Strong bot protection (Cloudflare challenges, DataDome and similar) is reported as
blocked, not worked around. A residential proxy (proxyConfiguration) helps with sites that block datacenter IPs. - Geo-blocked pages need a residential proxy in the right country.
- Polite by design: pages on the same site are checked one at a time, so 200 pages on one site take longer than 200 pages on different sites.
- No crawling: it checks the URLs you give it, up to 1,000 per run.
Your data
Only the changed excerpt and a few surrounding words are sent to the built-in AI for review, never
the full page, your list of pages or anything that identifies you. The built-in AI runs on
business-grade AI services that never use your content to train their models. With your own key,
the excerpt goes only to your provider, and your key is never stored or logged. To keep page
content away from AI entirely, use structured or price mode, or set useAiAdjudication: false.
Questions or ideas?
Open an issue on the Issues tab. Every report is read, and breakages are fixed quickly.