Silence is not a status report.
Uptime checks watch what must respond. Heartbeats watch what must run — backups, certificate renewals, queue workers, invoice jobs. Your job pings us after each successful run; the day the ping stays out, the silence itself raises the alarm. Setup is one line of curl.
15 trial days · every feature unlocked · no card
Kill a cron job. See who notices.
A simulated nightly backup, compressed for the demo: one “day” lasts four seconds and the grace window three. Kill it, watch the grace window run out, watch the alert fire — then bring it back.
The hollow slot stays in the row. A missed run is a fact, and facts stay on the record — that is what makes the healthy rows next to it worth something.
One URL, one ampersand, done.
Create a heartbeat
Name it, set the expected cadence — every 10 minutes to once a month — and a grace window for jobs that sometimes run long.
Append the ping
Add && curl -fsS <your ping URL> to the job. The && is the trick: a failed job never pings, so failure and hang look identical — silent.
Get woken only when it matters
The ping stays out past the grace window, and the alert goes to the same channels as everything else — Slack, PagerDuty, email, phone-adjacent.
0 3 * * * pg_dump prod | gzip > /backups/$(date +\%F).sql.gz && curl -fsS https://app.upfour.io/v1/heartbeat/nightly-backup Works with anything that can send an HTTP request: crontab, systemd timers, Kubernetes CronJobs, GitHub Actions, Windows Task Scheduler, that one Raspberry Pi in the office.
The jobs nobody watches — until they matter.
Heartbeat questions, answered plainly
How is this different from an uptime check?
What if my job sometimes runs long?
Does a failed job send a ping?
What schedules can I monitor?
Is this an extra product or plan?
Where do the alerts go?
Give every quiet job a pulse.
€3 credit · no card · heartbeats on every plan