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 + EmailCompetitor Monitoring
Watch: https://competitor.com/pricing
CSS Filter: .pricing-table
Check every: 6 hours
Notification: "Competitor pricing page changed!"
→ Send to Slack #competitive-intelRestock 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 notificationContent & 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 EmailKey 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-comparisonNotification Channels
Email (SMTP) Slack Discord
Telegram ntfy Gotify
PagerDuty Pushover Pushbullet
Microsoft Teams Webhooks Matrix
IFTTT Home Assistant Custom scripts
... and 60+ more via AppriseVisual 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 redAPI
# 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 + 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 内容。
来源与致谢
- GitHub: dgtlmoon/changedetection.io — 31.1K+ ⭐
- 官网: changedetection.io