Crontap Heartbeats

The alert for the cron job that never ran.

Heartbeats turn monitoring around: your job pings Crontap after it runs. If the ping does not arrive inside the window you set, the silence becomes an alert.

Detection after grace expires
~1 min
Longest period
31 days
To add to an existing job
1 line
The Crontap heartbeats page. The headline reads “The alert for the cron job that never ran” above a timeline of five-minute slots, three of them filled green.
crontap.com/heartbeatscrontap.com · captured 2026-09-08

What it is

A dead man's switch for anything that runs on a schedule

Uptime monitoring asks whether your URL responds. That question means nothing for work with no URL: a nightly backup, a data import, a cleanup task inside someone else's scheduler. If that job stops running, nothing goes down. Nothing happens at all.

A heartbeat turns the check around. Crontap gives you a secret URL. Your job calls it when it finishes. Crontap starts the clock. Every heartbeat has a period (how often you expect a ping) and a grace window on top for normal delays. Grace defaults to twenty percent of the period, with a five minute minimum.

Miss the deadline and the heartbeat goes from up to late to down, and you get an email. Your job can also report its own failure by calling the same URL with /fail appended. That alerts at once instead of waiting for the deadline. When the next good ping lands, you get a recovery notice.

Adding a heartbeat is one extra line at the end of a job, so it works with schedulers you do not control. Anything that can make an HTTP request can report in: crontab, a CI workflow, a container entrypoint, a Lambda.

Why it is built this way

The ideas behind it

  1. 01

    Silence becomes signal

    The failure nobody catches is the job that never started. A heartbeat turns a missing ping into an alert.

  2. 02

    Period plus grace

    Say how often you expect a ping and how much lateness is normal. Late is visible but quiet. Past grace is an alert.

  3. 03

    Two kinds of bad news

    A missing ping means the job never ran. A ping to /fail means it ran and failed. Crontap reports both, and tells them apart.

  4. 04

    One line to adopt

    Add a curl to the end of an existing job. No agent. No SDK. No change to where or how the job runs.

Flow

How it works

  1. 01

    Create a heartbeat

    Set how often you expect a ping. Tune the grace window and alert cool-down if you want to.

  2. 02

    Ping from your job

    Call the secret URL when the job succeeds, or the same URL with /fail appended when it does not.

  3. 03

    Crontap watches the clock

    A check runs every minute. Past the period, the heartbeat is late. Past the grace window, it is down and alerts go out.

  4. 04

    Recovery and history

    The next good ping restores the heartbeat and sends a recovery notice. Ninety days of events feed a reliability percentage.

Specifics

What you get

  • A secret ping URL per heartbeat: call it on success, append /fail to report failure
  • Accepts GET, HEAD and POST, so curl, a browser or any language works
  • Attach a short message to any ping in the query string or request body
  • Period plus grace: grace defaults to 20% of the period, with a five minute minimum
  • Four visible states: pending, up, late and down. Late is a warning, not a page.
  • Alerts for a missed ping, an explicit failure and a recovery, by email and an optional JSON webhook
  • Rotate the secret URL without losing the heartbeat's history
  • 90 days of raw events, permanent daily rollups, and a reliability percentage
  • Copy-paste setup snippets for crontab, GitHub Actions, Node, Python, Docker and more

Scope

Version one tracks completion, not duration. There is no /start endpoint and no run-time measurement. You set expectations as period plus grace, not as cron expressions.

Captured from the live site

What it looks like

Captured from crontap.com/heartbeats by this site's asset pipeline, with navigation and overlays removed.

The setup section of the Crontap heartbeats page, headed “Add it to your job in one line”. A code block shows a crontab wrapper script that curls the ping URL, or the /fail URL, based on the job's exit status.
Add it to your job in one linecrontap.com · captured 2026-09-08
Three cards on the Crontap heartbeats page headed “Which one do I need?”, comparing what schedules, uptime monitors and heartbeats each catch and when to use them.
Schedules, uptime or heartbeatscrontap.com · captured 2026-09-08

Straight from the source

The alert for the cron job that never ran.

Give every cron job a secret ping URL. Crontap detects misses within one minute after grace, then queues email and webhook notifications. /fail and 90-day history.

Read from crontap.com/heartbeats on 2026-09-08