When a backup, report or sync job stops running, you get an alert minutes after it misses its check-in, instead of on the day you need what it should have produced.
Scheduled jobs fail without making noise
A cron daemon stays stopped after a reboot. A script crashes before it finishes, or a credential it needs expires, or the server gets rebuilt without its crontab. Nothing returns an error to anyone, because nothing was waiting for the job. The website stays up, so an uptime check shows green while the backup goes stale. In our experience the gap comes to light when someone needs to restore from it.
How a heartbeat works
You create a heartbeat with a name, an optional description, the interval you expect between runs and a grace period. OctoPing gives it a secret URL. Your job requests that URL when it finishes, with GET or POST. If no ping arrives within the interval plus the grace period, counted from the last ping, OctoPing marks the heartbeat late and sends the alert. The next ping marks it healthy again and sends the recovery.
0 2 * * * /usr/local/bin/backup.sh && curl -fsS https://octoping.com/api/ping/your-secret-keyOctoPing records that the URL was requested. It doesn't know whether the job did its work, so chain the request after the job with &&. A job that exits with an error then skips the ping, and the heartbeat goes late. The -fsS flags make curl fail on an HTTP error and stay quiet otherwise. The ping URL is https://octoping.com/api/ping/your-secret-key, and the response is JSON with ok set to true when the ping was recorded.
Choosing the interval and the grace period
The default interval is every 5 minutes, and you can choose every 1 minute, every 5 minutes, every 10 minutes, every 30 minutes, every 1 hour, every 6 hours, every 12 hours or every 1 day. Pick the longest normal gap between two runs. The grace period is the extra time you allow for a slow run. It defaults to 5 minutes, and the presets are 30 seconds, 1 minute, 2 minutes, 5 minutes, 10 minutes, or you can enter your own number of seconds.
Because the deadline counts from the last ping, a job that ran early or late moves its own deadline with it.
What you get
The subject of the late alert names the heartbeat and says it is late. The body gives the name, your description, the expected interval, when the last ping arrived and how many failed checks in a row it has had. A recovery alert follows the first ping after a late alert.
Heartbeat Monitor: Nightly backup
Description: Dumps the client database to storage
Status: Missed (consecutive failures: 3)
Expected interval: 1d
Last ping received: 2026-11-05 02:00:41+00:00
The heartbeat has missed 3 expected pings in a row.Heartbeats use the same five channels as sites: email, Slack, Discord, webhook and browser push. Each alert rule has a retry threshold and a repeat interval, and switches for the missed and recovered alerts. See alerts.
History, status pages and maintenance
The heartbeat's page shows a ping timeline and the recent pings with the source address and user agent. A POST with a JSON body up to 10 KB stores the body with the ping, and you can open it from the recent pings list. Uptime is the share of expected check-ins that arrived over the period.
Heartbeats sit on a status page next to sites. A maintenance window can cover a heartbeat: no late alert goes out while it runs, and the deadline restarts from the end of the window, so you aren't alerted the minute it closes. Client contacts on a page that shows the heartbeat get the late and recovered alerts.
How it fits the price
Heartbeats are counted separately from sites, so adding them doesn't use up your site allowance. The plans include 20 on Starter, 60 on Agency and 200 on Scale. Plans start at $19 a month for 20 sites. See pricing for the full list.
Every account starts with a 14-day free trial. No card required. Start your 14-day trial and add a client's site to see it working.
Last reviewed
Related
- FeatureWebsite alerts by email, Slack, Discord, webhook and pushChoose where alerts go, how many failures it takes to send one and how often reminders repeat. Recovery messages and a log of every attempt are included.
- FeatureWhite-label status pages with custom domains and subscribersPublish a status page in your client's branding, with incidents, scheduled maintenance, email subscribers, feeds and client contacts. Custom domains on paid plans.
- DocsHeartbeat pingReport that a scheduled job ran: the ping endpoint, its optional JSON body, every response and the limits.
- GuideMonitor cron jobs with heartbeatsGet an alert when a backup or scheduled job stops running, whether it runs from cron, a systemd timer, GitHub Actions or Kubernetes.