Change Detection Monitor
Web page change detection with notifications.
Overview
ChangeDetection.io is an open-source web monitoring tool that tracks changes on websites and web applications, alerting users when content modifications occur. Originally developed as a self-hosted alternative to commercial monitoring services, it provides granular control over what gets monitored, from entire pages to specific CSS selectors, with support for complex filtering and change detection algorithms that can ignore cosmetic updates while catching meaningful content changes.
This monitoring stack combines ChangeDetection.io with Playwright browser automation and ntfy notification service to create a comprehensive change detection system. The Playwright component handles JavaScript-heavy sites and complex rendering scenarios that simple HTTP requests cannot capture, while ntfy provides a lightweight, self-hosted notification server that can deliver alerts through multiple channels including mobile push notifications, webhooks, and email integration.
Homelab enthusiasts and small teams will find this stack particularly valuable for monitoring price changes, service status pages, job postings, or any web content that requires immediate attention when updated. The combination eliminates dependencies on external services while providing enterprise-grade monitoring capabilities that can scale from monitoring a handful of personal sites to hundreds of business-critical web resources.
Key Features
- CSS selector-based monitoring for precise element tracking and change detection
- Playwright browser engine integration for full JavaScript rendering and SPA support
- Visual diff detection with screenshot comparison and highlighted change regions
- XPath and JSONPath filtering for structured data monitoring and API endpoint changes
- Regex pattern matching for content filtering and false positive reduction
- Self-hosted ntfy notification server with topic-based message routing
- Change detection threshold configuration to ignore minor cosmetic updates
- Built-in proxy support through Playwright for geo-restricted content monitoring
Common Use Cases
- 1E-commerce price monitoring for competitor analysis and deal alerting
- 2Government website monitoring for permit applications and regulatory updates
- 3Job board monitoring for specific positions or company postings
- 4Service status page monitoring for third-party dependencies and SaaS providers
- 5Real estate listing monitoring for new properties in specific areas or price ranges
- 6News website monitoring for breaking news in specific categories or topics
- 7Software release monitoring for GitHub releases and changelog updates
Prerequisites
- Docker host with minimum 2GB RAM for Playwright browser instances
- Available ports 5000 and 8080 for web interface access
- Persistent storage allocation for change detection history and notification cache
- Network connectivity to target websites and any notification endpoints
- Basic understanding of CSS selectors for advanced monitoring configuration
- Mobile device or webhook endpoint configured for ntfy notifications
For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms
docker-compose.yml
docker-compose.yml
1services: 2 changedetection: 3 image: ghcr.io/dgtlmoon/changedetection.io:latest4 container_name: changedetection5 restart: unless-stopped6 ports: 7 - "${CD_PORT:-5000}:5000"8 environment: 9 - PLAYWRIGHT_DRIVER_URL=ws://playwright:300010 - BASE_URL=http://localhost:${CD_PORT:-5000}11 volumes: 12 - changedetection_data:/datastore13 depends_on: 14 - playwright1516 playwright: 17 image: browserless/chrome:latest18 container_name: cd-playwright19 restart: unless-stopped20 environment: 21 - DEFAULT_BLOCK_ADS=true22 - DEFAULT_STEALTH=true2324 ntfy: 25 image: binwiederhier/ntfy:latest26 container_name: cd-ntfy27 restart: unless-stopped28 ports: 29 - "${NTFY_PORT:-8080}:80"30 volumes: 31 - ntfy_cache:/var/cache/ntfy3233volumes: 34 changedetection_data: 35 ntfy_cache: .env Template
.env
1# Change Detection2CD_PORT=50003NTFY_PORT=8080Usage Notes
- 1Change Detection at http://localhost:5000
- 2Ntfy at http://localhost:8080
- 3Add URLs to monitor
- 4Playwright for JS rendering
Individual Services(3 services)
Copy individual services to mix and match with your existing compose files.
changedetection
changedetection:
image: ghcr.io/dgtlmoon/changedetection.io:latest
container_name: changedetection
restart: unless-stopped
ports:
- ${CD_PORT:-5000}:5000
environment:
- PLAYWRIGHT_DRIVER_URL=ws://playwright:3000
- BASE_URL=http://localhost:${CD_PORT:-5000}
volumes:
- changedetection_data:/datastore
depends_on:
- playwright
playwright
playwright:
image: browserless/chrome:latest
container_name: cd-playwright
restart: unless-stopped
environment:
- DEFAULT_BLOCK_ADS=true
- DEFAULT_STEALTH=true
ntfy
ntfy:
image: binwiederhier/ntfy:latest
container_name: cd-ntfy
restart: unless-stopped
ports:
- ${NTFY_PORT:-8080}:80
volumes:
- ntfy_cache:/var/cache/ntfy
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 changedetection:5 image: ghcr.io/dgtlmoon/changedetection.io:latest6 container_name: changedetection7 restart: unless-stopped8 ports:9 - "${CD_PORT:-5000}:5000"10 environment:11 - PLAYWRIGHT_DRIVER_URL=ws://playwright:300012 - BASE_URL=http://localhost:${CD_PORT:-5000}13 volumes:14 - changedetection_data:/datastore15 depends_on:16 - playwright1718 playwright:19 image: browserless/chrome:latest20 container_name: cd-playwright21 restart: unless-stopped22 environment:23 - DEFAULT_BLOCK_ADS=true24 - DEFAULT_STEALTH=true2526 ntfy:27 image: binwiederhier/ntfy:latest28 container_name: cd-ntfy29 restart: unless-stopped30 ports:31 - "${NTFY_PORT:-8080}:80"32 volumes:33 - ntfy_cache:/var/cache/ntfy3435volumes:36 changedetection_data:37 ntfy_cache:38EOF3940# 2. Create the .env file41cat > .env << 'EOF'42# Change Detection43CD_PORT=500044NTFY_PORT=808045EOF4647# 3. Start the services48docker compose up -d4950# 4. View logs51docker compose logs -fOne-Liner
Run this command to download and set up the recipe in one step:
terminal
1curl -fsSL https://docker.recipes/api/recipes/changedetection-stack/run | bashTroubleshooting
- ChangeDetection shows 'Playwright connection failed': Verify playwright container is running and check PLAYWRIGHT_DRIVER_URL environment variable matches service name
- Memory errors in Playwright container: Increase Docker memory limits or reduce concurrent monitoring jobs in ChangeDetection settings
- ntfy notifications not received: Check ntfy topic subscription on client device and verify container port mapping for external access
- JavaScript-heavy sites not detecting changes: Enable Playwright renderer in monitor settings and increase page load wait time
- False positive change alerts: Implement CSS filters to exclude dynamic elements like timestamps, ads, or user counters
- ChangeDetection data loss after restart: Verify changedetection_data volume is properly mounted and has write permissions
Community Notes
Loading...
Loading notes...
Download Recipe Kit
Get all files in a ready-to-deploy package
Includes docker-compose.yml, .env template, README, and license
Components
changedetectionplaywrightntfy
Tags
#monitoring#web#notifications#alerts
Category
Home Lab & Self-HostingAd Space
Shortcuts: C CopyF FavoriteD Download