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

CronitorSteadyCron
Cron monitoringYesYes
Scheduled HTTP job executionBasic checksFull jobs — retries, timeouts, request builder, execution log
Config as codeAPI, Terraform (community), YAML via CLIYAML manifest + official Terraform provider
Alert channelsMany (plan-dependent)Email, Slack, Discord, Telegram, webhook — all plans
HostingUSEU (GDPR-native, signed DPA)

Next steps