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 | |
|---|---|---|---|
| Watches | 3 | 50 | 250 |
| Check frequency | hourly | 5 min | 1 min |
| History | 7 days | 90 days + screenshots | 90 days + screenshots |