If you run a page-watching job on Apify, there is a good chance it is the Content Checker Actor: a URL, a CSS selector, a screenshot selector, an e-mail address, and a schedule that runs it every hour or day. It is simple and it works, and thousands of people set it up that way.

I needed the same thing for a lot more pages: competitor pricing pages, a few terms-of-service pages, and release notes. Running one Content Checker task per page got messy fast, and I wanted Slack alerts and less noise from dates and "5 minutes ago" counters. So I built a change monitor that accepts the same input and adds what I was missing.

Migrate in one minute

Take your existing Content Checker input and paste it into Website Change Monitor unchanged:

{ "url": "https://www.apify.com/change-log", "contentSelector": "article", "screenshotSelector": "article", "sendNotificationTo": "you@your-apify-account-email.com", "informOnError": "true" } 

url, contentSelector, screenshotSelector, sendNotificationTo and informOnError all work as before. Keep your schedule, point it at this Actor, and you are done. The first run saves a baseline; every run after that compares with the previous one.

Then watch many pages in one run

The part that made me build it: one run can watch up to 5,000 pages, each with its own selector and name.

{ "urls": [ { "url": "https://www.apify.com/change-log", "userData": { "selector": "article", "name": "Apify changelog" } }, { "url": "https://example.com/pricing", "userData": { "selector": "#plans", "name": "Competitor pricing" } } ], "monitorName": "my-watchlist", "ignoreCommonNoise": true, "watchKeywords": ["price", "out of stock"], "screenshotOnChange": true, "alertOnError": true, "webhookUrl": "https://hooks.slack.com/services/...", "notifyEmail": "you@your-apify-account-email.com" } 
  • ignoreCommonNoise ignores dates, times, "5 minutes ago" and view counters, so a page does not "change" on every visit.
  • watchKeywords alerts only when a changed line mentions one of your words.
  • screenshotOnChange saves a screenshot after each alerted change and links the previous one, so you get a before/after pair.
  • A Slack (or Discord) incoming-webhook URL gets a readable message; any other URL gets JSON, optionally signed with HMAC-SHA256.

What a change looks like

A real result (September 2026; httpbin.org/uuid returns a new ID on every request, which makes it a handy test page):

{ "url": "https://httpbin.org/uuid", "status": "changed", "addedCount": 1, "removedCount": 1, "added": ["\"uuid\": \"762816a2-8e92-4d9a-aa9a-05b68c05601e\""], "removed": ["\"uuid\": \"e83ca153-a8dc-498e-b49c-80ddb4cfe18e\""], "significant": true, "screenshotUrl": "https://api.apify.com/v2/key-value-stores/.../records/shot-...-20260929034729491.jpg", "previousScreenshotUrl": "https://api.apify.com/v2/key-value-stores/.../records/shot-...-20260929034644443.jpg" } 

On a pricing page, number changes are pulled out for you: "numericChanges": [{ "before": "$19", "after": "$29", "context": "Pro plan $29/month" }].

A few things that kept my alerts honest:

  • Changing the selector does not fire a giant false alert. It saves a new baseline (reason: "settings-changed") instead.
  • A page that starts returning 404 or 410 is reported once as removed, and as restored when it comes back.
  • A page that keeps failing is reported after N failed runs in a row (informOnError: "true" means after the first), so a monitor never dies silently.
  • Lines that only moved around are not reported as changes.

Content Checker vs. this Actor

Content Checker Website Change Monitor
Your existing input ✓ ✓ (same fields)
Pages per run 1 up to 5,000, per-page selector and name
Alerts e-mail e-mail, Slack, Discord, JSON webhook (HMAC)
Screenshots ✓ (screenshotSelector) ✓ before and after, linked in alerts
Ignore dates and counters – ✓
Keyword triggers, minimum change size – ✓
Price / number changes extracted – ✓
AI summary of the change – optional, $0.005 each
Removed pages (404/410) reported – ✓
Actor fee none (you pay platform usage for its browser runs) $2 per 1,000 checks, failed checks free

(Checked October 2026. E-mail in both uses Apify's send-mail Actor, which delivers to your Apify account's e-mail address; for anyone else, use Slack or a webhook to Zapier, Make or n8n.)

What it costs

$0.002 per page check, no start fee and no fee per detected change. Screenshots ($0.003 each) and AI summaries ($0.005 each) only if you turn them on. Pages that could not be read are not charged.

Monitor Checks per month Cost per month
1 page, every hour 720 $1.44
20 pages, once a day 600 $1.20
100 pages, once a day 3,000 $6.00

Higher Apify plans get a volume discount on the check price.

Set it up in three steps

  1. Paste the URLs (or your Content Checker input) and give the monitor a name.
  2. Run it once to save the baseline. The status message tells you so: "Baseline saved for N page(s). Next: create a schedule…"
  3. In Apify Console go to Schedules → Create, pick the Actor and your input, and choose e.g. every day at 9:00.

From then on, each scheduled run reports only what changed.

Actor: https://apify.com/tidytools/website-change-monitor

Disclosure: I built this Actor and earn from its usage on Apify. Content Checker is a separate Actor by another author; the comparison above reflects its public Store page and input fields as of October 2026.