AI/TLDR

changedetection.io

Self-hosted web page change monitoring with LLM-filtered alerts

Web Scraping & CrawlingOpen core
Language
Python
License
Apache-2.0
$docker compose up -d

Overview

changedetection.io watches web pages and tells you when they change. You register a URL as a watch, it fetches the page on a schedule, diffs the result against the last snapshot, and fires a notification when something moves. Diffs can be examined by word, by line or by individual character, so you can see exactly what shifted rather than just that something did.

What separates it from a naive polling script is the targeting. Filters for XPath 1.0, JSONPath, jq and CSS selectors are built in, so a watch can track one element rather than a whole page; a Visual Selector tool (available when connected to a Playwright content fetcher) lets you pick that element by clicking it. Browser Steps can run an interactive sequence first — log in, accept a cookie banner, fill a search box, add an item to a cart — so monitoring works behind authentication. A dedicated restock-and-price mode extracts product metadata and turns it into price-drop and back-in-stock alerts with upper, lower and percentage thresholds.

The AI layer is what makes it relevant to an LLM stack. Connect any model through LiteLLM — OpenAI, Gemini, Anthropic, Ollama, vLLM, LM Studio, or any OpenAI-compatible endpoint — and two things become possible. AI change detection rules take a plain-English intent ("notify me only when the price drops below $50", "ignore navigation and footer changes") and evaluate every diff against it, suppressing anything irrelevant. AI change summaries rewrite the notification itself, so you read "Price dropped from $89.99 to $67.00" instead of a raw diff. Notifications themselves go out over Discord, Email, Slack, Telegram, webhooks and the rest of the Apprise catalogue, with Jinja2 templating for title and body.

What it does

  • Scheduled page fetching with word-, line- and character-level diffs, self-hosted via Docker or pip
  • Precise targeting through XPath 1.0, JSONPath, jq and CSS filters, plus a click-to-select Visual Selector
  • Browser Steps: log in, click buttons and fill forms before the diff, so watches work behind authentication
  • AI change detection rules — a plain-English intent filters every diff and suppresses irrelevant changes
  • AI change summaries that turn a raw diff into a sentence, using any LiteLLM-supported provider including local Ollama, vLLM and LM Studio
  • Restock and price monitoring for product pages, with upper, lower and percentage-change thresholds
  • Notifications over Discord, Slack, Telegram, email, webhooks and the wider Apprise list, templated with Jinja2

Getting started

The project is self-hosted; Docker is the recommended path and pip is available for local runs. The :latest tag is the stable release and :dev tracks the master branch. Note that the AI change-detection and summary features are noted as available in the hosted subscription service from June 2026.

Run with Docker Compose

Clone the repository and bring the stack up. The compose file also contains a commented-out sockpuppetbrowser service for JavaScript-rendered pages and different viewport sizes.

bashbash
docker compose up -d

Or run the standalone container

Bind it to localhost and persist the datastore in a named volume.

bashbash
docker run -d --restart always -p "127.0.0.1:5000:5000" -v datastore-volume:/datastore --name changedetection.io dgtlmoon/changedetection.io

Or install from PyPI

Install the package and point it at an empty data directory, then visit http://127.0.0.1:5000 to reach the UI.

bashbash
pip3 install changedetection.io
changedetection.io -d /path/to/empty/data/dir -p 5000

Wire up a model and notifications

In a watch's edit tab, set one or more Apprise notification URLs (for example discord://webhook_id/webhook_token or mailto://user:pass@example.com?to=receivingAddress@example.com). To use a local model for AI rules and summaries, choose the OpenAI-compatible provider option and point it at your server's /v1 URL.

texttext
discord://webhook_id/webhook_token
mailto://user:pass@example.com?to=receivingAddress@example.com

Commands and code are distilled from the project's own documentation — always check the official repo for the latest.

When to use it

  • Track competitor pricing or product restocks and get alerted only when a threshold you set is crossed
  • Monitor government, regulatory or vendor pages that publish updates on the site and nowhere else
  • Watch a JSON API endpoint with jq or JSONPath filters and alert on a specific field changing
  • Cut alert noise on a busy page by writing a plain-English rule and letting a local or hosted LLM decide which diffs matter

How changedetection.io compares

changedetection.io alongside other open-source web scraping & crawling tools AI/TLDR tracks, ranked by GitHub stars.

ToolStarsWhat it does
Firecrawl★ 183kA crawling service and API that converts whole websites into clean Markdown or structured JSON ready for LLMs.
Agent Reach★ 84.3kA capability layer that installs, health-checks and routes readers so a CLI agent can read and search web pages, YouTube, RSS, GitHub, Reddit, Twitter/X and more without API fees.
Crawl4AI★ 84kA local-first Python web crawler that turns pages into clean Markdown for use in RAG and LLM pipelines.
Scrapling★ 82.8kA Python web scraping framework whose parser relocates your elements when pages change, with stealthy fetchers and a Scrapy-like spider engine for full crawls.
Scrapy★ 64.4kA mature Python framework for writing fast spiders that crawl websites and extract structured data at scale.
changedetection.io★ 34.4kSelf-hosted web page change monitoring with LLM-filtered alerts
ScrapeGraphAI★ 31.2kA Python library that uses LLMs and a graph pipeline to extract data from pages based on natural-language prompts.
Crawlee★ 25.9kA Node.js/TypeScript scraping library with proxy rotation and browser fingerprinting for building reliable crawlers.