All posts

April 4, 2026 7 min read

Dead Man's Snitch vs Healthchecks.io vs Crontify

Three focused cron job monitoring tools, three different philosophies. Here's an honest comparison of what each one catches, what each one misses, and which one fits your production needs.


Dead Man's Snitch, Healthchecks.io, and Crontify are all focused cron job monitoring tools — as opposed to broader observability platforms like Datadog or Cronitor, which bundle cron monitoring alongside uptime checks, real user monitoring, and status pages.

Focused tools are usually the right choice when your monitoring need is specific: you run scheduled jobs, you want to know when they fail, and you don't want to pay for a platform that does fifteen other things.

But "focused" doesn't mean identical. These three tools have meaningfully different approaches to what counts as a failure and what information you get when one occurs. Here's an honest comparison.


Dead Man's Snitch: maximally simple

Dead Man's Snitch is the most stripped-back monitoring tool in this comparison. The concept is direct: each job gets a unique URL. When the job completes, it requests that URL. If Dead Man's Snitch doesn't receive a request within the expected interval, it alerts you.

Setup is one line:

run_backup.sh && curl https://nosnch.in/your-snitch-id

That's the entire integration. No SDK, no config file, no ping body — just a curl at the end of your script.

What it catches: missed runs. If your job doesn't run, the URL doesn't get requested, and you get alerted. This is the core use case and it works reliably.

What it doesn't catch:

  • Hung jobs (without paying): the free tier doesn't support start pings, so there's no way to detect a job that started but never finished. You'd need a paid plan for this.
  • Failed jobs: the && operator means curl only fires on a clean exit — so you'd get alerted if the job fails (no ping arrives), but you get no information about what went wrong.
  • Silent failures: a job that exits 0 but processes nothing looks identical to a successful run.
  • Log output: there's no mechanism to attach failure context to an alert.

Dead Man's Snitch is the right choice when simplicity is the overriding priority and your jobs either fully succeed or fully fail — no middle ground.


Healthchecks.io: reliable and open source

Healthchecks.io takes the dead man's switch model further. It supports start pings, which enables hung job detection. It understands cron expressions, which means it knows exactly when each run is expected rather than just counting intervals. And it's open source — you can self-host it if keeping monitoring infrastructure under your own control matters.

Setup is still straightforward:

# Notify start
curl -fsS -m 10 --retry 5 https://hc-ping.com/your-uuid/start
# Your job
run_backup.sh
# Notify completion
curl -fsS -m 10 --retry 5 https://hc-ping.com/your-uuid

What it catches: missed runs, hung jobs (via start/finish pings), and — with its keyword matching feature — basic outcome detection based on strings in the ping body.

The keyword matching is worth understanding in more detail because it's both a strength and a limitation. You can configure a check to look for "SUCCESS" or "ERROR" in the ping body, and Healthchecks.io will interpret the ping accordingly. This lets you signal failure from inside your job without relying purely on exit codes.

What it can't do: numeric conditions. You cannot define a rule that says "alert when rows_processed is less than 100" or "alert when api_calls_made equals zero." The outcome detection is binary — a string matches or it doesn't.

What it doesn't catch:

  • Numeric silent failures (a job that synced 0 records, sent 0 emails, processed 0 items)
  • Log output from failed runs — you get alerted but not why
  • Duration anomalies — no automatic flagging when a job takes significantly longer than usual

Pricing: Free for up to 20 monitors — the most generous free tier in this comparison. Paid plans start around $20/month. Self-hostable under a BSD license.


Crontify: adds output-aware alerting

Crontify covers the same ground as Healthchecks.io — missed runs, hung jobs, cron expression parsing, recovery alerts — and adds two capabilities the other tools don't have.

Alert rules on job output metadata. When your job calls success(), you attach a metadata object:

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

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

await monitor.wrap(async () => {
  const result = await syncRecords();
  return {
    meta: {
      rows_synced: result.count,
      duration_ms: result.durationMs,
    }
  };
});

In the dashboard, you define rules:

  • rows_synced eq 0 → fire alert
  • duration_ms gt 300000 → fire alert (job took more than 5 minutes)

The run is still logged as a success. Your uptime history is accurate. But when a rule fires, you get an immediate notification — before a customer notices that their data hasn't updated, before anyone spots the stale dashboard, before the silence becomes a visible incident.

Log attachment on failure. When a job fails, you attach the error output directly:

await monitor.fail({ message: err.message, log: err.stack });

Up to 10,000 characters, delivered inline in the Slack or email alert. The first 500 characters appear directly in the notification — which means you wake up, see the alert, read the first few lines of the stack trace, and know what broke before you've opened a laptop.

Crontify also includes duration anomaly detection — automatically flagging runs that took significantly longer than their recent baseline — and overlap detection for jobs that start before the previous instance has finished.

Pricing: Free for 5 monitors, no credit card required. $9/month (Standard: 50 monitors, Slack, Discord), $29/month (Pro: 150 monitors, webhooks), $79/month (Premium: unlimited monitors).


Side-by-side comparison

FeatureDead Man's SnitchHealthchecks.ioCrontify
Missed run detection
Hung job detectionPaid only
Cron expression parsing
Alert on job output valuesLimited (keyword match)✓ (numeric rules)
Log attachment on failure
Duration anomaly detection
Overlap detection
First-party SDK
Recovery alerts
Self-hostable
Free tier monitorsLimited205
Paid entry price~$19/month~$20/month$9/month

Which one is right for you

Dead Man's Snitch if you want the fastest possible setup and your only requirement is knowing whether a job ran at all. Best for simple scripts, side projects, or jobs with clear binary outcomes.

Healthchecks.io if you want a reliable, open source tool with a generous free tier and standard missed/hung job detection. Best for teams that want self-hosting as an option.

Crontify if your jobs process data and exit code 0 is not a sufficient signal. When a sync that processed zero records, a backup that created an empty file, or a notification job that dispatched to no recipients needs to fire an alert — that's the use case Crontify was built for.

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 →