Every time you want to monitor a website for meaningful changes without drowning in false alerts, changedetection.io is what you wish existed. It’s a self-hosted web monitoring tool that combines traditional HTTP fetching with browser automation and a practical AI layer to filter out noise. The result is a flexible, real-world system that handles everything from static sites to complex JavaScript-heavy pages, with notifications to popular platforms like Discord, Slack, and Telegram.
What changedetection.io does and how it’s built
changedetection.io is an open-source Python application designed to detect changes in web page content and notify users when relevant updates occur. It periodically fetches web pages, compares the current content snapshot with the previous one, and triggers notifications upon change detection.
Under the hood, the project uses a lightweight Flask-based backend that serves a web UI and API for managing monitored pages and alerts. The architecture is straightforward and modular, built primarily in Python, which makes it easy to self-host on local machines, servers, or cloud VMs.
One of its core design features is the dual-fetcher system. For most sites, it uses a fast, non-JavaScript HTTP fetcher that retrieves raw HTML quickly, suitable for static or lightly dynamic pages. For complex JavaScript-heavy sites, it offers a Chrome-based fetcher powered by Playwright or WebDriver, enabling full browser rendering and interaction with dynamic content. This per-site fetcher configuration lets users balance speed and resource usage against accuracy.
Beyond simple HTML diffing, changedetection.io supports advanced monitoring scenarios. It can extract and monitor JSON API data using JSONPath or jq expressions, track text within PDFs, and use XPath or CSS selectors to focus on specific parts of the DOM. There are conditional triggers and proxy settings on a per-site basis, broadening the range of use cases.
Notifications integrate with popular platforms such as Discord, Slack, Telegram, and generic webhooks. This flexibility lets users plug into their existing workflows and alerting channels.
The AI-powered change detection pipeline and technical tradeoffs
The standout technical feature of changedetection.io is its AI-powered change detection and summarization pipeline. Instead of triggering alerts on every raw change, it applies plain-English intent rules evaluated by large language models (LLMs) like GPT-4o-mini, Gemini Flash, Anthropic, Ollama, and others via LiteLLM. For example, a rule might be “notify me only when price drops below $50.” The LLM evaluates each detected diff against these rules to suppress false positives and reduce noise.
This approach is practical because web pages often contain noisy, irrelevant changes — ads, timestamps, rotating content — which traditional diff tools cannot easily filter. Leveraging LLMs as filters turns the problem into one of natural language intent matching rather than brittle rule-based heuristics.
LiteLLM acts as an abstraction layer supporting over 100 providers and models, including local deployments like Ollama, which preserves privacy and reduces dependency on cloud APIs.
The tradeoff is clear: AI filtering adds computational cost and complexity. Running Playwright browsers alongside LLM evaluations consumes more resources than simpler polling services. However, for many real-world monitoring tasks, this is worth the reduction in false alerts.
The codebase is surprisingly clean and practical for a project of this complexity. The Flask backend organizes routes and API endpoints logically, with modular handlers for fetchers, diffing, AI filtering, and notifications. The visual selector feature allows users to target specific DOM elements without manually writing selectors, improving DX.
Overall, changedetection.io strikes a balance between speed (via fast HTTP fetchers), accuracy (via Playwright for JS rendering), and intelligence (via AI-driven filtering).
Quick start using Docker or pip
The project supports multiple deployment methods. The easiest way to get started is with Docker or Docker Compose.
$ docker compose up -d
Alternatively, you can run the standalone Docker container:
$ docker run -d --restart always -p "127.0.0.1:5000:5000" -v datastore-volume:/datastore --name changedetection.io dgtlmoon/changedetection.io
For those who prefer a direct Python install:
$ pip3 install changedetection.io
$ changedetection.io -d /path/to/empty/data/dir -p 5000
After starting the server, visit http://127.0.0.1:5000 in your browser to access the UI.
The UI lets you add sites, configure fetchers (HTTP or Playwright), set selectors, define AI rules, and configure notifications.
verdict
changedetection.io is a solid, pragmatic tool for anyone needing reliable web change monitoring without paying for commercial SaaS. Its AI filtering pipeline is a noteworthy feature that reduces noise and false positives significantly compared to traditional diff-based monitors.
The dual-fetcher system handles a broad spectrum of sites, from simple static pages to JS-heavy apps, although running Playwright fetchers requires more resources and setup.
The modular notification system covers most popular platforms, making integration straightforward. Being self-hosted, it appeals to privacy-conscious users and those wanting full control.
Limitations include the resource cost of running browser fetchers and LLM evaluations, which may be prohibitive on very constrained hardware. The AI filtering depends on LLM providers—while LiteLLM supports many, running local inference models still requires some setup.
If you need a flexible, extensible monitoring solution with AI-driven noise reduction and can allocate modest resources, changedetection.io offers a compelling open-source option worth evaluating.
→ GitHub Repo: dgtlmoon/changedetection.io ⭐ 31,327 · Python