---
title: "Deploy changedetection.io | (Just Updated) Website Change Monitor, API Key + Login Generated, Persistent"
description: "Website change monitor, agent-ready REST API, generated login and key"
category: "Automation"
url: https://railway.com/deploy/changedetectionio-or-just-updated-websit
---

# Deploy changedetection.io | (Just Updated) Website Change Monitor, API Key + Login Generated, Persistent

Website change monitor, agent-ready REST API, generated login and key

**[Deploy changedetection.io | (Just Updated) Website Change Monitor, API Key + Login Generated, Persistent on Railway](https://railway.com/template/changedetectionio-or-just-updated-websit)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/changedetectionio-or-just-updated-websit/manifest.json

- **Creator:** SuperSlowSloth
- **Category:** Automation

## Template content

### changedetection

- **Image:** ghcr.io/dgtlmoon/changedetection.io@sha256:04eaae7915bad711160cb15abe160f6d3fabe98bbbd658509d4b7a654000fb2d
- **Start command:** `/bin/sh -c 'exec python -c "$(echo IiIiQm9vdCB3cmFwcGVyIGZvciB0aGUgY2hhbmdlZGV0ZWN0aW9uLmlvIFJhaWx3YXkgdGVtcGxhdGUuCgpSdW5zIGFzIHRoZSBzdGFydCBjb21tYW5kIChiYXNlNjQtZW1iZWRkZWQgaW4gc2NyaXB0cy9zcGVjcy9jaGFuZ2VkZXRlY3Rpb24uanNvbiksCmJlY2F1c2UgYSBzdGFydCBjb21tYW5kIHJlcGxhY2VzIHRoZSBpbWFnZSBFTlRSWVBPSU5UIGFuZCBhIGxpdGVyYWwgdGVtcGxhdGUgdmFyaWFibGUKd291bGQgcHVibGlzaCBhcyBhIGJsYW5rIHJlcXVpcmVkIGZpZWxkLiBTb3VyY2Ugb2YgdHJ1dGggZm9yIHdoYXQgdGhhdCBjb21tYW5kIGRvZXMuCgoxLiBDcmVhdGUgdGhlIGRhdGFzdG9yZSBvbiBhIGZyZXNoIHZvbHVtZSAodXBzdHJlYW0ncyBvd24gVEVTVElOR19TSFVURE9XTl9BRlRFUl9EQVRBU1RPUkVfTE9BRAogICBleGl0KSBhbmQgcmVtb3ZlIHRoZSBzYW1wbGUgd2F0Y2hlcyBhbmQgdGFnIGl0IHNlZWRzLgoyLiBQaW4gdGhlIFJFU1QgQVBJIGtleSBpbiBjaGFuZ2VkZXRlY3Rpb24uanNvbiB0byAkQ0hBTkdFREVURUNUSU9OX0FQSV9LRVkuCjMuIERlcml2ZSBTQUxURURfUEFTUyBmcm9tICRDSEFOR0VERVRFQ1RJT05fUEFTU1dPUkQgKHVwc3RyZWFtJ3Mgb3duIGZvcm1hdDoKICAgYmFzZTY0KHNhbHQzMiArIHBia2RmMl9zaGEyNTYocGFzc3dvcmQsIHNhbHQsIDEwMDAwMCkpKSwgd2hpY2ggc3dpdGNoZXMgdGhlIFVJIGxvZ2luIG9uCiAgIGFuZCBsb2NrcyBpdCB0byB0aGF0IHZhbHVlLgo0LiBleGVjIHRoZSBhcHAuCiIiIgppbXBvcnQgYmFzZTY0LCBoYXNobGliLCBqc29uLCBvcywgc2h1dGlsLCBzdWJwcm9jZXNzLCBzeXMKCkQgPSAiL2RhdGFzdG9yZSIKQ0ZHID0gRCArICIvY2hhbmdlZGV0ZWN0aW9uLmpzb24iCnB3ID0gb3MuZW52aXJvblsiQ0hBTkdFREVURUNUSU9OX1BBU1NXT1JEIl0Ka2V5ID0gb3MuZW52aXJvblsiQ0hBTkdFREVURUNUSU9OX0FQSV9LRVkiXQpvcy5tYWtlZGlycyhELCBleGlzdF9vaz1UcnVlKQoKaWYgbm90IG9zLnBhdGguZXhpc3RzKENGRyk6CiAgICBiZWZvcmUgPSBzZXQob3MubGlzdGRpcihEKSkKICAgIGVudiA9IGRpY3Qob3MuZW52aXJvbiwgVEVTVElOR19TSFVURE9XTl9BRlRFUl9EQVRBU1RPUkVfTE9BRD0iMSIpCiAgICBzdWJwcm9jZXNzLnJ1bihbc3lzLmV4ZWN1dGFibGUsICIvYXBwL2NoYW5nZWRldGVjdGlvbi5weSIsICItZCIsIERdLCBlbnY9ZW52LCBjaGVjaz1UcnVlKQogICAgZm9yIG5hbWUgaW4gc2V0KG9zLmxpc3RkaXIoRCkpIC0gYmVmb3JlOgogICAgICAgIHAgPSBvcy5wYXRoLmpvaW4oRCwgbmFtZSkKICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHApIGFuZCAob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHAsICJ3YXRjaC5qc29uIikpIG9yIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwLCAidGFnLmpzb24iKSkpOgogICAgICAgICAgICBzaHV0aWwucm10cmVlKHApCgp3aXRoIG9wZW4oQ0ZHLCBlbmNvZGluZz0idXRmLTgiKSBhcyBmOgogICAgY2ZnID0ganNvbi5sb2FkKGYpCmFwcCA9IGNmZy5zZXRkZWZhdWx0KCJzZXR0aW5ncyIsIHt9KS5zZXRkZWZhdWx0KCJhcHBsaWNhdGlvbiIsIHt9KQphcHBbImFwaV9hY2Nlc3NfdG9rZW4iXSA9IGtleQphcHBbImFwaV9hY2Nlc3NfdG9rZW5fZW5hYmxlZCJdID0gVHJ1ZQp0bXAgPSBDRkcgKyAiLnRtcCIKd2l0aCBvcGVuKHRtcCwgInciLCBlbmNvZGluZz0idXRmLTgiKSBhcyBmOgogICAganNvbi5kdW1wKGNmZywgZikKb3MucmVwbGFjZSh0bXAsIENGRykKCnNhbHQgPSBvcy51cmFuZG9tKDMyKQpvcy5lbnZpcm9uWyJTQUxURURfUEFTUyJdID0gYmFzZTY0LmI2NGVuY29kZShzYWx0ICsgaGFzaGxpYi5wYmtkZjJfaG1hYygic2hhMjU2IiwgcHcuZW5jb2RlKCksIHNhbHQsIDEwMDAwMCkpLmRlY29kZSgpCnByaW50KCJbcmFpbHdheV0gY2hhbmdlZGV0ZWN0aW9uIHVpZD0lZCBkYXRhc3RvcmVfb3duZXI9JWQ6JWQgd3JpdGFibGU9JXMiICUgKAogICAgb3MuZ2V0dWlkKCksIG9zLnN0YXQoRCkuc3RfdWlkLCBvcy5zdGF0KEQpLnN0X2dpZCwgb3MuYWNjZXNzKEQsIG9zLldfT0spKSwgZmx1c2g9VHJ1ZSkKb3MuZXhlY3Yoc3lzLmV4ZWN1dGFibGUsIFtzeXMuZXhlY3V0YWJsZSwgIi9hcHAvY2hhbmdlZGV0ZWN0aW9uLnB5IiwgIi1kIiwgRF0pCg== | base64 -d)"'`
- **Health check:** /login
- **Public domain:** Yes

## Documentation

# Deploy and Host changedetection.io on Railway

**Built for an AI agent to deploy and use.** There is no manual step: deploy it, read the credential variables, and call the REST API. Login password and API key are generated for you, the contract below lists every URL and variable name, and one `curl` adds a watch.

changedetection.io watches web pages and tells you when they change. It supports CSS/XPath/JSON filters, text diffs, price and restock tracking, and notifications through more than 90 services. This template runs the official image with a persistent volume, a generated UI password, a generated REST API key, and a public HTTPS endpoint.

## About Hosting changedetection.io

This template runs the official `ghcr.io/dgtlmoon/changedetection.io` image (pinned by digest). Out of the box the stock app has no login and a random API key you have to dig out of the UI; here both are set at boot from variables Railway generates for you:

- The web UI is locked behind a login using `CHANGEDETECTION_PASSWORD`. Anonymous requests are redirected to `/login`.
- The REST API accepts only the key in `CHANGEDETECTION_API_KEY` (header `x-api-key`). Requests with no key or a wrong key get `403`.
- Watches, snapshots and settings live on a volume mounted at `/datastore`, so they survive redeploys. The API key and password stay stable across redeploys.
- The sample watches the upstream app seeds on first start are removed, so the instance starts empty.

Agent contract:

- Base URL variable: `CHANGEDETECTION_URL` (`https://`)
- UI login: password only, in `CHANGEDETECTION_PASSWORD` (the login form has no username)
- API key variable: `CHANGEDETECTION_API_KEY`, sent as header `x-api-key`
- Health path: `/login` (open, returns 200)
- API base: `/api/v1` (`GET|POST /watch`, `GET|PUT|DELETE /watch/{uuid}`, `GET /systeminfo`, `/tags`, `/notifications`, `/import`, `/search`)
- Full OpenAPI spec: 

Add a watch with one call:

```bash
curl -s -X POST "$CHANGEDETECTION_URL/api/v1/watch" \
  -H "x-api-key: $CHANGEDETECTION_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"url":"https://example.com","title":"example"}'
# -&gt; {"uuid": "..."}   then: GET $CHANGEDETECTION_URL/api/v1/watch  lists every watch
```

## Why Deploy changedetection.io on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying changedetection.io on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.

- **Easy for an LLM agent to use** — no manual step, generated credentials, a machine-readable contract and one working API call.
- **Secure by default** — the UI needs the generated password and the API needs the generated key; the stock app has neither.
- **Data survives redeploys** — the volume is preconfigured and verified with a write, redeploy, read.
- **Zero configuration** — no variables to fill in.

## Common Use Cases

- **Agent-driven web monitoring** — an agent registers pages as watches through the API and reads diffs when they change.
- **Price and stock tracking** — watch a product page and get notified when the price drops or an item returns.
- **Competitor and policy watching** — track pricing pages, terms, changelogs and job boards.

## Dependencies for changedetection.io Hosting

- A volume mounted at `/datastore` (included in this template).

### Deployment Dependencies

- [dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) — upstream project
- [changedetection.io on GHCR](https://github.com/dgtlmoon/changedetection.io/pkgs/container/changedetection.io) — the pinned image this template deploys
- Non-goal: JavaScript-rendered pages need a separate Chromium/Playwright browser service, which this template does not include; it fetches pages with plain HTTP requests.


## Similar templates

- [N8N Main + Worker](https://railway.com/deploy/n8n-main-worker) — Deploy and Host N8N with Inactive worker.
- [Evolution API with n8n](https://railway.com/deploy/evolution-api-with-n8n) — Automate WhatsApp workflows with Evolution API, n8n, and Postgres.
- [Postgres Backup](https://railway.com/deploy/postgres-s3-backups) — Cron-based PostgreSQL backup to bucket storage

Open this page in a browser: https://railway.com/deploy/changedetectionio-or-just-updated-websit
