Scheduled page checks with word, line or character diffs
changedetection.io is a Python web app that re-checks pages on a schedule and tells you when their content changes. Out of the box it fetches each URL every three hours over plain HTTP, without running JavaScript, and compares the extracted text with the previous version, shown as a diff by word, line or character. Everything is set up in the web UI, with no code to write.
Crawlee covers the other need, walking entire sites: it is a TypeScript library for writing those crawlers.
The comparison of open source web scraping tools sets changedetection.io against crawl frameworks and anti-detect browsers.
Compares text, prices or screenshots, with LLM alert triage
- Three ways to compare: text and JSON, price and stock on a product page, or screenshots, diffed with OpenCV at four sensitivity levels.
- Narrow filters: CSS, XPath 1 and 2, JSONPath or jq, including on JSON-LD embedded in the page, plus rules such as "trigger when this text appears" or "ignore this text".
- Price and restock: alerts below a floor, above a ceiling or past a percentage change, with a price history graph. PriceGhost only tracks prices, but handles several user accounts and ships scrapers tuned for Amazon or Walmart.
- Notifications through Apprise: Discord, Teams, email, syslog or a JSON webhook, with Jinja2 titles and bodies and an optional screenshot attached. Changes are also published as an RSS feed.
- An LLM to cut the noise: since 0.55.1 (April 27, 2026), a plain-language rule such as "only tell me when the item is back in stock" filters alerts, and a short summary replaces the raw diff. Models go through LiteLLM, with an OpenAI, Gemini or Anthropic key, or locally through Ollama.
Password off by default, and Browser Steps need Chrome
A headless browser is optional, but several features need one. For JavaScript-rendered pages, the Compose file ships a commented-out Chrome container (sockpuppetbrowser) that the app drives through the PLAYWRIGHT_DRIVER_URL variable. The visual selector, Browser Steps (log in or fill a field before the capture) and screenshot comparison all require it. The README claims no anti-detection technique: it offers a proxy per watch and recommends Bright Data, through a referral link, or Oxylabs. Hiding a browser's fingerprint is the job of a tool like Camoufox.
No database, no user accounts. The app (Python 3.11 or later) fits in one container and keeps each watch in its own folder on the /datastore volume. A single password guards the whole instance, and it is off by default. A version check, which the Compose file also calls telemetry, stays on unless DISABLE_VERSION_CHECK is set.
The subscription sells infrastructure. For $8.99 a month, the hosted plan covers up to 5,000 URLs, one Chrome browser, European, US and Tor proxies, and checks from about every five minutes. Every feature its page lists is also in the Apache-2.0 code. The README announces AI for the hosted service from June 2026, while the open source code has had it since April.
Watched content can leave the instance. With AI on, diffs and extracted text go to the model provider, the README warns. The same README leaves compliance with each site's terms of service and robots.txt to the user. The LLM_FEATURES_DISABLED variable turns those features off.
One main developer, roughly a release a week, still on 0.x. Opened in January 2021, the repository shipped 67 releases in 2025 and 40 so far in 2026, up to 0.60.8 on September 28. dgtlmoon authored 397 of the 514 commits on the main branch in 2026. The :latest Docker image tracks the latest stable release, :dev the master branch.
