Use case

Pair external cron with dead-man checks so silent failures are obvious.

Cron that does not fire is worse than cron that fails loudly. Crontap fires on time, and when paired with a dead-man check (Healthchecks.io, UptimeRobot, your own /health endpoint), the silence itself becomes an alert.

Get started

Free plan · no credit card required

The problem

Why this is painful without the right tool

  • A cron stopped firing two weeks ago and nobody noticed until a customer did.
  • wp-cron lives on visitor traffic, so the thing meant to detect the outage is the same thing that is broken.
  • Your schedule's dashboard is in one tool and your alerting is in another, and the two do not talk.
  • Pinging Healthchecks.io manually means you remember to do it; automation means you do not have to.

The fix

How Crontap solves it

Crontap is the clock; Healthchecks (or your own dead-man) is the ear. Set Crontap to hit your app on a schedule and also hit https://hc-ping.com/{uuid} as a still-running heartbeat. If the heartbeat stops because Crontap pauses, the network breaks, or the run silently crashes, Healthchecks pages you before anyone else notices.

cron expression
*/5 * * * *
Ping the dead-man every 5 minutes. Healthchecks alerts if 6 minutes pass without a ping.

The two-schedule pattern is the cleanest. One schedule does the real work (call your /sync, /billing, /import endpoint on a normal cadence). A second schedule fires every 5 to 10 minutes and just hits the Healthchecks ping URL. As long as both keep firing, the dead-man stays green; if either stops, the alert lands in your inbox or chat channel.

One concrete pattern from the dataset: a real Crontap customer running a 6-hourly heartbeat against hc-ping.com/{uuid} next to a longer-running fulfilment job, so the dead-man is independent of the work. When the work job paused after a deploy, the heartbeat caught it within 10 minutes instead of waiting for the daily report run to silently produce nothing.

For tighter coupling on jobs that reliably return 200, you can skip the second schedule and have Crontap's success integration ping Healthchecks after the real run completes. The failure integration can do the same for the failure ping URL. That keeps you to one schedule per job at the cost of one shared failure mode (if Crontap itself goes down, neither the work nor the heartbeat fires; the second-schedule pattern preserves the independence).

Failure surface is the same as every other Crontap schedule: email / webhook (Slack / Discord / Telegram), with the run's status code, duration, and response body in the alert payload.

FAQ

Common questions

Do I need Healthchecks.io specifically?
No. Any dead-man service works (UptimeRobot, Cronitor, Better Stack heartbeats, your own /healthcheck endpoint). Crontap can also forward success and failure webhooks to your own endpoint, so a self-hosted dead-man is a one-line config.
What happens if Crontap itself is down?
Healthchecks notices the missing heartbeat and pages you. That is the whole point of pairing a scheduler with an independent dead-man: the alerter and the alerted live in different systems, so the failure of one does not silence the other.
Can one schedule do both the work and the heartbeat?
Usually, yes. If your app reliably completes and returns 200, Crontap's success integration can hit Healthchecks after the real run. For extra independence, run a second schedule that only pings the dead-man so the heartbeat survives a crash in the work job.
What's the shortest interval Crontap supports?
Every 1 minute on paid plans. Free tier available for slower cadences. For a heartbeat you usually want a comfortable margin (a 5-minute heartbeat with a 6-minute Healthchecks grace period is the standard pairing).

Ready to fix it?

Point Crontap at any URL. Pick any cron. Done.

WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.

Free forever tier ・ No credit card required

GET

/wp-cron.php?doing_wp_cron=1

Running
Your next schedule

Schedule

"every 5 minutes"

Next

in 23s