Web change monitoring
Poll a page on a schedule and detect when its content actually changes.
POST
Web change monitoring
Watch a page for meaningful changes — a pricing page, a terms-of-service update, a competitor’s
landing page — without storing and diffing raw HTML by hand.
To see what changed, also save the Markdown from each run and compare the two versions with
Use it with a database instead of the JSON file once you monitor many pages. Use a distinct
Use case
- Alert when a competitor changes pricing, copy, or product availability
- Track terms-of-service, policy, or changelog pages for updates
- Detect when a page’s content stops matching what you last indexed
Step 1: Take a clean snapshot
Requestmarkdown instead of raw html — boilerplate like ads, session tokens, or rotating
banners get stripped by default (only_main_content: true), so the diff only reflects real content
changes. The page text comes back in data.markdown.
Step 2: Detect a change
Hash the Markdown and compare it with the hash from the last run. This script is complete: save it asmonitor.py, set API_KEY, and run it. It keeps the last hash for each URL in a local JSON
file, so the first run saves a baseline and later runs report changes.
Python
difflib.unified_diff.
Step 3: Run it on a schedule
Runmonitor.py from a cron job, a queue worker, or a scheduled function — hourly for
fast-moving pages, daily for slower ones. For example, hourly with cron:
tag per monitored page so you can audit
run history and cost per target in Request history.
Request highlights
Tips
- Diff at the paragraph or section level instead of full-text equality if the page has any dynamic content (timestamps, view counts) you want to ignore.
- For JS-heavy pages, set
js_render: trueand await_selectorso you snapshot the rendered state, not a loading skeleton — see Scrape. - If you need structured fields (e.g. just the price, not the whole page), add
prompt/schemawithoutput: ["json"]instead of diffing raw text — see Output.