ChangeDetection.io Website Monitor
ChangeDetection.io monitors websites for changes with notifications.
Overview
ChangeDetection.io is an open-source website monitoring tool that tracks changes to web pages, documents, and API endpoints. Created by Leon Bogaert (dgtlmoon), it addresses the common need for automated website surveillance without relying on expensive SaaS monitoring services. The tool can detect visual changes, text modifications, price updates, and content additions across virtually any web resource. This implementation combines ChangeDetection.io with Browserless Chrome to create a comprehensive monitoring solution. The main ChangeDetection container handles the monitoring logic, scheduling, and notifications, while the Playwright-Chrome container powered by Browserless provides JavaScript rendering capabilities for modern single-page applications. This pairing ensures that dynamic content loaded via JavaScript is properly monitored, something traditional HTTP-only monitors often miss. This stack is ideal for DevOps teams managing multiple services, e-commerce businesses tracking competitor pricing, content creators monitoring for plagiarism, or anyone needing reliable automated change detection. The combination offers enterprise-grade monitoring capabilities with the flexibility of self-hosting, allowing complete control over monitoring frequency, data retention, and notification channels.
Key Features
- Visual diff comparison showing pixel-level changes between webpage snapshots
- CSS selector and XPath targeting for monitoring specific page elements
- JavaScript rendering support through Browserless Chrome integration for SPA monitoring
- Multi-channel notification system supporting Discord, Slack, email, webhooks, and 80+ services
- Proxy rotation and stealth browsing capabilities to avoid detection by anti-bot systems
- JSON and XML API endpoint monitoring with deep object comparison
- Custom headers and authentication support for monitoring protected resources
- Regex pattern filtering for noise reduction and specific content matching
Common Use Cases
- 1E-commerce price monitoring to track competitor pricing and inventory changes
- 2Government and regulatory website monitoring for policy updates and compliance changes
- 3Job board monitoring to get instant alerts when new positions matching criteria are posted
- 4Software release monitoring by tracking GitHub releases, changelogs, and documentation updates
- 5Content plagiarism detection by monitoring for unauthorized use of original content
- 6Infrastructure status page monitoring to detect service outages before they affect operations
- 7Real estate listing monitoring for new properties matching specific criteria and price ranges
Prerequisites
- Docker Engine 20.10+ and Docker Compose v2 for container orchestration support
- Minimum 2GB RAM allocation as Browserless Chrome requires substantial memory for JavaScript rendering
- Port 5000 available for the ChangeDetection.io web interface access
- SMTP server credentials if using email notifications for change alerts
- Base URL environment variable configured if accessing through reverse proxy or custom domain
- Understanding of CSS selectors or XPath syntax for advanced element targeting
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 environment: 6 - PLAYWRIGHT_DRIVER_URL=ws://playwright-chrome:3000/?stealth=1&--disable-web-security=true7 - BASE_URL=${BASE_URL}8 volumes: 9 - changedetection_data:/datastore10 ports: 11 - "5000:5000"12 depends_on: 13 - playwright-chrome14 networks: 15 - changedetection-network1617 playwright-chrome: 18 image: browserless/chrome:latest19 container_name: playwright-chrome20 environment: 21 - SCREEN_WIDTH=192022 - SCREEN_HEIGHT=102423 - SCREEN_DEPTH=1624 - ENABLE_DEBUGGER=false25 - PREBOOT_CHROME=true26 - CONNECTION_TIMEOUT=30000027 - MAX_CONCURRENT_SESSIONS=1028 - CHROME_REFRESH_TIME=60000029 - DEFAULT_BLOCK_ADS=true30 - DEFAULT_STEALTH=true31 networks: 32 - changedetection-network3334volumes: 35 changedetection_data: 3637networks: 38 changedetection-network: 39 driver: bridge.env Template
.env
1# ChangeDetection.io2BASE_URL=http://localhost:5000Usage Notes
- 1UI at http://localhost:5000
- 2Add URLs to monitor
- 3Supports CSS/XPath selectors
- 4Notifications via email, Discord, etc.
- 5JavaScript rendering via Playwright
Individual Services(2 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
environment:
- PLAYWRIGHT_DRIVER_URL=ws://playwright-chrome:3000/?stealth=1&--disable-web-security=true
- BASE_URL=${BASE_URL}
volumes:
- changedetection_data:/datastore
ports:
- "5000:5000"
depends_on:
- playwright-chrome
networks:
- changedetection-network
playwright-chrome
playwright-chrome:
image: browserless/chrome:latest
container_name: playwright-chrome
environment:
- SCREEN_WIDTH=1920
- SCREEN_HEIGHT=1024
- SCREEN_DEPTH=16
- ENABLE_DEBUGGER=false
- PREBOOT_CHROME=true
- CONNECTION_TIMEOUT=300000
- MAX_CONCURRENT_SESSIONS=10
- CHROME_REFRESH_TIME=600000
- DEFAULT_BLOCK_ADS=true
- DEFAULT_STEALTH=true
networks:
- changedetection-network
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 environment:8 - PLAYWRIGHT_DRIVER_URL=ws://playwright-chrome:3000/?stealth=1&--disable-web-security=true9 - BASE_URL=${BASE_URL}10 volumes:11 - changedetection_data:/datastore12 ports:13 - "5000:5000"14 depends_on:15 - playwright-chrome16 networks:17 - changedetection-network1819 playwright-chrome:20 image: browserless/chrome:latest21 container_name: playwright-chrome22 environment:23 - SCREEN_WIDTH=192024 - SCREEN_HEIGHT=102425 - SCREEN_DEPTH=1626 - ENABLE_DEBUGGER=false27 - PREBOOT_CHROME=true28 - CONNECTION_TIMEOUT=30000029 - MAX_CONCURRENT_SESSIONS=1030 - CHROME_REFRESH_TIME=60000031 - DEFAULT_BLOCK_ADS=true32 - DEFAULT_STEALTH=true33 networks:34 - changedetection-network3536volumes:37 changedetection_data:3839networks:40 changedetection-network:41 driver: bridge42EOF4344# 2. Create the .env file45cat > .env << 'EOF'46# ChangeDetection.io47BASE_URL=http://localhost:500048EOF4950# 3. Start the services51docker compose up -d5253# 4. View logs54docker 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-monitor/run | bashTroubleshooting
- Playwright connection failed errors: Verify the PLAYWRIGHT_DRIVER_URL environment variable points to ws://playwright-chrome:3000 and both containers are on the same network
- JavaScript-heavy sites not rendering properly: Increase CONNECTION_TIMEOUT in playwright-chrome beyond 300000ms for slower-loading sites
- High memory usage causing container crashes: Reduce MAX_CONCURRENT_SESSIONS below 10 or increase Docker memory limits for the chrome container
- Notifications not sending: Check firewall rules for outbound connections and verify webhook URLs or SMTP settings in ChangeDetection interface
- 403/429 errors from target websites: Enable stealth mode and configure proxy rotation, or adjust monitoring frequency to reduce request rate
- Volume permission errors on data persistence: Ensure the changedetection_data volume has proper read/write permissions for container user ID
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
changedetectionplaywright-chrome
Tags
#changedetection#monitoring#website#alerts#scraping
Category
Monitoring & ObservabilityAd Space
Shortcuts: C CopyF FavoriteD Download