Get alerted when a scheduled job doesn't run

For n8n, Make, Zapier, GitHub Actions, and plain cron — the runs that fail by not happening.

Most monitoring tells you when something breaks loudly. Scheduled jobs have a nastier failure mode: they break quietly. The trigger stops firing, a reconnected account revokes its token, the workflow gets paused, the cron line has a typo, the server is asleep at 3am — and there's no error, no page, no email. The automation simply doesn't run, and you find out days later when the report was never sent or the backup was never taken.

Cronpulse is a dead-man's-switch for scheduled work. Your job makes one HTTP request each time it runs successfully. Cronpulse expects that ping on the schedule you set. If it doesn't arrive in time, we assume the job didn't run and alert you on Discord, Slack, or a webhook — then tell you again when it recovers. You monitor the absence of a run, which is the thing that actually hurts.

The idea in one line

Add a final step to the workflow that calls your unique ping URL. That's the whole integration.

https://cronpulse.cronpulse.workers.dev/ping/YOUR-KEY

n8n

Add an HTTP Request node as the last node of the workflow (method GET, the URL above). Because it only runs when every prior node succeeded, a missing ping means the workflow errored, was deactivated, or the trigger stopped firing — all of which Cronpulse catches.

Node: HTTP Request
Method: GET
URL: https://cronpulse.cronpulse.workers.dev/ping/YOUR-KEY

Want failures paged instantly instead of waiting for the timeout? Point the workflow's Error Trigger at .../ping/YOUR-KEY/fail.

Make (Integromat)

Add an HTTP > Make a request module at the end of the scenario, GET the ping URL. Optionally route the scenario's error handler to .../fail so a broken run alerts immediately.

Zapier

Add a Webhooks by Zapier → GET action as the final step of the Zap, using the ping URL. If the Zap is turned off, hits its task limit, or an app disconnects, the ping stops and you get alerted.

Plain cron

Chain the ping after your command so it only fires on success (exit 0):

0 3 * * *  /usr/local/bin/backup.sh && curl -fsS -m 10 https://cronpulse.cronpulse.workers.dev/ping/YOUR-KEY

Or wrap it to also signal duration and explicit failures:

BASE=https://cronpulse.cronpulse.workers.dev/ping/YOUR-KEY
curl -fsS -m 10 "$BASE/start"
if /usr/local/bin/backup.sh; then curl -fsS -m 10 "$BASE"; else curl -fsS -m 10 "$BASE/fail"; fi

GitHub Actions & other CI

Add a final step that curls the ping URL. A scheduled workflow that stops running (disabled after repo inactivity, a broken YAML, a runner outage) goes silent — Cronpulse notices the gap.

- name: Heartbeat
  run: curl -fsS -m 10 https://cronpulse.cronpulse.workers.dev/ping/YOUR-KEY

Why not just an uptime monitor?

An uptime check pings a server and confirms a port answers. It cannot see that your 3am Zap didn't fire or that your nightly backup was skipped — there's nothing listening to poll. Cronpulse flips it: the job proves it ran, so a skipped run, a paused workflow, or an expired credential all surface the same way — a heartbeat that never arrived.

Monitor a scheduled job now — free, no signup to try:

Create a check →

Free plan: up to 50 checks, checked every minute, unlimited alerts. No credit card.

Monitoring AI agents & bots · Cron expression tester · About Cronpulse · Home · Live status