Comparison
Crontap vs Heroku Scheduler
Base Heroku Scheduler is a free add-on for commands every 10 minutes, hourly at a chosen minute, or daily in UTC. It uses billed one-off dynos and documents rare missed or duplicate jobs, with no built-in retries or dedicated failure alerts. The separate Advanced Scheduler add-on adds cron, IANA timezone, history, and API management.
At a glance
Heroku Scheduler vs Crontap, side by side.
| Dimension | Heroku Scheduler | Crontap |
|---|---|---|
| Cadence options | 10 min, 1 hour, 24 hours | Any cron expression |
| Cron expression support | No (3 fixed buckets) | Yes (5-field) |
| Per-schedule timezone | Account-wide UTC | Yes (any IANA) |
| Per-execution cost | One-off dyno per run (billed by the second) | Zero (hits your existing dyno) |
| Dashboard scope | Per-app | All apps + non-Heroku targets |
| Logging | Limited dyno log | Status, code, duration, size, error summary |
| Free tier | Free add-on, limited by dyno time | Starter: 2 combined items; schedules hourly+, 1 uptime monitor daily, and 1 heartbeat hourly |
| Advanced Scheduler add-on | Cron, IANA timezone, history, and Service API | Built into paid Crontap plans; management API is Ultra |
| Human Notifications | Base Scheduler has logs but no dedicated failure-alert surface | All plans: email, test sends, product defaults, per-item default/custom/off routing, and delivery history. Pro, Ultra, and legacy Pro add Slack, Discord, and Telegram |
| Machine webhook Integrations | No base Scheduler machine callback routing | Separate machine webhook Integrations with per-event success, failure, missed, and recovered levers where applicable |
| Schedule failure batching | Not compared; Crontap schedule-specific alert setting | Schedule alerts: unsaved default Starter 24h / 3 failures, paid 10m / 3; configurable floor Starter 1 day, paid 1 minute |
| Heartbeat / dead-man monitoring | No native dead-man monitor | Native: period + grace, /fail, missed/recovered/explicit-failure alerts, ping URL, and 90-day history |
| Uptime monitoring | No native uptime monitor | Native HTTP uptime: down/recovered alerts, history, 90-day rollups, and integration controls |
| Retries and customization | Base Scheduler has no automatic retries | Default on: 3 retries with 2× exponential backoff and jitter. Pro, Ultra, and legacy Pro: 1–5 retries plus delay and retry outcomes; alert after exhaustion |
| AI response processing | No response transform-and-forward workflow | AI response transforms: transform, summarize, normalize, extract, or triage, then forward. Pro: daily, 1 per schedule. Ultra: hourly, unlimited; test-run UX |
How they work
The two approaches in one paragraph each.
Heroku Scheduler
Base Heroku Scheduler runs a Rake task, shell command, or process type in a billed one-off dyno every 10 minutes, hourly at a selected minute, or daily in UTC. Heroku explicitly says execution is not guaranteed and may rarely skip or duplicate. Advanced Scheduler is a distinct add-on with cron, IANA timezone, history, and an API.
Crontap
Crontap fires any cron expression at the HTTP endpoint of your choice (a route on your existing Heroku app, a Cloud Run service, a Vercel function, anything reachable). The schedule lives in Crontap, not in your app, so cadence changes never require a redeploy and there is no per-execution dyno billed.
Where each side wins
Honest broker, both columns.
Heroku Scheduler wins on
- One install. Already in the Heroku ecosystem.
- Runs Rake or shell commands directly without a public HTTP endpoint.
- Free add-on if you can live with three cadences.
Crontap wins on
- Cadences in between. Every 5, 15, 30 minutes are not options on Heroku Scheduler.
- Cron expressions like Tuesday 06:30 Europe/Berlin that Heroku Scheduler simply cannot represent.
- No per-execution dyno spin-up cost. Crontap hits the URL on dynos you already pay for.
- Per-schedule IANA timezones.
- Alerts when the job never ran through native heartbeats.
- A real Heroku customer fires daily user notifications at 17:00 Europe/Berlin via Crontap, exactly because Heroku Scheduler is UTC-only with 24-hour cadence.
The math
Cadence and pricing, worked out.
- Want a job every 5 minutes via Heroku Scheduler? You cannot. The closest is every 10 minutes.
- Run a job every 10 minutes via Heroku Scheduler and you spin up a one-off dyno 4,320 times a month. On Eco dynos that is real money. With Crontap, your existing web dyno serves the request.
- Advanced Scheduler is a separate paid add-on and does provide five-field cron, IANA timezones, execution history, and a Service API. Crontap Pro starts at $2.99/mo and adds HTTP retries, uptime, and heartbeats.
Moving from Heroku Scheduler
The migration, in 5 steps.
- Paste your existing config into the free cron migrator to get every schedule pre-filled as a Crontap deep link.
- Identify the Rake task or process that Heroku Scheduler runs.
- Wrap it as an HTTP endpoint on your existing dyno (e.g. POST /scheduled/your-job) and verify a bearer token on the route.
- Create a Crontap schedule pointing at that URL with the header.
- Remove the Heroku Scheduler entry. Verify the next run lands in your Crontap log.
Decision
Which one fits.
Pick Heroku Scheduler if
You are content with 10 min, 1 hour, or 24 hours, your job runs as a Rake task you do not want to expose over HTTP, and you do not mind UTC.
Pick Crontap if
You want any cron expression, sub-10-minute cadence, per-schedule timezones, central logs, or notifications when something fails.
Pair both if
Keep Heroku Scheduler for one daily Rake task and add Crontap for the every-15-minute health pings.
FAQ
Crontap vs Heroku Scheduler, in detail.
- Does Crontap require a public HTTP endpoint?
- Yes. The endpoint can be auth-protected: Crontap sends an Authorization header you control, your route checks it before doing any work.
- Can I keep Heroku Scheduler running too?
- Yes. Many teams pair them: keep Heroku Scheduler for the one daily Rake task that already works, add Crontap for everything that needs a cadence Heroku Scheduler does not offer.
- Will this save me money?
- Often, because you skip the per-execution dyno spin-up. Heroku Scheduler bills a small one-off dyno per run; Crontap calls the URL on the web dyno you already pay for.
- What about Heroku Advanced Scheduler?
- Advanced Scheduler is materially more capable than the base add-on: it supports five-field cron at one-minute granularity, IANA timezones, one-off triggers, execution history, and a Service API. Compare it directly if you want commands on one-off dynos. Crontap Pro starts at $2.99/mo for external HTTP scheduling with retries and monitoring.
Sources
Test one low-risk job
Create it safely, then pause before cutover.
Use Perform test against a safe or idempotent endpoint, then keep the replacement paused. Enable it only after its timing, request, and alert settings match the job you are replacing.
/wp-cron.php?doing_wp_cron=1
Schedule
"every 5 minutes"
Next
in 23s