docker.recipes

ChangeDetection.io Website Monitor

beginner

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:latest
4 container_name: changedetection
5 environment:
6 - PLAYWRIGHT_DRIVER_URL=ws://playwright-chrome:3000/?stealth=1&--disable-web-security=true
7 - BASE_URL=${BASE_URL}
8 volumes:
9 - changedetection_data:/datastore
10 ports:
11 - "5000:5000"
12 depends_on:
13 - playwright-chrome
14 networks:
15 - changedetection-network
16
17 playwright-chrome:
18 image: browserless/chrome:latest
19 container_name: playwright-chrome
20 environment:
21 - SCREEN_WIDTH=1920
22 - SCREEN_HEIGHT=1024
23 - SCREEN_DEPTH=16
24 - ENABLE_DEBUGGER=false
25 - PREBOOT_CHROME=true
26 - CONNECTION_TIMEOUT=300000
27 - MAX_CONCURRENT_SESSIONS=10
28 - CHROME_REFRESH_TIME=600000
29 - DEFAULT_BLOCK_ADS=true
30 - DEFAULT_STEALTH=true
31 networks:
32 - changedetection-network
33
34volumes:
35 changedetection_data:
36
37networks:
38 changedetection-network:
39 driver: bridge

.env Template

.env
1# ChangeDetection.io
2BASE_URL=http://localhost:5000

Usage Notes

  1. 1UI at http://localhost:5000
  2. 2Add URLs to monitor
  3. 3Supports CSS/XPath selectors
  4. 4Notifications via email, Discord, etc.
  5. 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 file
2cat > docker-compose.yml << 'EOF'
3services:
4 changedetection:
5 image: ghcr.io/dgtlmoon/changedetection.io:latest
6 container_name: changedetection
7 environment:
8 - PLAYWRIGHT_DRIVER_URL=ws://playwright-chrome:3000/?stealth=1&--disable-web-security=true
9 - BASE_URL=${BASE_URL}
10 volumes:
11 - changedetection_data:/datastore
12 ports:
13 - "5000:5000"
14 depends_on:
15 - playwright-chrome
16 networks:
17 - changedetection-network
18
19 playwright-chrome:
20 image: browserless/chrome:latest
21 container_name: playwright-chrome
22 environment:
23 - SCREEN_WIDTH=1920
24 - SCREEN_HEIGHT=1024
25 - SCREEN_DEPTH=16
26 - ENABLE_DEBUGGER=false
27 - PREBOOT_CHROME=true
28 - CONNECTION_TIMEOUT=300000
29 - MAX_CONCURRENT_SESSIONS=10
30 - CHROME_REFRESH_TIME=600000
31 - DEFAULT_BLOCK_ADS=true
32 - DEFAULT_STEALTH=true
33 networks:
34 - changedetection-network
35
36volumes:
37 changedetection_data:
38
39networks:
40 changedetection-network:
41 driver: bridge
42EOF
43
44# 2. Create the .env file
45cat > .env << 'EOF'
46# ChangeDetection.io
47BASE_URL=http://localhost:5000
48EOF
49
50# 3. Start the services
51docker compose up -d
52
53# 4. View logs
54docker compose logs -f

One-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 | bash

Troubleshooting

  • 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 & Observability
Ad Space