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 with schedule + timezone
  • period-based checks (timeout in seconds) → a heartbeat monitor with interval

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.ioSteadyCron
Dead-man’s-switch monitoringYesYes
Scheduled HTTP job executionNoYes — retries, timeouts, execution log
Alert channelsMany (plan-dependent)Email, Slack, Discord, Telegram, webhook — all plans
Config as codeAPI / Terraform (community)YAML manifest + official Terraform provider
HostingUS (EU self-host option)EU (GDPR-native, signed DPA)

Next steps