A missing ping sends an alert.
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.
€9 starting credit, no card, about three months of light use. After that, pay as you go from €3 a month or choose a monthly plan.
What happens when a job stops
A simulated nightly backup, sped up for the demo: one “day” lasts four seconds and the grace window three. When you kill the job, the grace window runs out and the alert fires. Restart it to bring it back.
The hollow slot stays in the row. A missed run is not edited away afterwards.
Add one line per job.
Create a heartbeat
Name it, set the expected cadence (anything from a few minutes to once a month) and a grace window for jobs that sometimes run long. The deadline starts with the first check-in.
Append the ping
Add && curl -fsS <your ping URL> to the job. The && makes curl run only if the job succeeded, so a failed or hanging job never pings and both look the same: silent.
Alert when the ping stays out
If the ping stays out past the grace window, an incident opens and your alert channels are notified, such as Slack, PagerDuty or email.
0 3 * * * /usr/local/bin/backup.sh && curl -fsS https://app.upfour.io/v1/heartbeat/3f9c2a7e41b86d05e8a1c94f27d6b0e3 Works with anything that can send an HTTP request: crontab, systemd timers, Kubernetes CronJobs, GitHub Actions, Windows Task Scheduler or a Raspberry Pi.
Jobs that often go unnoticed
Questions about heartbeats
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?
Add a heartbeat to every job.
€9 starting credit, no card, about three months of light use. After that, pay as you go from €3 a month or choose a monthly plan.