(query, surfaces, regions, extract) on a cadence. Add a webhookUrl to receive each dispatched run exactly like any other async search.
Use watches for continuous GEO and rank monitoring without operating a scheduler on your side.
Create watches three equivalent ways — same validation, plan limits, and billing on every path:
- REST —
POST /v1/watchesand the rest of the watch endpoints. - MCP — the
create_watch/list_watches/update_watch/delete_watchtools on the hosted MCP server, built for agents. - Dashboard — the Watches page in your workspace.
Creating a watch is free. Each dispatched run bills per surface × region
exactly like a normal async search, with the same success-only refunds for
empty or failed captures. A skipped run costs nothing. See
Credits.
Schedules
Use a named token for common cadences:15m, 30m, 1h, 6h, 12h, 1d, and 7d. For an off-grid cadence, send a positive integer:
every is a display convenience using the nearest token. intervalMinutes is the source of truth.
Plan limits
Each plan sets an active-watch ceiling and a minimum interval.
An interval below the plan floor returns
422 WATCH_INTERVAL_TOO_SHORT; the message names the floor and plan. Creating past the active-watch ceiling returns 403 WATCH_LIMIT_EXCEEDED; the message names the ceiling and plan.
Lifecycle
A watch is always in one of three states:
Pause or resume with
PATCH /v1/watches/:id. A manual pause sets pausedReason: "user". Resuming a paused watch clears pausedReason and sets nextRunAt to now + intervalMinutes.
Use DELETE /v1/watches/:id to cancel. Cancellation preserves the watch row and run history.
Automatic pause
If three scheduled runs in a row are skipped for insufficient credits, the watch becomespaused with pausedReason: "insufficient_credits". A successful dispatch resets the consecutive-failure counter to zero.
Auto-pause prevents an underfunded watch from producing an unbounded stream of
skipped ticks. After restoring credits, resume it explicitly; the next run is
scheduled from the resume time.
Run history
Every scheduled tick that reaches a watch creates one run-history row. Read the ten newest runs withGET /v1/watches/:id, or page through the full history with GET /v1/watches/:id/runs.
For
dispatched, read jobId with GET /v1/jobs/:id exactly like any other async parent job. If the watch has a webhookUrl, each child delivery uses the same signature, retry, and dedupe semantics described in Webhooks.
Create and inspect a watch
Create a daily watch, then read it to seelastRunAt, lastJobId, and the newest run records as ticks dispatch.
Related
Create a watch
Request fields, schedules, and creation errors.
Get a watch
Read configuration and the ten newest runs.
Update a watch
Pause, resume, or change the cadence and delivery.
Watch runs
Page through complete run history.
Webhooks
Verify the signed deliveries from dispatched runs.
Credits
Per-surface, success-only billing for each dispatch.