Back to blog

Alternatives · May 12, 2026

Cronhub is shutting down: how to migrate (and what to pick next)

Topics:Monitoring
Cronhub stops billing on May 31, 2026 and deletes everything on June 30, 2026. Here is the migration guide for both halves of the product, plus an honest comparison of Crontap, Healthchecks.io, Cronitor, UptimeRobot, and Recuro.
crontap.com / blog
Cronhub announced its shutdown. Paid subscriptions are cancelled on May 31, 2026. The whole service (schedules, monitors, ping history) is deleted on June 30, 2026. That is 7 weeks. Here is the migration guide for both halves of Cronhub: the Scheduler (HTTP cron jobs) and the Monitoring (heartbeats and dead-man checks). Plus an honest look at Crontap, Healthchecks.io, Cronitor, UptimeRobot, and Recuro side by side.

You opened cronhub.io this morning to tweak a schedule and the homepage no longer pitched the product. It announced the shutdown. Paid subscriptions are cancelled on May 31, 2026. The whole service (your schedules, your monitors, your ping history, your alert routing) is terminated and deleted on June 30, 2026. From the date of this post, that is 3 weeks until your billing breaks and 7 weeks until the data is gone for good.

The shutdown banner is short and the timeline is fixed. The thing that is not in the banner is what to do next, and Cronhub had two products inside one URL: a Scheduler that fired HTTP cron jobs, and a Monitoring product that watched heartbeats from jobs you ran elsewhere. The migration looks different depending on which half you used, and most teams used both. This post is the migration guide for both, with Crontap as the obvious 1:1 replacement and an honest look at Healthchecks.io, Cronitor, UptimeRobot, and Recuro as alternatives worth considering.

What "shutting down" actually means on the Cronhub timeline

Three dates matter. Pin them somewhere visible.

  • Today (May 12, 2026). Cronhub still works. You can still log in, still trigger schedules, still see your ping history. Your existing payment method is still on file.
  • May 31, 2026. Paid subscriptions are cancelled. New billing stops. Per the shutdown banner on cronhub.io, the service continues to run after this date but you lose the paid features and any existing paid data, and you cannot upgrade, downgrade, or restart a paid subscription.
  • June 30, 2026. Full shutdown and data deletion. Schedules stop firing. Monitors stop receiving pings. The dashboard goes dark. Per the banner, this is the final cutoff, and Cronhub's data deletion happens on this date, so anything you have not exported by June 29 is gone.

Three weeks from this post your billing breaks. Seven weeks from this post your data is gone. If you only do one thing this afternoon, log in, screenshot or export every schedule and monitor configuration, and put the screenshots somewhere that is not Cronhub.

Two products inside Cronhub, two migration questions

Cronhub bundled two distinct products under one bill. Most teams used both, often without thinking of them as separate.

  • Scheduler. You gave Cronhub a URL, a cron expression, and a timezone. Cronhub fired the URL on cadence. The Scheduler had a 3-second timeout per request and no automatic retries on failure.
  • Monitoring. You gave Cronhub a heartbeat ping URL and an expected interval. Whatever fired your job (system cron, Kubernetes CronJobs, Vercel Cron, GitHub Actions, your own backend) hit that URL on success. Cronhub paged you when the ping did not arrive in the window. Alert channels: email, Slack, SMS, webhook, PagerDuty.

Both products have a clean migration path, but they migrate to different settings inside the destination tool. The next two sections handle each half. If you only used one half, jump to that one and skip the other.

If you used Cronhub for scheduling (HTTP cron jobs)

This is the half that fires URLs on a schedule. The replacement bar is straightforward: you need something that takes a URL, a cron expression, and a timezone, and fires the URL on cadence with logs you can read when something breaks.

What Cronhub Scheduler did, in one sentence

Cronhub Scheduler ran your schedule, made a single HTTP request to the URL you configured, gave that request 3 seconds to return, and recorded the result. No automatic retries on 5xx. No per-request timeout knob. One alert channel per schedule. Pricing started at $5/mo with no free tier and topped out around $49/mo.

Why Crontap is the natural drop-in

