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.

app.steadycron.com/jobs

Jobs

New job
Search jobs…
All HTTP Heartbeat
Status Group: env
env:prod 5 jobs 1 failing
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
env:dev 3 jobs
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
Alerting

Six trigger types, five channels, flapping guard, and quiet hours — alerts that fire when they matter.

Learn more Alerting
CLI

Import, validate, plan, and apply — the full manifest workflow from any terminal or CI pipeline.

Learn more CLI
API

Scoped REST API for every resource — read-only keys for dashboards, full-access for automation.

Learn more API
Terraform

Official provider (steadycron/steadycron) — declare jobs, channels, and alert rules as HCL with plan/apply/import.

Learn more Terraform
GitHub Actions

Plan diff on every PR, apply on merge — cron job changes through your normal code review.

Learn more GitHub Actions
Variables

${ENV} resolved by the CLI, {{template}} by the server — secrets stay out of git entirely.

Learn more Variables

Know before your users do

01

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.

02

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.

03

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.

04

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.

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.

Or install the CLI in one command

Linux crontab

/etc/cron.d/myapp

steadycron — bash
$ steadycron import crontab /etc/cron.d/myapp -o crontab.yaml
Parsed 3 entries → weekly-digest · nightly-backup · health-sweep
$ steadycron apply crontab.yaml --namespace prod
apply complete · 3 created

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.

Migration guide

Vercel Cron

vercel.json

steadycron — bash
$ steadycron import vercel \
--base-url https://api.myapp.com -o vercel.yaml
Parsed 3 entries → send-digest · backup · health
Authorization: Bearer ${CRON_SECRET} (resolved at apply time, never in git)
$ steadycron apply vercel.yaml --namespace prod --env-file .env
apply complete · 3 created

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.

Migration guide

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 workflow
namespace: production
channels:
- id: ops-slack
kind: slack
webhook: ${SLACK_WEBHOOK_URL}
jobs:
- id: weekly-digest
kind: http
method: POST
url: https://api.example.com/jobs/digest
schedule: "0 9 * * 1"
timezone: Europe/Berlin
retries: 3
channel: ops-slack
- id: nightly-backup
kind: http
method: POST
url: https://api.example.com/backup
schedule: "0 2 * * *"
timezone: Europe/Berlin
timeout: 300
retries: 3
channel: ops-slack
- id: stripe-reconcile
kind: http
method: POST
url: https://api.example.com/finance/reconcile
schedule: "0 6 * * *"
timezone: Europe/Berlin
headers:
Authorization: "Bearer {{stripe_token}}"
channel: ops-slack
- id: health-sweep
kind: http
method: GET
url: https://api.example.com/health
schedule: "*/15 * * * *"
timeout: 10
YAML

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 →

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
Start Free

Free tier — no credit card required.