Use case
External cron for Fly apps, no always-on machine needed.
Fly.io is great at running your app close to your users. It just does not ship a scheduled HTTP primitive. Crontap is the external clock that hits your fly.dev URL on any cadence, without an always-on machine that costs real money for a handful of triggers.
Free plan · no credit card required
The problem
Why this is painful without the right tool
- Fly has no scheduled HTTP primitive of its own; the only built-in path is an always-on machine that runs a scheduler crate or a child process loop.
- An always-on machine for a handful of cron-style triggers is a full Fly machine on the bill, which is wasteful for sub-daily cadences.
- Internal scheduler crates in Rust, Go or Node add complexity and a separate failure mode (the scheduler crashes silently and runs stop).
- Multi-region Fly setups end up with one scheduler per region, which compounds the cost-and-complexity story.
The fix
How Crontap solves it
Crontap hits your https://yourapp.fly.dev URL on any cadence in any IANA timezone, from outside Fly. No extra machine, no scheduler crate, no per-region duplication. Failures alert to email / webhook (Slack / Discord / Telegram).
35 0 2 * *One concrete pattern from the dataset: a Fly customer running a monthly maintenance job at 00:35 Asia/Bangkok against a single /job endpoint. The Fly machine is an ordinary web server (no scheduler crate inside) that exposes the job route alongside the public app. Crontap fires the URL on the cron; the Fly app handles the work.
For multi-region setups, one Crontap schedule per region per job gives you a clean dashboard. The Fly machine in each region exposes the same route shape; Crontap fires each on local time and alerts per region. No per-region scheduler to maintain.
Auth is whatever your Fly app expects: a bearer token, a mutual TLS pair, an internal allow-list by Fly machine ID. Crontap stores arbitrary headers per schedule and sends them on every run.
FAQ
Common questions
- Can I still run a scheduler crate inside Fly?
- Yes, if you need long-running state (a queue consumer, a worker pool). For pure HTTP triggers on a clock, Crontap is the smaller answer: no machine to keep healthy, no scheduler to crash silently, no per-region duplication.
- What's the shortest interval Crontap supports?
- Every 1 minute on paid plans. Free tier available for slower cadences. Fly customers in the dataset typically run at every 5 minutes, hourly, or daily; the workloads that need minute cadence are usually pollers that already have an HTTP route to hit.
- How do I get notified if a run fails?
- Wire failure alerts to email / webhook (Slack / Discord / Telegram) on the schedule's Integrations panel. The failure payload includes the run's status code, duration, and response body, so a Fly machine that crashed at the same moment as the run shows up in the alert with the response body included.
Related guides
Ready to fix it?
Point Crontap at any URL. Pick any cron. Done.
WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.
Free forever tier ・ No credit card required
/wp-cron.php?doing_wp_cron=1
Schedule
"every 5 minutes"
Next
in 23s