4 min read

changedetection.io: Self-Hosted Website Change and Price Alerts (GitHub, Scanned)

Watch any web page for changes, price drops or restocks, and get alerts on Discord, email and more.

changedetection.io logo
✅
Scan: safe. Nothing to warn about. The code is clean, dependencies show no known advisories, and the CI is unusually well locked down. Scanned Oct 26, 2026; the full report is below.

changedetection.io watches web pages and tells you when they change. Add a URL, choose how often to check, and it keeps a history of every version with a word-level diff, then sends a notification through Discord, Slack, Telegram, email, webhooks or any of the dozens of services the Apprise library supports. It can watch just one part of a page with CSS, XPath, JSONPath or jq filters, track PDFs and JSON APIs, and has a restock and price mode that reads product metadata and alerts on price thresholds.

It is one of the most practical self-hosted tools around: one Docker command and a browser tab, and you have back-in-stock alerts, notice of policy and government page updates, or monitoring for your own site's defacement. With a Playwright browser attached it can run JavaScript, log in, click through steps and pick elements visually. Newer versions can also send each change to an LLM of your choice, including a local Ollama model, to filter or summarise it in plain language.

The project also sells a hosted version at $8.99 a month, and the README carries an affiliate link for a proxy service. The self-hosted app is the full open-source code; the visual selector and browser steps need the optional Playwright fetcher container.

Who it is for

Bargain hunters waiting on a price drop or restock, people who need to know when a government, school or vendor page changes, and site owners watching for unexpected edits.

Getting started

1. Run it with Docker, then open http://127.0.0.1:5000

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

2. Or install with pip (Python 3.11 or later)

pip3 install changedetection.io

3. Then start it with a data folder

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

For JavaScript-heavy sites, browser steps and the visual selector, use the docker-compose.yml in the repository and uncomment the browser service. Windows instructions are on the project wiki.

Safety scan

We cloned dgtlmoon/changedetection.io at commit 16974bf on Oct 26, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • No secrets, no suspicious code patterns and no committed binaries across 1,175 files, about 81,000 lines of them Python. The bare-IP URLs are in tests/unit/test_fetch_url_gate.py, a test that checks the app refuses to fetch private and reserved addresses.
  • setup.py has a custom build step, and all it does is copy the API spec file into the package. The four shell scripts the scanner lists are test runners, with no sudo and nothing piped into a shell.
  • The hosts in the code are documentation links, test fixtures such as attacker.example, and the LLM providers you can choose for AI summaries (OpenAI, Anthropic, Ollama and others). Nothing calls home by default.
  • The 9 packages the scanner could check in requirements.txt have no known advisories. Six workflows, all 14 third-party actions pinned to commits, no pull_request_target. Dependabot and CodeQL are enabled; there is no security policy file.

What the scanner counted

CheckResult
SecretsNone found.
Suspicious codeNone found.
Install-time code1 setup.py with custom install logic. 4 installer scripts
Committed binariesNone.
CI workflows6 workflows. None use pull_request_target. 0 of 14 third-party actions pinned to a tag rather than a commit.
Network hosts40 distinct hosts referenced from source; most often github.com, changedetection.io, attacker.example, testsite.com. 6 URLs to a bare IP address, listed under the raw findings.
Known vulnerabilities0 advisories across 9 pinned packages: 0 critical, 0 high, 0 moderate, 0 low. requirements.txt: 9 packages, 0 advisories.
Project hygieneHas automated dependency updates, CodeQL, licence file, contributing guide. Missing security policy.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

URLs to bare IP addresses (6)
WhereRuleMatch
changedetectionio/tests/unit/test_fetch_url_gate.py:83ip-literal-urlfor url in ('http://100.64.0.1/', # RFC 6598 CGNAT, first usable
changedetectionio/tests/unit/test_fetch_url_gate.py:84ip-literal-url'http://100.127.255.254/', # RFC 6598 CGNAT, last usable
changedetectionio/tests/unit/test_fetch_url_gate.py:85ip-literal-url'http://100.100.100.100/', # inside CGNAT (Alibaba Cloud metadata)
changedetectionio/tests/unit/test_fetch_url_gate.py:86ip-literal-url'http://192.88.99.1/', # RFC 7526 deprecated 6to4 relay anycast
changedetectionio/tests/unit/test_fetch_url_gate.py:87ip-literal-url'http://224.0.0.1/', # IPv4 multicast all-hosts
changedetectionio/tests/unit/test_fetch_url_gate.py:96ip-literal-urlself.assertAllowed('http://100.64.0.1/')
Installer scripts (4)

By the numbers

Stars35.3K
Forks2,182
Contributors169
Commits2,639
Open issues323
Open pull requests62
Releases225
Latest release0.60.10
LicenceApache-2.0
Main languagePython
Project age5 years
Last pushOct 26, 2026
Tracked files1,175
Lines of code111.5K
Checkout size17 MB

Lines by language: Python 80.9K, SCSS 8,075, HTML 8,013, JavaScript 7,716, YAML 4,280, Markdown 1,699.

Questions

Is changedetection.io free?

Yes, the self-hosted version is free and Apache-2.0-licensed. The developers also run a hosted service at $8.99 a month that includes a Chrome fetcher and proxies, for people who would rather not run it themselves.

Can it monitor pages that need JavaScript or a login?

Yes, with a Playwright or WebDriver browser attached. Browser Steps can fill in forms, click buttons and log in before each check, and the visual selector lets you click the part of the page you care about.

How do I get price drop or restock alerts?

Turn on the restock and price detection option for a single product page. It reads the product's price and stock data from the page and lets you set upper and lower price limits or a percentage change before it notifies you.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.