docker.recipes

Change Detection Monitor

beginner

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:latest
4 container_name: changedetection
5 restart: unless-stopped
6 ports:
7 - "${CD_PORT:-5000}:5000"
8 environment:
9 - PLAYWRIGHT_DRIVER_URL=ws://playwright:3000
10 - BASE_URL=http://localhost:${CD_PORT:-5000}
11 volumes:
12 - changedetection_data:/datastore
13 depends_on:
14 - playwright
15
16 playwright:
17 image: browserless/chrome:latest
18 container_name: cd-playwright
19 restart: unless-stopped
20 environment:
21 - DEFAULT_BLOCK_ADS=true
22 - DEFAULT_STEALTH=true
23
24 ntfy:
25 image: binwiederhier/ntfy:latest
26 container_name: cd-ntfy
27 restart: unless-stopped
28 ports:
29 - "${NTFY_PORT:-8080}:80"
30 volumes:
31 - ntfy_cache:/var/cache/ntfy
32
33volumes:
34 changedetection_data:
35 ntfy_cache:

.env Template

.env
1# Change Detection
2CD_PORT=5000
3NTFY_PORT=8080

Usage Notes

  1. 1Change Detection at http://localhost:5000
  2. 2Ntfy at http://localhost:8080
  3. 3Add URLs to monitor
  4. 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 file
2cat > docker-compose.yml << 'EOF'
3services:
4 changedetection:
5 image: ghcr.io/dgtlmoon/changedetection.io:latest
6 container_name: changedetection
7 restart: unless-stopped
8 ports:
9 - "${CD_PORT:-5000}:5000"
10 environment:
11 - PLAYWRIGHT_DRIVER_URL=ws://playwright:3000
12 - BASE_URL=http://localhost:${CD_PORT:-5000}
13 volumes:
14 - changedetection_data:/datastore
15 depends_on:
16 - playwright
17
18 playwright:
19 image: browserless/chrome:latest
20 container_name: cd-playwright
21 restart: unless-stopped
22 environment:
23 - DEFAULT_BLOCK_ADS=true
24 - DEFAULT_STEALTH=true
25
26 ntfy:
27 image: binwiederhier/ntfy:latest
28 container_name: cd-ntfy
29 restart: unless-stopped
30 ports:
31 - "${NTFY_PORT:-8080}:80"
32 volumes:
33 - ntfy_cache:/var/cache/ntfy
34
35volumes:
36 changedetection_data:
37 ntfy_cache:
38EOF
39
40# 2. Create the .env file
41cat > .env << 'EOF'
42# Change Detection
43CD_PORT=5000
44NTFY_PORT=8080
45EOF
46
47# 3. Start the services
48docker compose up -d
49
50# 4. View logs
51docker 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-stack/run | bash

Troubleshooting

  • 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

Ad Space