mrkeyoor.com_
Thu 10 Sept 13:44 UTC
Self-Hostedevaluationupdated 10 Sept 2026

changedetection.io review

changedetection.io is a self-hosted web application that revisits pages and APIs, records what changed, and sends alerts through email, chat services, webhooks, and many other channels. It handles plain HTML, JavaScript-driven pages, PDFs, prices, stock status, filtered page regions, and JSON, with optional LLM summaries and intent rules.

trackingstars / 7d
Verdict

Our changedetection.io install consumed 479 MB and pip-audit found 9 known vulnerabilities, while the lab found no test target to run, so an internet-facing deployment needs dependency review before it earns trust. Use it when you want a capable, self-hosted watch dashboard and can operate persistent storage, browser fetching, proxies, and notification secrets. Choose urlwatch for a smaller command-line job, and do not rely on LLM filtering where a missed or extra alert carries serious consequences.

We ran it

Lab card: what happened when we ran changedetection.ioScreenshot of changedetection.io (changedetection.io)
Install✓ · 70s197 packages · 479 MB
Build✓ · 4s
Testsn/ano test script
Known vulns9(pip-audit)
Repo1134 files~82,300 lines of source · 16.4 MB · 6 CI workflows · Dockerfile

Answers from our run

Does changedetection.io build from source?

Dependencies installed in 70 seconds (197 packages), and the build succeeded in 4 seconds. We cloned commit 07d00d0 into a clean Debian container with 3 CPUs and no project-specific setup.

Does changedetection.io have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does changedetection.io have known vulnerabilities in its dependencies?

pip-audit flagged 9 known advisories in the dependency tree at the time of our run.

Who should not use changedetection.io?

Anyone expecting guaranteed access to bot-protected sites: issue 4343 reproduces a Cloudflare 403 across plain HTTP, Playwright, residential proxy, VPN, and curl routes.

What are the alternatives to changedetection.io?

urlwatch, Huginn, Uptime Kuma. Our changedetection.

Setup3/5Docker is direct, but browser fetching and 479 MB add weight
Docs4/5Many examples cover filters, fetchers, alerts, API, and updates
Community5/533,791 stars with same-day pushes, release, issues, and PRs
Maturity3/5Broad features and frequent releases, but 9 audit findings remain

Who it’s for

Self-hosters tracking product stock, prices, public notices, releases, or document changes.
Operations teams that need page changes delivered through existing notification services or webhooks.
Analysts who want CSS, XPath, JSONPath, jq, regular-expression, and conditional filters in a browser UI.
Developers who need a REST API and persistent watch history they control.
Teams able to run a separate Chrome fetcher or proxy when target pages require it.

Who it’s NOT for

Anyone expecting guaranteed access to bot-protected sites: issue 4343 reproduces a Cloudflare 403 across plain HTTP, Playwright, residential proxy, VPN, and curl routes.
Teams that cannot run and secure a browser service for JavaScript pages: Browser Steps and the Visual Selector require the Playwright fetcher described in the README and compose file.
Privacy-sensitive monitoring that sends page text to an external model without approval: the README says optional LLM features transmit diffs and extracted text to the chosen provider.
Alert workflows that treat an LLM intent rule as a safety control: open issues 4383 and 4385 document provider and malformed-response paths that can pass through or suppress changes.
Commercial hosting providers proceeding without legal review: the repository has an Apache 2.0 license file plus a separate commercial-hosting agreement, a tension users should resolve in writing.

Setup reality

Our sandbox installed 197 packages in 70 seconds and used 479 MB. The build succeeded in 4 seconds. We did not run tests because the checkout exposed no test script or target to the lab. Pip-audit reported 9 known vulnerabilities; the supplied result does not give their packages or severities.

The quickest supported route is Docker Compose with a persistent /datastore volume and a local port. Pip installation is also documented. JavaScript pages, browser steps, and visual selection need the separate Playwright Chrome service and its WebSocket URL.

Notification services require their own URL credentials. Blocked sites may need a proxy and can still refuse automation. Optional LLM providers need keys or a local endpoint, and external providers receive monitored page content. A reverse proxy, authentication policy, backups, and dependency review are operator responsibilities.

The 82,300-line service turns page changes into alerts

changedetection.io stores a list of URLs, fetches them on a schedule, compares the useful content, keeps history, and sends a notification when its rules match. Our checkout contained 1,134 files and about 82,300 source lines. The dashboard can watch ordinary HTML, JavaScript pages, PDFs, product prices, stock metadata, and JSON APIs.

Filtering is the main reason to choose it over a tiny polling script. Watches can select content with CSS, XPath 1 or 2, JSONPath, jq, and regular expressions. Conditional actions can require a keyword or numeric threshold. Browser Steps can fill fields, click controls, accept cookies, and prepare a page before extraction. Notifications use Apprise URLs for email, chat services, webhooks, and syslog.

JavaScript monitoring adds a second browser service

