Migrate from Cronitor
Move your Cronitor monitors to SteadyCron heartbeat checks — list monitors via the API, recreate them as YAML, and swap the telemetry URLs in your crontabs.
Cronitor monitors and SteadyCron heartbeat checks share the same model: your job pings a telemetry URL, and a missing or failed ping becomes an alert. Migration is therefore a mapping exercise — recreate each monitor, swap the ping URL, run both briefly, done. SteadyCron additionally executes scheduled HTTP jobs (with retries and timeouts) in the same product, and manages everything as YAML or Terraform, EU-hosted.
1. List your Cronitor monitors
The Cronitor API returns every monitor with its schedule and grace settings:
curl -s https://cronitor.io/api/monitors -u "$CRONITOR_API_KEY:" \
| jq '.monitors[] | {name: .name, schedule: .schedule, grace: .grace_seconds, tz: .timezone}'
2. Recreate each monitor as a heartbeat check
Cron-scheduled monitors map to schedule + timezone; interval-based monitors (“every X
minutes”) map to interval in seconds:
jobs:
- id: nightly-db-backup
name: Nightly DB backup
kind: heartbeat
schedule: "0 2 * * *"
timezone: Europe/Berlin
grace: 1800
- id: sync-worker
name: Sync worker
kind: heartbeat
interval: 600
grace: 120
Or interactively, one at a time:
steadycron manifest add job --kind heartbeat --name nightly-db-backup --schedule "0 2 * * *"
Then steadycron apply steadycron.yaml. Each check gets a unique ping URL under
ping.steadycron.com.
3. Swap the telemetry URLs
Replace the cronitor.link ping in each crontab line or wrapper script:
# before
0 2 * * * cronitor exec db-backup /usr/local/bin/backup.sh
# after
0 2 * * * /usr/local/bin/backup.sh && curl -fsS https://ping.steadycron.com/<your-ping-token>
If you used cronitor exec, note that the plain-curl pattern above pings only on success —
which is exactly what a dead-man’s switch needs. Ping both services in parallel for a few
days before deleting the Cronitor monitors.
What’s different
| Cronitor | SteadyCron | |
|---|---|---|
| Cron monitoring | Yes | Yes |
| Scheduled HTTP job execution | Basic checks | Full jobs — retries, timeouts, request builder, execution log |
| Config as code | API, Terraform (community), YAML via CLI | YAML manifest + official Terraform provider |
| Alert channels | Many (plan-dependent) | Email, Slack, Discord, Telegram, webhook — all plans |
| Hosting | US | EU (GDPR-native, signed DPA) |
Next steps
- Heartbeat monitoring — grace periods, stuck-job detection
- Ping snippets — bash, Python, .NET, Docker, Kubernetes
- YAML & CLI — full manifest workflow