cron.watch
Connect · live demo

Wire your app in — and watch it light up.

Your workers, crons, backups and queues emit telemetry over the cheapest channel that fits — HTTP, WebSocket, DNS, UDP — and cron.watch turns it into live monitors, charts, fleet health and alerts. This whole panel is running for real below. Trigger an incident and watch the alert fire. Every widget links to the feature behind it.

How it works — an automation that watches for silence

Every monitor is a tiny workflow. It runs the moment a check-in is due — and only reaches you if something's actually wrong. Watch one run:

Triggered
When a ping is dueTrigger
Heartbeat · Monitors
Its expected ping is overdue.
Checked
Within grace?Condition
Grace window
Don’t page on a single blip.
On timeOverdue
Resolved
All clearNo-op
Status
Checked in late — just log it.
Sent
Page the on-callAlert
Notifications
Slack now → PagerDuty +15m.

Idle — waiting for the next check-in window.

One account — every way to watch your stack

Sign up once, then branch into whatever you need. Each path is independent — turn on what fits, add more anytime (you pay per monitor, never per seat). The flow lights each one in turn:

You're in

key cw_live_…
org · default
see them all in the dashboard ↗
your app · emitting telemetry transport cron.watch · watching live
worker.py UDP
billing-worker · beats every 2s
udp beat
billing-worker
0s ago · heartbeat · open monitor ↗
cron HTTP
nightly-backup · 0 3 * * * · start + exit code
http snitch
nightly-backup
0s ago · run history · open monitor ↗
reindex job WS
streams live progress over one socket
websocket
reindex · 0%
live progress · open metrics ↗
queue drainer DNS
pushes latency_ms every 2s
dns / metric
812 ms
0s ago · latency metric · open metrics ↗
Slack · now PagerDuty · +15m

Stop the worker's beats with Trigger an incident: after the grace window the monitor flips red and the alert escalates Slack → PagerDuty. Hit Recover to resume. A public status page ↗ reflects the same state.

However you use it — the connection is four moves

Heartbeat, cron, metric or fleet, every path above is the same handful of calls: initialize once over HTTPS, then keep it cheap. Full per-language recipes are in the heartbeat guide.

01 · sign up

Get an account & API key

Self-serve over the API, or let an agent do it via MCP. Members are unlimited and free.

# verify email, then mint a key
curl -X POST https://api.cron.watch/v1/keys \
  -H 'Authorization: Bearer <token>'
# → { "api_key": "cw_live_…" }
02 · create

One monitor per worker or job

Pick a type and a schedule; you get back a check-in URL and slug. See a monitor ↗.

curl -X POST https://api.cron.watch/v1/monitors \
  -d '{"name":"billing-worker","type":"heartbeat",
       "schedule":"every 60s","grace":"3m"}'
03 · connect

Check in from the work itself

One HTTPS init, then a cheap UDP/DNS/WebSocket beat — tier your transport ↗.

# init once (HTTPS), then beat cheaply
curl https://cron.watch/s/billing-worker/start
printf 'billing-worker pct=64' | nc -u -w0 ping.cron.watch 4738
04 · sync

Reconcile & alert

Full state every 5 min over HTTPS; route alerts with escalation and mute maintenance windows.

curl https://cron.watch/s/billing-worker \
  -d 'rows=10423&latency_ms=812&exit_code=0'
# missed beats → Slack → PagerDuty

Connect your app. Watch it stay green.

Spin up monitors, wire a check-in from each worker, and let cron.watch tell you the moment one goes quiet. 10 monitors free for 3 months.

Get early access →