EU-hosted · GDPR-native
Cron jobs fail silently.
Yours won’t.
SteadyCron watches every scheduled task you run — cron jobs, backups, ETL runs, worker queues, scheduled AI agent runs — and alerts you on Slack, email, Telegram, or webhook the moment one misses, fails, or hangs. Need the schedule hosted too? We call your endpoint for you.
Free tier — no credit card required.
Jobs
| weekly-digest-email | HTTP | 0 9 * * 1 | in 2 days | 3 days ago | ||
| nightly-db-backup | Heartbeat | 0 2 * * * | in 19 h | 5 h ago | ||
| stripe-reconciliation | HTTP | 0 */4 * * * | in 38 min | 3 h ago | ||
| cache-warmup | HTTP | */15 * * * * | in 11 min | now | ||
| search-index-sync | Heartbeat | */30 * * * * | in 6 min | 24 min ago |
| seed-test-data | HTTP | 0 4 * * * | in 14 h | 10 h ago | ||
| preview-env-cleanup | Heartbeat | 0 */6 * * * | in 2 h | 4 h ago | ||
| trial-expiry-sweep | HTTP | 0 6 * * * | — | yesterday |
Six trigger types, five channels, flapping guard, and quiet hours — alerts that fire when they matter.
Learn more AlertingImport, validate, plan, and apply — the full manifest workflow from any terminal or CI pipeline.
Learn more CLIScoped REST API for every resource — read-only keys for dashboards, full-access for automation.
Learn more APIOfficial provider (steadycron/steadycron) — declare jobs, channels, and alert rules as HCL with plan/apply/import.
Learn more TerraformPlan diff on every PR, apply on merge — cron job changes through your normal code review.
Learn more GitHub Actions${ENV} resolved by the CLI, {{template}} by the server — secrets stay out of git entirely.
Learn more VariablesAlerting
Know before your users do
Detect
Six trigger types watch your jobs: failure, missed heartbeat, slow run, consecutive failures, payload anomaly, and recovery. Every trigger is configurable per job — fire on the first failure, or only after three.
Evaluate
Before any alert fires, smart rules apply. Quiet hours suppress non-critical noise at night. A flapping guard catches jobs that rapidly alternate between healthy and failing. Consecutive thresholds wait for N failures so a single blip never wakes you up.
Deliver
Alerts reach you on Slack, Discord, email, Telegram, or webhook — whichever channel the job needs. Each alert auto-resolves when the job recovers, so you never need to manually acknowledge a cleared incident.
Log
Every alert event is recorded with its trigger, channel, delivery status, and the reason it was suppressed — if it was. Suppressed alerts appear in the log too, so you always know what fired, what was held, and why.
Migrate
Already running cron jobs?
Bring them over.
One command converts your existing crontab or vercel.json into a SteadyCron manifest. Apply it and your jobs are live — retries, alerts, and a full audit log from day one.
Linux crontab
/etc/cron.d/myapp
Migrate from Linux crontab in two commands
Run steadycron import crontab against any cron file and SteadyCron converts each entry into a versioned YAML manifest — schedule, user, and command mapped automatically. Then steadycron apply provisions the jobs. Every run is logged with its response status, retries fire on transient failures, and a missed ping alerts you before your logs rotate.
Vercel Cron
vercel.json
Move beyond Vercel’s scheduling limits
Point steadycron import vercel at your project and it reads every cron entry from vercel.json. Secrets like CRON_SECRET are written as ${CRON_SECRET} placeholders — never resolved into the manifest, never committed to git. Run steadycron apply and your jobs are live: any frequency, per-job timezones, and schedule changes without a redeploy.
Everything as code
Prefer pull requests to dashboards?
Every job, monitor, alert channel, and rule can be declared in a YAML manifest or Terraform — validated locally, planned in CI, applied on merge. Fully optional, and always in sync with the dashboard.
Explore the cron-as-code workflowFAQ
Questions, answered
What is a heartbeat monitor?
A heartbeat monitor watches a scheduled task you already run — a cron job, backup script, ETL run, or worker on your own server, a container, a GitHub Actions workflow, or anywhere else. Your script sends a ping to a unique URL at the end of each successful run. If the ping doesn't arrive within the expected window, SteadyCron raises an alert. It takes one extra line: curl -s https://ping.steadycron.com/hb/<id>.
Can I monitor cron jobs running on my own servers?
Yes. Add a heartbeat check and have your job send a ping when it finishes (a single curl at the end of your script). If the ping doesn't arrive on schedule, SteadyCron alerts you. It works from any language or shell.
How do I get alerted when a cron job fails?
Create an alert rule on any job or heartbeat monitor, pick the trigger that matters — on failure, after N consecutive failures, when a heartbeat is missed, or when the job recovers — and attach it to a channel (email, Slack, Discord, Telegram, or webhook). Alerts auto-resolve when the job returns to healthy, so nothing needs to be manually cleared.
Can SteadyCron detect slow jobs, not just failures?
Yes. Beyond standard failure triggers, SteadyCron offers two anomaly-detection triggers: Slow run fires when a job's execution time exceeds a configurable multiple of its own median — useful for catching jobs that are technically succeeding but taking far longer than usual. Response size anomaly fires when the payload deviates significantly from the baseline, which can surface silent data issues without any code changes.
What is flapping detection?
Flapping happens when a job rapidly alternates between healthy and failing, generating a flood of alerts. SteadyCron's flapping guard detects this pattern and suppresses the noise, sending a single Flapping started notice instead. Once the job stabilises you get a Flapping resolved notice. Every suppressed delivery is still logged with its reason, so nothing is hidden.
What happens if my endpoint fails or times out?
SteadyCron retries failed requests with configurable exponential backoff — and only on the HTTP status codes you choose. Per-job timeouts prevent indefinitely hanging runs, and each execution is fully logged with the response status, body, and duration. If retries are exhausted, an alert fires via your configured channel.
Does SteadyCron replace AWS EventBridge or Cloudflare/Vercel Cron?
For scheduled HTTP work, yes. SteadyCron calls your endpoint on schedule with configurable retries, timeouts, and full request/response logs — without locking you into one cloud. You also get monitoring and alerting in the same place.
Does SteadyCron work with any programming language?
Yes. HTTP job execution works with any endpoint regardless of the stack behind it. Heartbeat monitoring is equally language-agnostic — any script, cron, or worker that can make an HTTP request (shell, Python, Ruby, Go, Node, PHP…) can ping a heartbeat URL. No agents or SDKs to install.
Where is my data stored?
Everything runs on Hetzner infrastructure in Germany, governed by German law. Core execution uses no US sub-processors, and a GDPR DPA is available.
Is there a Terraform provider?
Yes — the official provider is published as steadycron/steadycron on the Terraform Registry. It manages HTTP jobs, heartbeat monitors, alert channels, alert rules, tags, and template variables as HCL resources with full plan / apply / import support. Requires Terraform ≥ 1.0 and a Full-scope API key. Resources managed via Terraform live alongside manifest-managed ones — SteadyCron never prunes Terraform resources during a steadycron sync --prune.
How does SteadyCron compare to other online cron job providers?
Most online cron runners only execute jobs; most monitoring tools only watch them. SteadyCron does both in one place, so execution logs, heartbeat history, and alert history all live together. On top of that, SteadyCron is the only cron platform with a first-class infrastructure-as-code workflow: a Terraform provider, a YAML manifest with validate/plan/apply, and a native GitHub Action. It's also EU-hosted with a signed DPA — the natural choice for teams with data-residency requirements. See the full comparison →
Can SteadyCron monitor scheduled AI agents or LLM pipelines?
Yes. A scheduled agent — a nightly digest, an embedding refresh, a batch-inference run — fails in ways plain cron never had: rate limits, a hung LLM call with no timeout, or a loop that swallows a tool error and exits 0 having done nothing. Ping a heartbeat only after you've validated the output, not just on process exit, and SteadyCron alerts you when a valid result stops arriving, whatever the cause. See the full pattern →
Pricing
Simple, honest tiers
No per-execution fees. No hidden line items. Billed in EUR.
| Free €0 forever | Developer €10 per month | Team €30 per month | |
|---|---|---|---|
| HTTP jobs | 5 | 50 | 250 |
| Heartbeats | 10 | 100 | 500 |
| Min frequency | 15 min | 1 min | 10 sec |
| Alert channels | Email Telegram Webhook | +Slack · Discord | +Escalation |
| Quiet hours | — | ||
| CLI tool | |||
| Full IaC | |||
| Log entries | 50 | 1,000 | 10,000 |
Free tier — no credit card required.