Website Monitor - Change Detection for Any Page avatar

Website Monitor - Change Detection for Any Page

Pricing

from $10.00 / 1,000 change detecteds

Go to Apify Store
Website Monitor - Change Detection for Any Page

Website Monitor - Change Detection for Any Page

Checks web pages on a schedule and reports exactly what changed: text, title, description, prices, links and images. Plain HTTP, no browser, no proxies: fast and cheap.

Pricing

from $10.00 / 1,000 change detecteds

Rating

0.0

(0)

Developer

Antonio del Olmo Tena

Antonio del Olmo Tena

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Website Monitor checks a list of web pages and reports exactly what changed since the previous run: visible text, title, meta description, prices, links and images. It works with a plain HTTP request, no browser, no proxies and no CAPTCHA bypass, so it is fast, cheap and easy to schedule.

Typical uses: price tracking on product pages, watching competitor sites, detecting new links or documents on a page, monitoring "pricing", "jobs" or "news" pages, and checking that a page you depend on still looks the way you expect.

What you get

For every URL you give it, the Actor returns one Dataset item with:

  • changed: true when something you asked to watch changed since the previous run.
  • events: a list of what changed, such as PRICE_CHANGED, TITLE_CHANGED, TEXT_CHANGED, DESCRIPTION_CHANGED, LINK_ADDED, LINK_REMOVED, IMAGE_ADDED, IMAGE_REMOVED, each with details (old and new value, or the URL that appeared or disappeared).
  • data: the normalized content of the page: title, description, text, prices, links, images and one hash per element.

Pages that fail (blocked host, HTTP error, timeout) are returned with an error field instead of failing the whole run.

How to use it

  1. Open the Actor and go to the Input tab.
  2. In Targets, add one object per page: { "url": "https://example.org/pricing", "detect": ["price", "text"] }. detect is optional; leave it out to watch everything.
  3. Click Start. The first run only stores the baseline, so changed is false for every page.
  4. Click Start again whenever you want to check, or better, schedule it: open the run, click Create schedule and pick hourly, daily or weekly. Every run compares each page with the previous snapshot.
  5. Read the results in the Output tab, download them as JSON or CSV, or connect an integration (webhook, Slack, email) so you are notified when changed is true.

Input

{
"targets": [
{ "url": "https://books.toscrape.com/", "detect": ["price", "links"] },
{ "url": "https://example.org/pricing" }
]
}
FieldDescription
targets[].urlPublic http(s) URL. Private or internal addresses are rejected.
targets[].detectOptional. Any of text, title, description, price, links, images. Default: all.
productAdvanced. Adapter to run; leave website-monitor.

Up to 50 targets per run.

Output example

{
"url": "https://books.toscrape.com/",
"product": "website",
"changed": true,
"events": [
{ "type": "PRICE_CHANGED", "data": { "from": [{ "value": 51.77, "currency": "GBP" }], "to": [{ "value": 49.99, "currency": "GBP" }] } },
{ "type": "LINK_ADDED", "data": { "url": "https://books.toscrape.com/catalogue/new-book_2000/index.html" } }
],
"data": {
"title": "All products | Books to Scrape - Sandbox",
"description": "",
"text": "Books to Scrape We love being scraped! ...",
"prices": [{ "value": 49.99, "currency": "GBP", "raw": "£49.99" }],
"links": ["https://books.toscrape.com/catalogue/..."],
"images": ["https://books.toscrape.com/media/..."],
"hashes": { "titleHash": "...", "textHash": "...", "pricesHash": "...", "linksHash": "...", "imagesHash": "..." }
},
"timestamp": "2026-10-01T16:06:24.277Z"
}

How change detection works

Each page is cleaned (scripts, styles, comments and dynamic attributes removed), normalized and hashed element by element. The snapshot is stored in a Key-Value Store in your account, so the next run, scheduled or manual, compares against it. Only the fields listed in detect are compared: a page with a changing footer can still be watched for price changes only.

Pricing

You pay per event, nothing else:

  • URL checked ($0.002): one page fetched, normalized and compared with its previous snapshot.
  • Change detected ($0.01): the page changed since the previous run; the item lists exactly what changed.
  • Actor start ($0.00005): Apify's standard start fee.

Targets that fail are never charged. Example: 20 URLs checked every hour for a month cost about $29, plus $0.01 per detected change. You can cap the spend of every run with the "Maximum total charge" option; when the cap is reached the remaining targets are returned with an error instead of being checked.

Use it as an API

Every Actor can be called over HTTP. This request runs the check and returns the Dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/USERNAME~website-monitor/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"targets":[{"url":"https://books.toscrape.com/","detect":["price"]}]}'

Replace USERNAME~website-monitor with the Actor ID shown on this page. For large batches use the asynchronous /runs endpoint and read the Dataset when the run finishes.

FAQ

Why is changed false on the first run? There is no previous snapshot yet. The first run stores the baseline; from the second run on, differences are reported.

Does it work with pages rendered by JavaScript? It reads the HTML the server sends. Pages that render only in the browser will expose their initial HTML, which may be empty.

text changes on every run. What can I do? Some pages show dates or counters that change on each visit. Narrow detect to the fields you care about, for example ["price", "links"].

Which currencies are recognized? Prices are read from visible text (19,99 €, $1,234.56, EUR 5) and from JSON-LD offers, with EUR, USD, GBP, JPY, CHF, MXN and BRL.

Is anything bypassed? No. The Actor does not evade CAPTCHAs, WAFs or anti-bot systems, and it never requests private or internal addresses.