All posts

April 4, 2026 7 min read

Healthchecks.io vs Crontify: which cron monitor catches more failures?

Healthchecks.io is excellent at detecting missed runs. But when your job exits 0 and processes nothing, it stays silent. Here's how the two tools compare and when each one is the right choice.


Healthchecks.io is one of the most respected tools in the cron job monitoring space. It's open source, reliable, generously priced, and has earned genuine trust from developers over many years. If you're evaluating cron job monitoring tools, it will come up — and it should.

But there's a class of failure it wasn't designed to catch. Understanding that limitation is the fastest way to decide whether Healthchecks.io is the right tool for your situation, or whether you need something that goes further.


How Healthchecks.io works

Healthchecks.io uses the dead man's switch model. Each monitored job gets a unique ping URL. Your job sends an HTTP request to that URL when it completes. If the ping doesn't arrive within the expected window, Healthchecks.io sends an alert.

It also supports start pings — your job pings /start at the beginning and the success URL at the end. This enables hung job detection: if a start ping arrives but no completion ping follows within the grace time, the check transitions to a failed state and you get alerted.

This is the right model for monitoring whether your jobs are running. It's well-implemented, reliable, and requires almost no code changes to your existing jobs.


What Healthchecks.io doesn't do

Healthchecks.io cannot tell you whether your job did anything useful.

A sync job that processes zero records still completes and sends its ping. A backup job that creates an empty file still sends its ping. An email job that builds an empty recipient list and skips sending still sends its ping. In all of these cases, Healthchecks.io records the run as successful.

This is not a bug. It's a deliberate design: Healthchecks.io monitors execution, not outcomes. The tool does what it says on the tin. The problem is that execution and outcomes are not the same thing, and in production environments, the gap between them is where the most damaging failures hide.

Healthchecks.io does support a basic form of outcome monitoring via keyword matching — you can configure a check to look for specific strings like "SUCCESS" or "ERROR" in the ping body. But this is binary: a string either matches or it doesn't. It doesn't support numeric conditions (rows_processed < 100), threshold comparisons, or stacking multiple conditions per job.


How Crontify approaches the same problem

Crontify covers the same ground as Healthchecks.io — missed run detection, hung job detection, start/success/fail pings — and adds one capability that changes what monitoring can catch.

When your job calls success(), you attach a metadata object describing what the run actually did:

import { CrontifyMonitor } from '@crontify/sdk';

const monitor = new CrontifyMonitor({
  apiKey: process.env.CRONTIFY_API_KEY!,
  monitorId: 'your-monitor-id',
});

await monitor.success({
  meta: {
    rows_synced: result.count,
    api_calls_made: result.apiCalls,
    records_skipped: result.skipped,
  }
});

You then define alert rules against that data in the dashboard:

  • rows_synced eq 0 — alert when nothing was synced
  • api_calls_made eq 0 — alert when the upstream was never reached
  • records_skipped gt 500 — alert when too much was skipped

The run is still logged as a success. Your uptime history is untouched. But when a rule fires, you get an immediate notification to Slack, email, Discord, or a webhook — telling you that something upstream broke before your users find out.


Feature comparison

FeatureHealthchecks.ioCrontify
Missed run detection
Hung job detection
Alert on job output valuesLimited (keyword match only)✓ (numeric rules: eq, lt, gt, ne)
Log attachment on failure✓ (up to 10,000 chars)
Duration anomaly detection
Overlap detection
Recovery alerts
TypeScript/Node.js SDK✗ (third-party only)✓ (zero dependencies)
Self-hostable✓ (open source)
Free tier monitors205
Paid entry price~$20/month$9/month
Email alerts
Slack alerts✓ (Standard plan+)
Discord alerts✓ (Standard plan+)
Webhook alerts✓ (Pro plan+)

Pricing

Healthchecks.io offers a free tier for up to 20 monitors — the most generous free tier in the category. Paid plans start at around $20/month for more monitors and team features.

Crontify offers a free tier for 5 monitors with no credit card required. Paid plans start at $9/month (Standard: 50 monitors), $29/month (Pro: 150 monitors), and $79/month (Premium: unlimited monitors).


Which one to choose

Choose Healthchecks.io if:

  • You need to monitor more than 5 jobs for free and don't want to pay yet
  • You want a self-hosted option under your own infrastructure
  • Your monitoring needs are purely about whether jobs run on schedule — exit codes and heartbeat timing are sufficient

Choose Crontify if:

  • Your jobs process data and a successful exit code isn't enough — you need to know whether records were actually synced, emails actually sent, files actually created
  • You want to attach log output to failed runs and have it delivered directly in your Slack alert without logging into a separate system
  • You've been burned by a job that exited 0 but did nothing useful for days before anyone noticed
  • You want duration anomaly alerts when a job starts running significantly slower than its baseline

The honest summary

Healthchecks.io is excellent software. If it covers your needs, use it — it's well-built and well-maintained with a track record that speaks for itself.

The question is whether your monitoring needs end at "did the job run?" If they do, Healthchecks.io is likely the simpler. If you need visibility into what the job actually accomplished, you need a tool that was designed for that — and that's where Crontify comes in.

Crontify is free to get started — 5 monitors, no credit card required.


Start monitoring your scheduled jobs

Free plan includes 5 monitors. No credit card required. Up and running in under 5 minutes.

Get started free →