Railway

Deploy changedetection.io

ChangeDetection.io — monitor website changes with alerts and history.

Deploy changedetection.io

Just deployed

/datastore

changedetection.io

changedetection.io

Self-hosted web page change monitoring — get instant alerts when any website changes.

Deploy on Railway GitHub Stars License Docker Pulls

changedetection.io Deploy on Railway

✨ Features

  • Real-time change detection — Monitor any web page for content, price, or structural changes
  • 60+ notification channels — Discord, Email, Slack, Telegram, Webhook, Apprise, and more
  • AI-powered summaries — LLM integration (OpenAI, Gemini, Ollama, Anthropic) for smart diff summaries
  • Visual Selector — Point-and-click element targeting with browser fetcher
  • Browser Steps — Log in, fill forms, click buttons before detecting changes
  • Filter engine — XPath, CSS Selectors, JSONPath, jq, regex text filtering
  • Re-stock & Price detection — Monitor product pages for stock and price changes
  • API & RSS — Full REST API for watches and notifications
  • Screenshot diffs — Visual change comparison with screenshots
  • Scheduling — Timezone-aware recheck schedules with day-of-week and time limits

🚀 Deploy on Railway

One-Click Deploy

Deploy on Railway

Click the button above to deploy changedetection.io instantly on Railway.

Prerequisites

  • A Railway account
  • No external database required — uses built-in SQLite storage

⚙️ Environment Variables

VariableRequiredDefaultDescription
PORTNo5000HTTP listen port (Railway sets this automatically)
LOGGER_LEVELNoDEBUGLog level: TRACE, DEBUG, INFO, SUCCESS, WARNING, ERROR, CRITICAL
BASE_URLNoPublic URL of your instance (appears in notification alerts)
USE_X_SETTINGSNo1Set to 1 when behind Railway's reverse proxy
HIDE_REFERERNoHide Referer header from monitored websites
FETCH_WORKERSNo10Number of parallel fetch workers
MINIMUM_SECONDS_RECHECK_TIMENoMinimum seconds between rechecks (0 to disable)
DISABLE_VERSION_CHECKNoDisable telemetry / version check
LLM_FEATURES_DISABLEDNoDisable all LLM / AI features
ALLOW_FILE_URINoAllow watching local file:/// URIs (security!)
TZNoUTCTimezone for scheduling (e.g., America/New_York)
HTTP_PROXYNoHTTP proxy address for outgoing requests
HTTPS_PROXYNoHTTPS proxy address for outgoing requests
NO_PROXYNoComma-separated proxy exclusion list
SCREENSHOT_MAX_HEIGHTNo16000Max screenshot height in pixels
EXTRA_PACKAGESNoSpace-separated extra Python packages to install (plugins)
PLAYWRIGHT_DRIVER_URLNoWebSocket URL to a Playwright browser for JS-rendered pages

📡 Service Architecture

┌──────────────────────────────────────────────────────────────────┐
│                     changedetection.io                            │
│                        Port 5000                                  │
│                                                                   │
│  ┌──────────────┐  ┌─────────────────┐  ┌──────────────────────┐ │
│  │  Web UI      │  │  Change Engine   │  │  Notification Engine │ │
│  │  (Flask)     │  │  (Scheduler)     │  │  (Apprise)           │ │
│  │  /           │  │  Per-watch       │  │  60+ channels        │ │
│  │  Watches     │  │  polling         │  │  Discord, Email,     │ │
│  │  Settings    │  │  Content diff    │  │  Slack, Telegram     │ │
│  └──────┬───────┘  └────────┬─────────┘  └──────────┬───────────┘ │
│         │                   │                        │            │
│         └───────────────────┼────────────────────────┘            │
│                             │                                     │
│                    ┌────────▼────────┐                            │
│                    │  SQLite (/datastore)  │                      │
│                    │  Watches, config,    │                      │
│                    │  notification history │                     │
│                    └─────────────────────┘                       │
└──────────────────────────────────────────────────────────────────┘
        │                        │
        │                   ┌────▼────┐
        │                   │  HTTP   │
        │                   │ Fetcher │
        │                   │ (fast)  │
   ┌────▼────┐              └─────────┘
   │ Playwright │
   │  Browser  │
   │ (JS support)│
   └───────────┘

💻 Local Development

Prerequisites

  • Docker installed on your machine

Quick Start

# Clone the repository
git clone https://github.com/INAPP-Mobile/railway-changedetection.io.git
cd railway-changedetection.io

# Build and run with Docker
docker build -t changedetection .
docker run -d \
  --name changedetection \
  -p 5000:5000 \
  -v changedetection-data:/datastore \
  changedetection

# Open in browser
open http://localhost:5000

Using Docker Compose

See the GitHub repo for docker-compose.yml examples.

For JavaScript-rendered pages, add a Playwright browser service (see repo for config).

🔧 Troubleshooting

IssueSolution
Health check failingEnsure PORT env var matches the container's listen port (5000). Check Railway logs for startup errors.
Data lost on restartData is stored in /datastore (SQLite). Railway provides ephemeral storage that persists within service lifecycles.
Slow first startupThe image is ~400MB. First cold start may take 1–2 minutes for the health check to pass.
Cannot access the UIMake sure USE_X_SETTINGS=1 is set when behind Railway's proxy. Railway provides TLS at the edge.
Monitored sites not checkingVerify FETCH_WORKERS is set appropriately (default 10). Check if sites have IP-based blocks on Railway egress IPs.
JS-rendered pages not detecting changesSet up a Playwright browser service and configure PLAYWRIGHT_DRIVER_URL. The default HTTP fetcher doesn't execute JavaScript.
Notifications not sendingVerify notification URLs are correctly formatted in the watch settings. Check Apprise documentation for your channel.
Port conflictRailway assigns PORT automatically. If you override it, ensure it matches the EXPOSE 5000 in the Dockerfile.

📚 Resources

📄 License

This template deploys changedetection.io, which is licensed under the Apache License 2.0. See the LICENSE file for details.


Built by INAPP-Mobile — Deploy your own website change monitoring service in minutes.

Deploy and Host

One-click deploy on Railway. Single container, built-in SQLite. TLS at edge, auto-restart.

About Hosting

Single container with SQLite. No external DB needed.

Why Deploy

  • One-click deploy, zero setup
  • Single container, no external DB
  • Auto HTTPS via Railway

Common Use Cases

Dependencies for

Changedetection.io uses SQLite — no external database required.

Deployment Dependencies

Changedetection.io uses SQLite — no external database required.


Template Content

More templates in this category

View Template
SigOnly
Deploy SigNoz with a working demo app & config in one click

zoeyjones
21
View Template
Unwrapped Spotify Music Stats
Unwrapped Spotify Music Stats, Estatísticas de músicas disponíveis

Jorge Henrique
1
View Template
OpenTelemetry Collector and Backend
OpenTelemetry Collector with Backend Stack

Melissa
110