Infrastructure-as-code · EU hosted

Cron jobs as code.
Finally.

Schedule HTTP cron jobs and monitor heartbeats — defined in YAML or Terraform, reviewed in pull requests, applied from GitHub Actions. Alert via Slack, email, or webhook.

Free tier — no credit card required.

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
CLI

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

Learn more
API

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

Learn more
Terraform

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

Learn more
GitHub Actions

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

Learn more
Alerting

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

Learn more
Variables

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

Learn more

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

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

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.

Questions, answered

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.

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.

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.

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.

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.

What is a heartbeat monitor?

A heartbeat monitor watches a cron job you already run — 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>.

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.

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.

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 →

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.