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