Create, list, update, and delete monitors that watch a URL (exact content diff) or a sitemap (added/removed URL tracking) on a schedule, with signed webhook delivery on change — all as normalized JSON from the Crawlora API, with no polling loop or diffing logic of your own to write.
When to use this skill
- "Watch this page and tell me when it changes." / "Track this competitor's pricing page."
- "Alert me when new pages get added to this site" (sitemap mode).
- "List my active monitors." / "Pause/update/delete this monitor."
- "Show me this monitor's recent check history" — did it run, did it find a change, did the webhook deliver.
- Anything that would otherwise mean writing your own cron job + diffing + notification pipeline for "let me know when X changes."
Setup (one-time)
- Get a free Crawlora API key (2,000 credits/mo, no card) at https://crawlora.net.
- Set
CRAWLORA_API_KEYin the environment before running the helper. - The helper reads
CRAWLORA_API_KEYfrom the environment and sends requests tohttps://api.crawlora.net/api/v1. Missing/invalid key →401.
How it works
- Create —
POST /monitorswithurl,cadence_minutes(5 to 10080, i.e. 5 minutes to 7 days), and optionallytarget_type(page, the default — exact SHA-256 content-fingerprint diff — orsitemap, which tracks a sitemap's<loc>entries for additions and removals, with optionalsitemap.include_patterns/exclude_patternsglob filters andsitemap.max_urls). Addnotification.webhook_url(must behttpsand resolve to a public address) and an optionalnotification.webhook_secretto get a signed delivery on change.notification.eventsopts intochange.detected(default — fires only when a check finds a difference) and/orrun.completed(fires on every completed run, a heartbeat for a "last checked" UI). - List / get —
GET /monitorslists the caller's own monitors (newest first, capped at 100, free to call);GET /monitors/{id}fetches one. - Update —
PATCH /monitors/{id}partially updates a monitor (free to call). Changingtarget_typeorsitemapresets the stored diff baseline (fingerprint, snapshot, or URL set), so the next check starts fresh rather than comparing against the old target's state. - Delete —
DELETE /monitors/{id}removes a monitor. - Check history —
GET /monitors/{id}/checkslists the monitor's most recent check runs (newest first, capped at 50), including per-run webhook delivery status — use this to debug "why didn't I get notified." - Verify webhook deliveries — every delivery carries an
X-Crawlora-Signature: t=<unix>,v1=<hmac-hex>header, an HMAC-SHA256 digest of"{t}.{rawBody}"keyed by yourwebhook_secret. Recompute it and reject stale timestamps to guard against replay.
Full endpoint list, methods, and params: reference/endpoints.md.
Calling the API
# Create a page monitor with a webhook:
scripts/crawlora.sh -X POST /monitors '{
"url": "https://example.com/pricing",
"cadence_minutes": 60,
"name": "Pricing page",
"notification": {"webhook_url": "https://example.com/webhooks/crawlora"}
}' | jq '.'
# Create a sitemap monitor (new/removed pages):
scripts/crawlora.sh -X POST /monitors '{
"url": "https://example.com/sitemap.xml",
"target_type": "sitemap",
"cadence_minutes": 1440
}' | jq '.'
# List monitors:
scripts/crawlora.sh /monitors | jq '.'
# Check one monitor's recent runs:
scripts/crawlora.sh /monitors/mon_abc123/checks | jq '.'
# Pause a monitor:
scripts/crawlora.sh -X PATCH /monitors/mon_abc123 '{"enabled": false}' | jq '.'
Use scripts/crawlora.sh for all requests; it keeps the API key out of command-line arguments.
Endpoint reference
See reference/endpoints.md for every Monitors
endpoint this skill uses (method, path, params, description).
Examples
- Competitor pricing watch:
POST /monitorson a competitor's pricing page withnotification.events: ["change.detected"], then poll/monitors/{id}/checks(or just wait for the webhook) to see when it actually changes. - New-page discovery:
target_type: "sitemap"on a site's sitemap URL to get notified when a new product/blog page goes live, without crawling the whole site yourself. - "Is my monitor actually working?" —
GET /monitors/{id}/checksshows whether recent runs completed, found a change, and whether the webhook delivered — the fastest way to debug a monitor that "should have fired."
Notes & limits
- Credits / pay-on-success: management calls (create, list, get, update, delete) are free; only checks are billed. Free tier 2,000 credits/mo. Key at https://crawlora.net.
- Security: key lives in
CRAWLORA_API_KEYonly — never hardcode, query-param, or commit it. Always verify the webhook signature before trusting a delivery's payload. - Public data only — a monitor watches a publicly-reachable URL; it can't authenticate into a page behind a login.
cadence_minutesrange is 5 to 10080 (5 minutes to 7 days) — pick the cadence that matches how often the target actually changes; a tighter cadence than needed just burns checks faster.- Every request scopes to the caller's own API key — there's no cross-account listing or lookup.