The basic fetcher is enough for server-rendered pages and APIs. JavaScript rendering, Browser Steps, screenshots, and the Visual Selector need Chrome through the Playwright path. The supplied compose file exposes changedetection.io on 127.0.0.1:5000, persists data in /datastore, and shows a separate sockpuppetbrowser service reached at port 3000. Those lines are commented until the operator enables them and sets PLAYWRIGHT_DRIVER_URL.

A real browser changes the deployment from one container to a small service pair. Preserve and back up the datastore volume. Notification URLs and proxy configuration may contain credentials, so keep them secret and do not expose the dashboard on an unauthenticated public port.

What happened when we ran it

Our sandbox installed changedetection.io in 70 seconds, adding 197 Python packages and occupying 479 MB. The build completed successfully in 4 seconds. The checkout was 16.4 MB before dependencies, with 1,134 files and roughly 82,300 source lines. It included 6 CI workflow files, a Dockerfile, and a compose file, which matches the project's container-first setup.

The lab did not run a test suite because it found no tests script or target; the measured result says skipped, not passed. Our scan also found no top-level tests directory. That does not claim the project has no tests elsewhere or no upstream CI. It means this checkout did not offer the lab a recognized command, so this review has no fresh passing test count to use as assurance.

Pip-audit reported 9 known vulnerabilities in the installed environment. The supplied measurement does not list affected packages, advisory IDs, or severities, so we cannot say which features are exposed or whether an upgrade resolves them. Nine findings are enough to block a blind public deployment. Resolve each advisory against the image you plan to run, then repeat the audit before release.

Bot protection can defeat every available fetcher

Open issue 4343 reports a target returning HTTP 403 under changedetection.io 0.55.8 with the plain fetcher, Playwright, a residential proxy, a datacenter VPN, and curl with browser headers. The report attributes the refusal to the site's Cloudflare Bot Management rules and asks for a clearer error. Changing fetchers or paying for a proxy cannot guarantee that a site permits automated access.

The README places legal responsibility on the user for website terms, robots rules, access policies, and applicable law. Browser Steps can enter credentials and navigate an account, but permission to monitor and store that content is separate. A reliable deployment needs modest request intervals, ownership of each watch, and a plan for repeated 403 or 429 responses.

LLM rules can miss changes or send extra alerts

Optional LLM features can summarize a diff or judge a plain-language rule such as whether a price crossed a threshold. The README supports hosted providers and OpenAI-compatible local endpoints. It also says external providers receive page diffs and extracted text, placing API cost, privacy, and output validation on the operator.

Issue 4383 reports that transient HTTP 503 and 429 provider errors were not retried and could fall back to a raw diff notification. Issue 4385 describes malformed model JSON taking inconsistent paths: some responses suppress a change, while another parsing failure passes it through. Both were open when fetched. These failure modes make LLM intent unsuitable as the only control for compliance, safety, or financially significant alerts.

Release 0.60.4 is active, with 384 open items

Version 0.60.4 was released on September 10, 2026, the same day as the repository's latest push. GitHub showed 33,791 stars, 316 open issues, and 68 open pull requests. The release included an API method for deleting watch history, UI changes, translation work, an Apprise update, and a path-traversal test fix. Same-day code and issue activity show active maintenance, while 384 combined open items indicate a large support and review queue.

The Apache 2.0 license file sits beside COMMERCIAL_LICENCE.md, which says commercial activity involving hosting must execute a separate agreement. Organizations planning a paid hosted service should obtain written terms and legal advice rather than guess how those documents interact. External AI users must also decide which monitored content may leave the server.

urlwatch is smaller; Huginn is broader

Use changedetection.io when several capabilities belong together: a shared dashboard, visual filters, browser actions, stored diffs, price detection, schedules, and many notification channels. urlwatch suits a few text-based checks run from cron. Huginn fits a wider automation chain. Uptime Kuma is cleaner when response status and availability matter more than textual differences.

Our 479 MB install, 9 audit findings, and absent lab test target change the default recommendation. Trial the project behind local access with persistent storage and one notification route. Add Playwright only for sites that need it, then review bot blocks and LLM behavior before expanding the watch list.

Alternatives

ProjectWhat it isPick it when
urlwatchA command-line tool that watches URLs and sends change reports.pick this instead when configuration files and scheduled command-line runs are preferable to a web dashboard.
Huginn gh↗A self-hosted system of agents that monitor sources and trigger actions.pick this instead when page watching is one step in a larger event and automation graph.
Uptime Kuma gh↗A self-hosted service monitor focused on availability and status checks.pick this instead when you care whether a service is up, down, or slow rather than what its content says.

What people are saying

  1. [velocity-scout] dgtlmoon/changedetection.io

Sources

  1. changedetection.io README
  2. changedetection.io Docker Compose configuration
  3. changedetection.io 0.60.4 release
  4. changedetection.io Apache 2.0 license
  5. changedetection.io commercial hosting agreement
  6. Bot-protection 403 diagnostic issue
  7. LLM transient-error issue
  8. LLM malformed-response issue

More self-hosted reviews

mastodon · clash-party · docmost · appsmith · setup-ipsec-vpn · wttr.in · the whole board →