Cron & heartbeat monitoring · included on every plan

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

The dead man’s switch

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.

nightly-backup · expects a ping every 4 s · grace 3 s (demo speed)
Nothing real dies. The alert, however, is exactly what your phone would show.

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.

How it works

One URL, one ampersand, done.

01

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.

02

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.

03

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.

What gets a pulse

The jobs nobody watches — until they matter.

Nightly backupsthe classic. You find out a backup broke on the day you need it — or three months earlier, from us
Certificate renewalsrenewal cron dies quietly, cert expires loudly
Queue workersa worker loop that pings every few minutes — hangs surface as silence
Data syncs & ETLthe report is only wrong if nobody noticed the sync stopped
Invoice & billing runsmoney jobs deserve a dead man’s switch more than anything
Scheduled emailsdigests and reminders that simply stopped one Tuesday
FAQ

Heartbeat questions, answered plainly

How is this different from an uptime check?
Direction. An uptime check is us calling your site every 10 seconds. A heartbeat is your job calling us after each successful run. Uptime checks catch things that stop responding; heartbeats catch things that stop happening — a cron job that dies makes no error, no log entry, no noise at all.
What if my job sometimes runs long?
That is what the grace window is for. Expect a ping every 24 hours with a 2-hour grace, and a backup that occasionally takes until 05:30 never wakes anyone — but one that vanishes does.
Does a failed job send a ping?
Not if you wire it with && — the ping only fires when the command before it exits cleanly. Failure, crash and hang all produce the same thing: silence. Silence is the one signal a broken machine cannot fake.
What schedules can I monitor?
Any cadence from minutes to monthly — you set the expected interval and the grace period per heartbeat. Pause a heartbeat during planned maintenance and resume it after; paused heartbeats never alert.
Is this an extra product or plan?
Neither. Cron & heartbeat monitoring is part of every plan, pay as you go included — some vendors sell exactly this feature as a standalone product with its own subscription. Here it is a tab.
Where do the alerts go?
The same alerting pipeline as HTTP monitors: Slack, email, PagerDuty, webhooks and the rest of the 12 channels, with escalation policies and on-call schedules on top. A missed backup can climb the same ladder as a down site.

Give every quiet job a pulse.

€3 credit · no card · heartbeats on every plan