diffwatch

Docs

A watch is one URL, one optional selector, one schedule. That is the whole configuration surface.

Create a watch

curl -s -X POST http://localhost:8108/api/watches \
  -H "Content-Type: application/json" \
  -d '{"url":"https://competitor.com/pricing","mode":"text"}'

# response includes the watch id and a per-watch RSS token

Free watches are checked hourly. Pro drops that to every five minutes.

Selector scoping

Pass a CSS selector to extract only that element before comparing:

{"url":"https://competitor.com/pricing","selector":".price-tag"}

Whitespace is normalized before compare, so cosmetic reflows never fire. Only real content changes inside your selector alert you.

Diffs and history

# snapshot history for one watch
curl http://localhost:8108/api/watches/WATCH_ID/history

# unified diff between two snapshots
curl "http://localhost:8108/api/watches/WATCH_ID/diff?from=A&to=B"

Pro stores visual screenshots alongside text so layout-level changes show up as image pairs.

Alert channels

  • Email the diff renders inline
  • RSS one feed per watch token
  • Webhooks POST with old and new

Plan limits

Free Pro $19/mo Team $49/mo
Watches350250
Check frequencyhourly5 min1 min
History7 days90 days + screenshots90 days + screenshots