Best cron job monitoring tools in 2026
Nine ways to get alerted when a scheduled job stops running, compared on free tier, schedule handling, failure reporting and price. Every vendor figure comes from that vendor’s own pricing or docs page, checked October 17, 2026.
If you only need to know that your cron jobs ran, try Healthchecks.io first. Its hosted free plan covers 20 jobs, it reads cron expressions with a timezone and a grace time, it takes start and fail signals and captured output, and the code is open source if you would rather host it yourself. Choose Cronitor when you want deeper job telemetry: run durations, custom metrics and assertions on them. Site Qwality fits when you want cron monitors in the same account as uptime checks, status pages and incidents: 25 free monitors, unlimited with any paid plan. It is the simpler tool. It watches an interval and a ping, and it has no exit codes, run times, cron expressions or grace period setting.
Last verified against each vendor's own pages. See sources.
At a glance
- Free tiers differ a lot. Site Qwality 25 monitors, Healthchecks.io 20 jobs, Better Stack 10 (shared with uptime monitors), Cronitor 5, Dead Man’s Snitch 1, Sentry 1. UptimeRobot’s free plan has no heartbeat monitors.
- Schedule handling is the main split. Healthchecks.io, Cronitor and Sentry Crons read cron expressions and a timezone. Site Qwality, Better Stack, UptimeRobot, StatusCake, Dead Man’s Snitch and Uptime Kuma work from a fixed interval.
- Start signals and run times are less common. Healthchecks.io, Cronitor and Sentry Crons document them. We did not find a start signal in the docs of the other tools we checked.
- Self-hosting: Healthchecks.io (BSD 3-clause) and Uptime Kuma (MIT) are open source. Dead Man’s Snitch offers on-premise hosting on request.
- Price at 50 monitors where a list price is stated: $19 to $105 a month for the hosted services, and unlimited cron monitors come with any Site Qwality paid pack (the smallest is $2 a month). The table notes show the arithmetic.
Hosted heartbeat and cron monitors compared
| Site Qwality | Healthchecks.io | Cronitor | Better Stack | Dead Man's Snitch | |
|---|---|---|---|---|---|
| Free monitors | 25 (unlimited with any paid plan) | 20 jobs | 5 monitors | 10, shared with uptime monitors | 1 Snitch, with hourly or slower intervals |
| Timing model | Fixed interval, 1 minute to 24 hours. No grace period setting. Failure shows 1 to 2 intervals after the last ping | Period plus grace time, or a cron or systemd OnCalendar schedule plus grace time | Cron, interval or time-of-day schedule, with grace seconds and tolerances | Period (minimum 30 seconds) plus a configurable grace period | Fixed interval windows from 1 minute to monthly, checked at the end of each window |
| Failure signal and exit codes | None. Any request counts as a check-in | Append /fail or an exit status (0 to 255) to the ping URL | state=fail, plus a status_code parameter for the exit code | Append /fail or the exit code. Output can go in the POST body | Exit status with ?s=$?, on the $49 Surveillance Van plan |
| Start ping and run duration | – | Yes. /start measures run time and alerts if no finish arrives within the grace time | Yes. Run and complete events, with duration assertions | Not documented | Not documented |
| Output or log capture | No. Request headers and source IP are recorded | First 100 kB of the POST body, per ping | A message of up to 2,000 characters per event | Output in the POST body of a failure report | A short message in the request body or an m= parameter |
| Cron expression awareness | No, interval only | Yes (cron and OnCalendar) | Yes | No, a period in seconds | No, fixed intervals |
| Timezone handling | Not applicable (interval only) | Server time zone set per check, for cron schedules | Per-monitor timezone. A cron schedule defaults to the account timezone (UTC unless changed) | Optional IANA timezone for DST-aware detection, for periods of 1 hour or more | UTC windows |
| Alert channels | Email, SMS, Slack, webhooks, PagerDuty | Email, Slack, Teams, Discord, Telegram, PagerDuty, Opsgenie, webhooks, SMS, phone call and more (27 listed) | Email and chat on the free plan. SMS and on-call tools (PagerDuty, Opsgenie, Splunk On-Call) on Business | Email and Slack on the free plan. The heartbeat add-on lists phone, SMS, push, Teams and webhooks | Email. Integrations (Slack, Teams, PagerDuty, Opsgenie, webhooks) are listed from the $19 plan |
| Paid price at 50 monitors | From $2 a month with any paid pack (see note) | $20 a month (Business, 100 jobs), $16 a month billed annually | $105 a month (50 x $2 + 1 user at $5) | $80 a month (10 included, then 4 x $20) | $19 a month (Private Eye, 100 Snitches) |
| Self-host option | – | Yes, open source (BSD 3-clause) | Not documented | Not documented | On-premise on request |
| API | REST API: create, list, update, delete, ping history | Management API v3 and a ping API | Monitor API and Telemetry API. Unlimited requests on Business | REST API: create, list, update, delete heartbeats | API listed on every paid plan |
List prices in USD on October 17, 2026, monthly billing unless stated. Cronitor Business is $2 per monitor plus $5 per user, shown for one user. Better Stack sells heartbeats as 10 included plus $20 per extra 10, which assumes the included 10 are not already used by uptime monitors (its free plan lists “10 monitors & heartbeats”); billed annually the extra 10 show as $17. Site Qwality cron monitors are unlimited with any paid plan, and the cheapest pack on our pricing page is 1K session replays at $2 a month ($20 a year), so $2 is a price floor, not a suggestion to buy replays. “Not documented” means we did not find it on the vendor pages listed under Sources, not that it is absent. UptimeRobot, StatusCake, Sentry and Uptime Kuma are in the second table below.
How to choose a cron job monitoring tool
Start from what a silent failure would cost you, then match the signal you need.
- You only need to know the job ran. Any tool here works. Healthchecks.io (20 free jobs, self-hostable) and Site Qwality (25 free monitors, interval based) both fit. Pick by what else you want in the same account.
- Your schedules are not simple intervals. For a weekday-only job, an interval monitor either fires every weekend or needs a 3-day interval and notices a weekday failure late. Choose a tool that reads a cron expression and a timezone: Healthchecks.io, Cronitor or Sentry Crons.
- You want to know a run failed, hung or got slow. You need start and failure signals. Healthchecks.io, Cronitor and Sentry Crons document them. Better Stack accepts a failure signal with the exit code, and Dead Man’s Snitch accepts an exit status on its $49 plan.
- You already pay for Sentry or Better Stack. Check their included cron monitors first. Sentry includes 1 and charges $0.78 for each additional monitor on its Team plan. Better Stack includes 10 heartbeats.
- You want to run it yourself. Healthchecks.io has cron schedules, start and fail signals and logs. Uptime Kuma is interval only, but its push monitors sit next to its other check types.
- You want uptime checks, a status page and incident management in one account. Site Qwality and Better Stack both cover that. Compare the two on the Better Stack comparison.
Dead man’s switch monitoring for cron jobs: what to monitor
A dead man’s switch inverts normal monitoring. The job reports in, and silence is the alert. That catches what logs and error mails cannot, because a job that never started writes nothing. The tools differ in how much they can tell you, and there are three levels.
- Heartbeat (interval). You say how often to expect a ping. It catches a dead cron daemon, a deleted crontab entry, a stopped scheduler or a host that is down. It cannot tell a good run from a bad one if the job pings anyway, and it notices a missed run only after the interval, plus grace, has passed.
- Schedule-aware. You give a cron expression, a timezone and a grace time. The monitor knows when each run is due, so it alerts at the due time plus grace instead of a whole interval later, and it handles schedules an interval cannot express. Check an expression with the free cron expression builder, which lists the next 10 run times, before you paste it into any monitor.
- Start, finish and fail signals. The job pings when it starts and when it ends, and says whether it succeeded (an exit status or a /fail ping). The monitor can then alert at once on a failure, on a run that started and never finished, and on a run far longer than usual.
- Site Qwality’s cron job monitoring covers the first level only: a unique ping URL per monitor, an interval, and alerts when the ping stops.
Silent failure modes, and what catches them
Most missed alerts come from how the job is wired up, not from the monitor.
- Pinging on failure.
backup.sh; curl "$PING_URL"pings whether or not the script worked. Use&&, or report the exit status (curl "$PING_URL/$?"on Healthchecks.io), so a failure is not recorded as success. - Pipes hide errors. In bash a pipeline returns the status of its last command, so
pg_dump | gzip > db.gzsucceeds when pg_dump fails. Addset -o pipefail. - Pinging at the start. A start-only ping hides a crash. Ping after the work succeeds, or use a tool with start and finish signals.
- Exit 0 with no work done. An export that wrote zero rows still exits 0, and a heartbeat cannot see it. Send a count (Cronitor accepts custom metrics) or have the script skip the ping when the result is empty.
- Hangs and overlaps. A job blocked on a lock never pings, but an interval monitor notices only after a full interval. A start signal with a maximum runtime (grace time on Healthchecks.io, max runtime on Sentry) catches it sooner. Use
flockso a slow run does not overlap the next one. - The ping itself. Use
curl -fsS -m 10 --retry 3:-fmakes HTTP errors fail and-mstops a hung request from hanging the job. Follow it with|| trueso a monitoring outage does not fail the job. Treat the ping URL as a secret, because anyone who has it can silence the monitor (the Healthchecks.io docs and ours both say so). - Time zones and daylight saving. The Healthchecks.io docs note that the cron daemon typically uses the system’s local time. What happens in the skipped or repeated hour depends on the cron implementation, so a job at 02:30 local time can run late, not at all or twice on those two nights. Run servers in UTC, or give a schedule-aware monitor the server’s timezone.
- The first ping. Tools differ before a new monitor has received a ping. Healthchecks.io shows it as New, Better Stack keeps it Pending until the first request, and StatusCake does not start checking until the first push. Site Qwality marks a cron monitor failed at its next evaluation if no ping has ever arrived. Send one manual ping, then skip one run on purpose to prove the alert reaches a person.
Datadog and other general monitoring platforms
Datadog is not in the tables because it has no cron monitor to compare. Its monitor types include Metric, Service Check and Synthetic Monitoring but no cron or heartbeat type. The documented way to alert on silence is a metric monitor with Notify if data is missing enabled (on_missing_data set to show_and_notify_no_data in the API), fed by a metric your job emits on every run. You build the emission, the schedule and the grace window yourself, which makes sense if Datadog already runs your alerting and is more setup than a ping URL if it does not.
When another tool is the better pick
Site Qwality’s cron monitoring is deliberately simple. These are the cases where we would send you elsewhere.
- You need cron-expression schedules, a timezone and a grace time. Healthchecks.io, Cronitor and Sentry Crons have them. Site Qwality works from an interval, has no grace period setting and detects a miss between one and two intervals after the last ping (our grace period notes).
- You need exit codes, run times or captured output for each run. Healthchecks.io and Cronitor record them. Site Qwality records that a request arrived, with its headers and source IP, and ignores the query string and body.
- You want to self-host. Healthchecks.io and Uptime Kuma are open source. Site Qwality is hosted only.
- You want a wide choice of alert channels. Healthchecks.io lists 27 integrations. Site Qwality sends cron alerts to email, SMS, Slack, webhooks and PagerDuty. Discord, Microsoft Teams, Google Chat, Mattermost, Opsgenie, Pushover and Pushbullet channels are not supported for cron alerts today.
- Procurement needs an audit report or a regional deployment. Site Qwality has no SOC 2 or ISO 27001 report and no EU-hosted deployment, and the platform runs in one AWS region (us-east-1).
Cron checks inside broader tools
Uptime monitoring, error tracking and self-hosted tools that include a heartbeat or cron feature, in the same rows as the first table.
| Site Qwality | UptimeRobot | StatusCake | Sentry Crons | Uptime Kuma | |
|---|---|---|---|---|---|
| Free monitors | 25 (unlimited with any paid plan) | None. Heartbeat monitoring is not on the free plan | Push monitoring is included on free plans. The limit is not stated (the free plan has 10 uptime tests) | 1 cron monitor | Self-hosted, no hosted quota |
| Timing model | Fixed interval, 1 minute to 24 hours. No grace period setting. Failure shows 1 to 2 intervals after the last ping | Interval plus a grace period | Push period in seconds. Down if no push arrives in the period | Crontab or interval schedule, with a check-in margin (grace) and a max runtime | Heartbeat interval. Down if no push arrives within it, with configurable retries |
| Failure signal and exit codes | None. Any request counts as a check-in | Not documented | Not documented | An ok or error status on each check-in | A status=down query parameter |
| Start ping and run duration | – | Not documented | Not documented. An optional time value (ms) is charted | Yes. in_progress then ok, with a runtime chart | No start signal. An optional ping value (ms) is recorded |
| Output or log capture | No. Request headers and source IP are recorded | Not documented | Not documented | Not documented for check-ins. Errors from an instrumented job appear as issues | A short msg parameter on each push |
| Cron expression awareness | No, interval only | No, an interval | No, a push period | Yes, or an interval | No, an interval |
| Timezone handling | Not applicable (interval only) | Not applicable (interval only) | Not applicable (push period) | A timezone field on the monitor | Not applicable (interval only) |
| Alert channels | Email, SMS, Slack, webhooks, PagerDuty | Email, SMS, voice call. Slack, Telegram, Teams from Solo. Webhooks and PagerDuty from Team | Email, SMS and 15+ integrations | Email on the free plan. Integrations from the Team plan | 90+ notification services |
| Paid price at 50 monitors | From $2 a month with any paid pack (see note) | $28 a month (Solo, 50 monitors), $24 a month billed annually | Not stated | $64.22 a month (Team $26 + 49 x $0.78) | $0 for the software, plus your own server |
| Self-host option | – | Not documented | Not documented | Self-hosted Sentry exists. Its docs page does not mention Crons | Yes, open source (MIT) |
| API | REST API: create, list, update, delete, ping history | Included on every plan, free too | REST API v1 | HTTP check-in API, and a monitor can be created through a check-in | Push endpoint, badges, Prometheus metrics and status page data. Monitor management over Socket.io is internal and unsupported |
List prices in USD on October 17, 2026. UptimeRobot’s 50 monitors are shared by every monitor type, and heartbeat monitoring starts at its Solo plan. Sentry’s $26 a month is its Team plan, which also carries its error and tracing quotas, with 1 cron monitor included and $0.78 for each additional one. StatusCake does not say whether push tests count toward its uptime-test limit, so we show no price. “Not documented” means we did not find it on the vendor pages listed under Sources.
FAQ
It depends on what you need to know. For a free default with the most documented features, Healthchecks.io: 20 free jobs, cron schedules with a timezone, start and fail signals, logs and self-hosting. For deeper telemetry (durations, custom metrics, assertions), Cronitor. For cron monitors next to uptime checks, status pages and incidents, Site Qwality or Better Stack. The tables above compare nine tools on the same rows.
Yes, several. Hosted free tiers on October 17, 2026: Site Qwality 25 monitors, Healthchecks.io 20 jobs, Better Stack 10 (shared with uptime monitors), Cronitor 5, Dead Man’s Snitch 1, Sentry 1. UptimeRobot’s free plan does not include heartbeat monitors. StatusCake says push monitoring is included on free plans but not whether push tests count toward its 10 uptime tests. Healthchecks.io and Uptime Kuma cost nothing if you host them yourself.
Healthchecks.io is open source, so the closest alternative to the hosted service is running it yourself (its self-hosting docs). Among hosted tools, Cronitor and Sentry Crons also read cron expressions and timezones and take start signals. Better Stack, Dead Man’s Snitch and Site Qwality are interval based. Choose Site Qwality if you want 25 free cron monitors in the same account as uptime checks and a status page.
A check that alerts when it stops hearing from something. A cron job requests a unique URL each time it finishes, and if the request does not arrive when expected the monitor raises an alert. It suits jobs that produce no traffic of their own, because a job that never starts leaves no logs and no errors.
Create a monitor, copy its ping URL and add a request to the end of the job, after it succeeds: backup.sh && curl -fsS -m 10 --retry 3 "$PING_URL". Set the expected interval or schedule and a grace time, then skip one run on purpose to confirm the alert reaches someone. Keep the ping URL secret. Check the cron expression itself with the free cron expression builder.
A heartbeat monitor expects a ping at least every N minutes. A schedule-aware monitor takes the cron expression and timezone and knows when each run is due, so it can alert at the due time plus a grace time and can handle schedules like weekdays only. Adding start and fail signals tells the monitor whether a run succeeded, hung or ran long, which neither of the first two can see on its own.
Not with a dedicated monitor. Datadog’s monitor types have no cron or heartbeat type. The documented pattern is a metric monitor with Notify if data is missing enabled, fed by a metric your job emits on every run (Datadog docs).
No. A Site Qwality cron monitor expects a request at least once per interval and treats any request as a successful check-in. It does not read an exit code, a start signal, a duration or a request body, and it has no cron expression, timezone or grace period setting. A missed ping is detected between one and two intervals after the last one. For per-run status or timing, use Healthchecks.io or Cronitor.
Sources
Every competitor figure on this page comes from the vendor's own pages.
- Healthchecks.io pricing checked October 17, 2026
- Healthchecks.io home page (integrations list) checked October 17, 2026
- Healthchecks.io docs: introduction, ping URLs and grace time checked October 17, 2026
- Healthchecks.io docs: configuring checks checked October 17, 2026
- Healthchecks.io docs: measuring script run time checked October 17, 2026
- Healthchecks.io docs: signaling failures checked October 17, 2026
- Healthchecks.io docs: attaching logs checked October 17, 2026
- Healthchecks.io docs: self-hosted checked October 17, 2026
- Healthchecks.io docs: Management API v3 checked October 17, 2026
- Cronitor pricing checked October 17, 2026
- Cronitor docs: cron job monitoring checked October 17, 2026
- Cronitor docs: heartbeat monitoring checked October 17, 2026
- Cronitor docs: Telemetry API checked October 17, 2026
- Better Stack pricing checked October 17, 2026
- Better Stack docs: cron and heartbeat monitor checked October 17, 2026
- Better Stack docs: create a heartbeat (API) checked October 17, 2026
- Dead Man's Snitch plans checked October 17, 2026
- Dead Man's Snitch FAQ checked October 17, 2026
- UptimeRobot pricing checked October 17, 2026
- UptimeRobot cron job monitoring checked October 17, 2026
- UptimeRobot help center: create your first monitor checked October 17, 2026
- StatusCake pricing checked October 17, 2026
- StatusCake knowledge base: what is push monitoring checked October 17, 2026
- StatusCake API documentation checked October 17, 2026
- Sentry pricing checked October 17, 2026
- Sentry docs: set up cron monitoring over HTTP checked October 17, 2026
- Sentry docs: job monitoring checked October 17, 2026
- Sentry docs: manage your cron and uptime monitors (billing) checked October 17, 2026
- Sentry docs: self-hosted Sentry checked October 17, 2026
- Uptime Kuma repository and README checked October 17, 2026
- Uptime Kuma LICENSE (MIT) checked October 17, 2026
- Uptime Kuma source: push endpoint (api-router.js) checked October 17, 2026
- Uptime Kuma source: push monitor check (monitor.js) checked October 17, 2026
- Uptime Kuma wiki: Internal API checked October 17, 2026
- Datadog docs: monitor types checked October 17, 2026
- Datadog docs: on missing data configuration checked October 17, 2026
- Site Qwality pricing checked October 17, 2026
- Site Qwality docs: cron checks overview checked October 17, 2026
- Site Qwality docs: cron check reference checked October 17, 2026
- Site Qwality docs: grace period notes checked October 17, 2026
- Site Qwality docs: sending heartbeats reliably checked October 17, 2026
Other comparisons
Start free. No credit card.
Uptime, cron, synthetic, logs, RUM, incidents, and status pages. Free tier on every product.