Migrate from Healthchecks.io
Move your Healthchecks.io checks to SteadyCron heartbeat monitors — export checks via the API, recreate them as YAML, and swap the ping URLs in your crontabs.
Healthchecks.io and SteadyCron heartbeat monitors work the same way: your cron job pings a URL when it runs, and a missing ping triggers an alert. That makes migration mechanical — recreate each check as a heartbeat monitor, then swap the ping URL in your crontab or script. SteadyCron adds scheduled HTTP job execution in the same product, Slack, Discord, Telegram, email, and webhook alerts on every plan, and a YAML/Terraform workflow.
1. Export your checks
The Healthchecks.io Management API lists every check with its schedule and grace time:
curl -s https://healthchecks.io/api/v3/checks/ \
-H "X-Api-Key: $HC_API_KEY" | jq '.checks[] | {name, schedule, timeout, grace, tz}'
Checks come in two flavors, and both map directly:
- cron-scheduled checks (
schedule+tz) → a heartbeat monitor withschedule+timezone - period-based checks (
timeoutin seconds) → a heartbeat monitor withinterval
2. Recreate each check as a heartbeat monitor
jobs:
- id: nightly-db-backup
name: Nightly DB backup
kind: heartbeat
schedule: "0 2 * * *" # from the check's "schedule"
timezone: Europe/Berlin # from "tz"
grace: 1800 # from "grace" (seconds)
- id: queue-worker
name: Queue worker
kind: heartbeat
interval: 300 # from "timeout" for period-based checks
grace: 120
Or add them one at a time — steadycron manifest add job --kind heartbeat prompts for
schedule, timezone, and grace, and derives a sensible grace default from the schedule:
steadycron manifest add job --kind heartbeat --name nightly-db-backup --schedule "0 2 * * *"
Then steadycron apply steadycron.yaml. Each monitor gets a unique ping URL under
ping.steadycron.com.
3. Swap the ping URLs
Replace the hc-ping.com URL in each crontab line or script with the SteadyCron ping URL:
# before
0 2 * * * /usr/local/bin/backup.sh && curl -fsS https://hc-ping.com/<uuid>
# after
0 2 * * * /usr/local/bin/backup.sh && curl -fsS https://ping.steadycron.com/<your-ping-token>
To migrate with zero risk, ping both services for a few days
(curl -fsS url1; curl -fsS url2), confirm SteadyCron shows healthy check-ins, then drop
the old URL and delete the Healthchecks.io check.
What’s different
| Healthchecks.io | SteadyCron | |
|---|---|---|
| Dead-man’s-switch monitoring | Yes | Yes |
| Scheduled HTTP job execution | No | Yes — retries, timeouts, execution log |
| Alert channels | Many (plan-dependent) | Email, Slack, Discord, Telegram, webhook — all plans |
| Config as code | API / Terraform (community) | YAML manifest + official Terraform provider |
| Hosting | US (EU self-host option) | 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