Crontap is the same shape with the gaps closed.

  • Per-schedule IANA timezone. Each schedule picks its own zone (Europe/London, America/New_York, Asia/Singapore). DST is handled per zone. Useful when the same account has UK, US, and Asia customers.
  • Automatic retries on 5xx. If your endpoint returns a 5xx, Crontap retries on a backoff and only alerts after the retry budget is exhausted. The 3-second-and-done shape from Cronhub is gone.
  • Longer timeout window per request. A real backend warming up after a cold start, or a Stripe reconciliation that touches a few hundred rows, no longer trips the 3-second wall.
  • Integrations panel. Email, Slack, Discord, Telegram, webhook on success and failure. One panel, one place, per schedule.
  • Free schedule included and flat-priced Pro. Free forever tier with 1 schedule at hourly cadence, no credit card. $3.25/mo billed annually for unlimited schedules at minute cadence. Cronhub had no free tier and started at $5/mo.

Click-by-click migration

The migration is the same six steps for every schedule. Open Cronhub in one tab, Crontap in another.

  1. Create a Crontap account. Sign up at crontap.com with your email. No credit card on the free tier.
  2. Click "New schedule" and paste the URL. Copy the URL field from your Cronhub schedule (https://yourapp.com/api/cron/daily-report or similar) and paste it into Crontap's URL field. Pick the same HTTP method Cronhub used (GET or POST).
  3. Paste the cron expression verbatim. Cronhub uses the standard 5-field cron expression (0 5 * * 1 for "Monday 05:00", */5 * * * * for "every 5 minutes"). Crontap accepts the same expressions unchanged. You can also type plain English ("every Monday at 5am") if you want to sanity-check the expression.
  4. Pick the IANA timezone. Cronhub stored a timezone per schedule. Pick the same one (Europe/London, America/Los_Angeles, UTC). Crontap is per-schedule, no DST math required.
  5. Re-add headers and any shared secret. If your Cronhub schedule had Authorization: Bearer <token> or X-Cron-Token: <secret>, copy the header name and value into Crontap's headers panel. POST schedules with a JSON body get the same treatment: paste the body unchanged.
  6. Press "Perform test". Crontap fires a real HTTP request once and shows you the status code, the response body, and the duration. A 200 means you are done. A 401 means the header did not match. A 5xx means the route itself failed (debug from your own logs, not Crontap's).
  7. Confirm the cadence preview. Crontap shows the next 5 fires inline. Eyeball them against what you expect. Saturday 05:00 because you typed 0 5 * * 6 instead of 0 5 * * 1? Easier to catch here than in production tomorrow morning.
  8. Repeat per schedule. If you have 10 schedules in Cronhub, the second through tenth take about 90 seconds each because steps 1 and 6 only happen once.

When all your schedules are mirrored, leave them running in parallel for a week. Once you see the same fire times in both Crontap and Cronhub, delete the Cronhub schedule. There is no "double-fire" risk if both fire the same URL because your endpoint is idempotent (and if it is not, it should be regardless of which scheduler is in front).

Migrate your Cronhub schedules in 60 seconds with Crontap. Free schedule included. No credit card. Schedule your first job →

If you used Cronhub for monitoring (heartbeats and dead-man checks)

This is the half that watched jobs you ran elsewhere. The shape is different from scheduling: nothing fires from Cronhub here, your job pings Cronhub on success and Cronhub pages you when the ping does not arrive in the window.

What Cronhub Monitoring did, in one sentence

You gave Cronhub a heartbeat URL (https://cronhub.io/start/<uuid> or /finish/<uuid>), an expected interval, and a grace period. Your job hit the URL on success. If no ping arrived inside interval + grace, Cronhub paged you via email, Slack, SMS, webhook, or PagerDuty.

Where this lives in Crontap

Crontap covers the monitoring half through two surfaces, depending on what you actually want to watch.

  • Uptime monitors for "this URL should answer 200 every minute". You give Crontap a URL, a probe interval, and an alert channel. Crontap probes the URL on cadence and pages you when it stops responding (or stops returning 200). Same shape as UptimeRobot, in the same dashboard as your schedules.
  • Scheduled-job alerts for "my own schedule should have fired by now and it did not". Every Crontap schedule has built-in failure alerts (4xx, 5xx, timeout, retry-budget exhaustion). For absence detection (the schedule got paused, the platform itself had an outage, or the run never happened), the canonical pattern is to pair Crontap with Healthchecks.io using their dead-man check. We wrote up the pattern in Pair Crontap with Healthchecks.io for end-to-end monitoring.

If your Cronhub monitor was checking "is the URL up", an Uptime monitor in Crontap is a 1:1 swap. If your Cronhub monitor was checking "did this external job fire on time", the cleanest replacement is the Crontap + Healthchecks pair, because each tool does the half it is best at.

Click-by-click migration for "is this URL up"

For monitors that watched a public URL, swap to a Crontap Uptime monitor.

  1. In Crontap, open the Uptime tab in the topbar. Same account that holds your schedules. Uptime ships in every account, including the free tier.
  2. Click "Add monitor" and paste the URL. The URL is whatever your Cronhub monitor was probing.
  3. Pick the probe interval. Free tier probes once a day; Pro probes every minute. Match the cadence Cronhub had if you can; downgrade if you must.
  4. Add the alert channel. Email at minimum. Webhook for Slack / Discord / Telegram / your own bot. Same panel as the schedules.
  5. Press "Run probe now". Crontap fires a real probe once and shows the status code, duration, and response. The bar chart starts populating from the next probe onwards.
  6. Tune the failure threshold. Default is 2 consecutive failed probes before flipping to "down" (so a single transient blip does not page you). Adjust on the monitor's detail page if your tolerance is different.
  7. Cancel the Cronhub monitor. Once Crontap shows green for a day, you can delete the Cronhub one. Do not delete it before the first day of healthy probes, just in case.

Click-by-click migration for "did this job fire" (heartbeats)

For monitors that received a heartbeat ping from a job you run elsewhere, the cleanest pattern is Crontap for the schedule and Healthchecks.io for the dead-man check. Healthchecks's free tier covers 20 checks (roughly the same shape as Cronhub Monitoring's small plan) and the integration list overlaps cleanly with what Cronhub offered (email, Slack, Discord, PagerDuty, OpsGenie, Telegram, webhook).

  1. Sign up at healthchecks.io. Free tier, no credit card.
  2. Click "Add Check". Name it after the job (weekly-sales-report, nightly-stripe-sync).
  3. Set the schedule. "Simple" mode for "every N minutes / hours / days plus a grace window". "Cron" mode if you want to paste the same 0 5 * * 1 expression and a timezone (Healthchecks supports both).
  4. Save and copy the ping URL. It looks like https://hc-ping.com/<uuid>. This is the new heartbeat URL.
  5. Update the job that pings. Wherever your job currently hits https://cronhub.io/finish/<uuid> (or /start, /fail), swap the URL for the Healthchecks one. Same shape (a single GET on success), same place in your code.
  6. Wire alerts. In the Healthchecks dashboard for the check, add the same alert channels Cronhub had. Email, Slack, PagerDuty, Discord, Telegram, OpsGenie are all in their integrations list.
  7. Wait one full interval. If the next ping arrives on time, the check goes green. If it does not, the alert fires and you know the wiring is correct.
  8. Cancel the Cronhub monitor. Same one-day rule as above: delete Cronhub's monitor only after you see Healthchecks green for a full window.

If your team prefers one dashboard over two, the alternative is the Uptime monitor approach above pointed at a public success-confirmation URL on your own backend. Less common but supported.

Move your monitoring to Crontap and Healthchecks in 60 seconds. Crontap free covers the schedule, Healthchecks free covers the dead-man check. Total bill on small setups: $0. Open Crontap →

Crontap vs the other Cronhub alternatives

The honest single table. Numbers from each vendor's pricing page as of May 2026; spot-check before you commit.

WhatCrontapHealthchecks.ioCronitorUptimeRobotRecuro
Free tier1 schedule at 1h20 checks (monitoring only)None (14-day trial)50 monitors at 5min (monitoring only)Limited free tier
Min interval (paid)1 minN/A (monitoring)1 min30 sec1 min
SchedulingYesNoYesNoYes
Monitoring (heartbeats / dead-man)Pair with HealthchecksYes (canonical)YesHeartbeats add-onYes
Auto retries on 5xxYesN/AYesN/AYes
Integrations panelEmail, Slack, Discord, Telegram, webhookEmail, Slack, Discord, PagerDuty, OpsGenie, Telegram, webhookEmail, Slack, PagerDuty, OpsGenie, Microsoft Teams, webhookEmail, SMS, Slack, Discord, webhookEmail, Slack, Discord, webhook
Self-hostNoYes (open source)NoNoNo
Paid entry$3.25/mo annual$5/mo$49/mo$7/moVariable

The shape of each tool, in one line each:

  • Crontap. Scheduling-first, with Uptime monitors built in. Pair with Healthchecks if you specifically need dead-man absence detection on schedules you do not own.
  • Healthchecks.io. Monitoring-first, open source, self-hostable. Does not schedule jobs. The canonical dead-man.
  • Cronitor. Both halves in one tool, priced as a monitoring product. Strong observability features, $49/mo entry is the gating factor for small teams.
  • UptimeRobot. Uptime-first, with a heartbeats feature. Generous free tier on monitoring, weaker scheduling story.
  • Recuro. The closest 1:1 Cronhub UI clone, both halves in one tool. Newer, smaller, has been actively marketing the "cronhub alternative" angle.

When one of the others is the better call

External cron and external monitoring are shapes, not religions. If your situation matches one of these, pick the listed tool over Crontap.

  • You want self-hosted dead-man monitoring inside your own VPC. Healthchecks.io is open source and self-hostable. Crontap and the rest are SaaS-only. Healthchecks wins.
  • You already pay for PagerDuty enterprise observability and want the alerting tier to live next to the monitoring. Cronitor is built around that workflow and the $49/mo entry stops mattering. Cronitor wins.
  • Your only need is "is this URL up" with no scheduling at all and you want a generous free tier. UptimeRobot's 50-monitor free tier at 5-minute cadence is hard to beat for hobby projects. UptimeRobot wins.
  • You want the closest visual swap from Cronhub's UI and you do not mind a smaller vendor. Recuro markets itself directly at this case. Recuro wins on familiarity.
  • Everything else (scheduling-first, with built-in uptime, with integration alerts, with a flat predictable bill). Crontap wins, and that is most of the Cronhub user base.

FAQ

When exactly do I lose access to my Cronhub data?

Per the shutdown banner on cronhub.io, paid subscriptions are cancelled on May 31, 2026 and full shutdown plus data deletion happens on June 30, 2026. From the date of this post, that is roughly 3 weeks and 7 weeks. Export anything you want to keep before June 29.

Does Cronhub export schedules to CSV or JSON?

There is no documented bulk export in the Cronhub dashboard. The migration path is per-schedule: open each schedule, copy the URL, cron expression, timezone, headers, and body into the new tool. For most teams this is a one-evening job. If you have 50+ schedules, take a screenshot of each detail page first so the source of truth is yours, not Cronhub's.

Can I keep my existing cron expressions verbatim in Crontap?

Yes. Cronhub uses the standard 5-field cron expression and Crontap accepts the same syntax unchanged. 0 5 * * 1, */5 * * * *, 15 9 * * 1-5, all the way up to mixed 1,15,30 * * * * style expressions, all paste in directly. Crontap also accepts plain English if you want to sanity-check the expression while you migrate.

Will Crontap match Cronhub's PagerDuty integration?

Crontap's built-in alert channels are email, Slack, Discord, Telegram, and webhook. PagerDuty has a webhook trigger (Custom Event Transformer or a generic webhook integration on a service), so the path is Crontap → webhook → PagerDuty rather than a first-class PagerDuty option. If first-class PagerDuty matters more than scheduling features, Cronitor is the closer match.

What does this cost compared to my current Cronhub plan?

Cronhub's pricing was $5/mo at the bottom and $49/mo at the top, with no free tier. Crontap includes a free schedule at hourly cadence and Pro is $3.25/mo billed annually for unlimited schedules at minute cadence. Most Cronhub Hobby and Standard customers fit on Crontap free or Pro for less than they paid Cronhub. If you also keep a Healthchecks free tier alongside Crontap for dead-man monitoring, the combined bill is $0 to $5/mo for most small setups, against Cronhub's $5 to $49.

Three weeks until your Cronhub billing breaks. Seven weeks until your data is deleted. Get your schedules into Crontap before the deadline forces a rushed migration. Schedule your first job →

References

Related on Crontap

From the blog

Read the blog

Guides, patterns and product updates.

Tutorials on scheduling API calls, webhooks and automations, plus deep dives into cron syntax, timezones and reliability.

Alternatives

Vercel Cron every minute: beating the Hobby hourly limit

Vercel Cron caps Hobby at hourly cadence and 5 jobs, and ties every change to a redeploy. Here is the external cron pattern teams use to ship per-minute schedules, per-IANA timezones, and one dashboard across projects without paying $20/mo per user for Pro.

Alternatives

Cloud Run cron without Cloud Scheduler

Cloud Scheduler costs $0.10 per job per month after the first 3 and asks for OIDC plus IAM bindings on every target. Here is the IAM-free pattern Cloud Run teams use to fire their .run.app URLs on a clock with one bearer token and one dashboard across every GCP project.