SiteWatch – Website Change Detection Kit
Monitor any website. Get alerted the second it changes.
A self-hosted fork of changedetection.io — track page content with a visual selector, run scheduled or on-demand checks, and get notified over Discord, Slack, Telegram, email, or 100+ other channels the moment something moves.
Install
~60 secondsgit clone https://github.com/yashthakur1/Change_Detection_14.git sitewatch
cd sitewatch
docker compose up -dAlready wired, so you can skip to features.
Visual selector tool
Point-and-click in the browser to pick exactly which element on a page to watch — no manual CSS/XPath needed.
AI-powered change summaries
Optional LLM integration (OpenAI, Gemini, Anthropic, Ollama) summarizes what actually changed instead of a raw diff.
Multi-channel notifications
Discord, Slack, Telegram, email, webhooks, and 100+ more via Apprise, with Jinja2-templated messages.
Browser automation steps
Script logins, form fills, and clicks before a check runs, so gated or interactive pages can be monitored too.
Every dependency has a reason.
- Python (Flask)Core app, web UI, and scheduler in one process — no separate frontend to deploy.
- DockerOne `docker compose up -d` gets a running instance with persistent storage.
- Playwright / SeleniumOptional headless browser fetching for JS-heavy pages a plain HTTP GET can't see.
- AppriseNotification fan-out to 100+ services (Discord, Slack, Telegram, email, webhooks) from one config.
Here's every env var, labeled.
Copy to .env.local. The included first-run script refuses to boot if any of them are missing — you'll know immediately.
PORT=5000
BASE_URL=http://localhost:5000
LOGGER_LEVEL=INFO
# Optional — headless browser fetching for JS-heavy pages
PLAYWRIGHT_DRIVER_URL=ws://sockpuppetbrowser:3000
# Optional — outbound proxy
HTTP_PROXY=
HTTPS_PROXY=Zero to first deploy.
This is the exact sequence we'd run from a blank directory. Steps are reproducible — if one fails, we want to know.
1. Start it with Docker
Clone the repo and bring up the bundled docker-compose.yml — it maps the UI to 127.0.0.1:5000 and persists state in a named volume.
docker compose up -d2. Or run it directly with Python
No Docker? Install the requirements and run the entry point directly, pointing -d at a local data folder.
pip3 install -r requirements.txt python3 changedetection.py -d ./data -p 5000 -C3. Add your first watch
Open http://127.0.0.1:5000, paste a URL, and use the visual selector to pick the element to track. Set a check interval and you're monitoring.
4. Wire up notifications
Add a notification URL under Settings (Apprise syntax) for Discord/Slack/Telegram/email/webhooks, and customize the alert text with Jinja2.
The stuff that ate our afternoons.
Things we'd have wanted a heads-up on. Logged as we hit them.
- !JS-heavy pages need the Playwright/Selenium browser service enabled (commented out by default in docker-compose.yml) — plain HTTP fetching won't render them.
- !Data persists in a Docker named volume — back it up before `docker compose down -v` or you'll lose every configured watch.
- !AI-powered change summaries require your own LLM API key (OpenAI/Gemini/Anthropic/Ollama); the feature is disabled without one.
- !Respect target sites' terms of service and robots.txt — this can trivially be pointed at pages you don't have permission to poll on a schedule.
If you need uptime/availability or response-time monitoring, this isn't it — it only detects content changes, not whether a site is up. Use a dedicated uptime monitor for that.
Got stuck, or want this shipped end-to-end for you? bitroot.club builds custom products for founders. →