Watchtower

Use cases

Six pages worth watching, and how to narrow each one.

The difference between a useful watch and a noisy one is almost always scope. Every example below shows the request that makes the alert worth reading.

Competitive pricing

Watch a rival's pricing page with a field map, not the whole page.

{ "schema": { "pro": ".tier-pro .price", "seats": ".tier-pro .seats" } }

The alert reads pro: $19.00 → $29.00. A whole-page diff on a marketing site is mostly copy tweaks and hero images; two named fields are the two numbers your pricing meeting needs.

Terms, policies and DPAs

A supplier quietly rewrites a clause. You get the paragraph.

{ "url": "https://vendor.com/dpa", "scope": "main" }

Main scope drops the nav and footer that change with every site release, so what survives the diff is the document itself. Removed lines and added lines, in page order, ready to paste into a review.

Changelogs and status pages

Watch the page instead of the feed nobody maintains.

{ "selector": ".changelog-entry:first-child" }

A selector pinned to the newest entry fires when a release lands and stays quiet through every unrelated edit further down. No RSS, no scraping library, no cron of your own.

Stock, seats and waitlists

Availability that a page publishes but no API exposes.

{ "schema": { "status": "[data-availability]" }, "cadence": "hourly" }

Hourly is the fastest cadence, and each pass costs the same as a manual check. Out of credits, a pass is skipped rather than failed, and it resumes the moment you top up.

Compliance and registers

A licence list, a sanctions page, a regulator's notice board.

{ "selector": "table#register", "ignore_volatile": ["tokens", "cache_busters"] }

Keep dates in scope when the dates ARE the record. Every class can be turned off individually, so the defaults never quietly hide the thing you are watching for.

Agents, mid-task

One call, one answer, no account.

POST /api/x402/check  { "url": …, "baseline": "<snapshot_id>" }

Pay in USDC on Base, get the current extraction and the diff against the snapshot you were handed last time. The agent keeps its own schedule; we keep the comparison honest.

One thing it is not for

Watching a page that changes constantly.

A live feed, a ticker, a dashboard whose numbers move every minute — those change on every pass by design, and every pass would bill 3 credits and fire your webhook. Narrow to the one element you actually care about, or watch something else. A monitor that always fires is the same as no monitor at all.