ConfigsApr 10, 2026·1 min read

changedetection.io — Self-Hosted Website Change Monitoring

changedetection.io monitors websites for content changes and sends alerts. Track price drops, restock alerts, content updates, and page modifications automatically.

AI
AI Open Source · Community
Quick Use

Use it first, then decide how deep to go

This block should tell both the user and the agent what to copy, install, and apply first.

docker run -d --name changedetection -p 5000:5000 
  -v changedetection-data:/datastore 
  dgtlmoon/changedetection.io:latest

Open http://localhost:5000 — add a URL and start monitoring for changes.

Intro

changedetection.io is a self-hosted website change detection and monitoring tool. It periodically checks web pages for content changes and sends notifications via email, Slack, Discord, Telegram, webhooks, and 70+ notification channels. Perfect for tracking price drops, monitoring competitor sites, catching restock alerts, and watching for content updates.

With 31.1K+ GitHub stars, changedetection.io is the most popular open-source website monitoring tool, used by individuals and businesses for competitive intelligence, price monitoring, and content tracking.

What changedetection.io Does

  • Content Monitoring: Detect any text change on any web page
  • Visual Diff: Highlighted visual comparison showing exactly what changed
  • CSS/XPath Filters: Monitor specific page sections (price, stock status, etc.)
  • JavaScript Rendering: Support for JavaScript-heavy sites via Playwright browser
  • Price Tracking: Extract and track prices with notifications on drops
  • Notifications: 70+ channels via Apprise (email, Slack, Discord, Telegram, webhooks, etc.)
  • Scheduling: Configurable check intervals per watch (minutes to days)
  • Import/Export: Bulk import URLs, export monitoring configurations
  • API: REST API for programmatic management
  • Tags & Groups: Organize monitored sites with tags

Architecture

┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  Web UI      │────▶│ changedetection│──▶│  Target      │
│  (Flask)     │     │  .io Server   │   │  Websites    │
└──────────────┘     └──────┬───────┘    └──────────────┘
                            │
              ┌─────────────┼─────────────┐
              │             │             │
       ┌──────┴──┐   ┌─────┴───┐   ┌─────┴───┐
       │Playwright│   │ Apprise │   │ SQLite  │
       │(JS sites)│   │ (Notify)│   │ (Data)  │
       └──────────┘   └─────────┘   └─────────┘

Self-Hosting

Docker Compose (with Playwright)

services:
  changedetection:
    image: dgtlmoon/changedetection.io:latest
    ports:
      - "5000:5000"
    environment:
      PLAYWRIGHT_DRIVER_URL: ws://playwright-chrome:3000
      BASE_URL: http://localhost:5000
    volumes:
      - changedetection-data:/datastore
    depends_on:
      - playwright-chrome

  playwright-chrome:
    image: dgtlmoon/sockpuppetbrowser:latest
    restart: unless-stopped
    environment:
      SCREEN_WIDTH: 1920
      SCREEN_HEIGHT: 1080

volumes:
  changedetection-data:

Use Cases

Price Drop Monitoring

Watch: https://amazon.com/product-page
CSS Filter: #priceblock_ourprice
Trigger: Text changed
Notification: "Price changed from $99.99 to $79.99!"
  → Send to Telegram + Email

Competitor Monitoring

Watch: https://competitor.com/pricing
CSS Filter: .pricing-table
Check every: 6 hours
Notification: "Competitor pricing page changed!"
  → Send to Slack #competitive-intel

Restock Alerts

Watch: https://store.com/limited-edition-item
CSS Filter: .stock-status
Trigger: Text contains "In Stock"
Notification: "Item is back in stock!"
  → Send to Discord + Push notification

Content & News Monitoring

Watch: https://gov-website.com/policy-updates
CSS Filter: .content-area
Ignore: .sidebar, .footer, .ads
Check every: 1 hour
Notification: "Government policy page updated"
  → Send via Email

Key Features

CSS/XPath Selectors

# Monitor only the price
CSS: .product-price
XPath: //span[@class="price"]

# Monitor article content, ignore sidebar
CSS: article.main-content
CSS Remove: .ads, .related-posts, .comments

# Monitor a table
CSS: table.pricing-comparison

Notification Channels

Email (SMTP)          Slack          Discord
Telegram              ntfy           Gotify
PagerDuty             Pushover       Pushbullet
Microsoft Teams       Webhooks       Matrix
IFTTT                 Home Assistant  Custom scripts
... and 60+ more via Apprise

Visual Diff

changedetection.io shows exactly what changed:

Before: "Regular Price: $99.99"
After:  "Sale Price: $79.99"     ← highlighted in green
Removed: "Regular Price: $99.99" ← highlighted in red

API

# Add a new watch
curl -X POST http://localhost:5000/api/v1/watch 
  -H "x-api-key: YOUR_API_KEY" 
  -H "Content-Type: application/json" 
  -d '{"url": "https://example.com", "tag": "competitor", "minutes_between_check": 60}'

# List all watches
curl http://localhost:5000/api/v1/watch 
  -H "x-api-key: YOUR_API_KEY"

changedetection.io vs Alternatives

Feature changedetection.io Visualping Distill.io Huginn
Open Source Yes No No Yes
Self-hosted Yes No Browser ext. Yes
JS rendering Playwright Yes Yes Manual
Visual diff Yes Yes Yes No
Notifications 70+ channels Email Email + more Flexible
Price tracking Yes No Yes Custom
Ease of use Easy Easy Easy Complex
Pricing Free (self-host) $10+/mo Free + paid Free

常见问题

Q: 可以监控需要登录的页面吗? A: 可以。通过 Playwright 浏览器可以配置登录步骤(填写表单、点击按钮),支持 Cookie 注入和 Header 自定义。

Q: 检查频率可以设到多高? A: 最低可以设置为每分钟检查一次。但建议对大多数网站保持 15-60 分钟的间隔,避免被目标网站封禁 IP。

Q: 需要 Playwright 容器吗? A: 如果你监控的网站是纯 HTML(不依赖 JavaScript 渲染),不需要 Playwright。对于 React/Vue/Angular 等 SPA 网站,需要 Playwright 来渲染 JavaScript 内容。

来源与致谢

Discussion

Sign in to join the discussion.
No comments yet. Be the first to share your thoughts.

Related Assets