DEV Community

Tidy Tools
Tidy Tools

Posted on

Content Checker alternative on Apify: 100 pages a day for $6/month

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"
}
Enter fullscreen mode Exit fullscreen mode

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"
}
Enter fullscreen mode Exit fullscreen mode
  • 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"
}
Enter fullscreen mode Exit fullscreen mode

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.

Top comments (0)