alwaysbeat sign in →
 we alert when the pings stop

When the cron stops, you hear about it first.

Alwaysbeat is reliable monitoring for scheduled work — it works like a dead man's switch. Your job sends a heartbeat (a quick HTTP ping) when it finishes; miss the window, and we page you — backups, cron, pipelines, daemons, watched from one place.

// one line at the end of the job — that's the whole integration
# nightly backup, cron: 0 3 * * *
pg_dump mydb | gzip > /backups/db.sql.gz && \
  curl -fsS https://ping.alwaysbeat.com/ping/$CHECK_ID
#                                    └─ 03:31 with no ping → alert
01 — how it works

No agent. No polling. Absence is the signal.

01

Define the schedule

An interval (every 15m) or a cron expression with a real IANA timezone — DST and leap days handled for you. You get one unguessable ping URL.

02

Ping when the work is done

Append a curl to your job. Add /start and /fail if you want run durations and explicit failures; skip them if you don't.

03

We watch the clock

Schedule plus grace elapses with no ping? That's the alert — sent once on the way down, once on recovery. Not every minute.

02 — features

Boring where it counts. Sharp where it matters.

Cron, done rightschedule
Five-field cron with explicit timezones, correct DST math, and plain intervals + grace when that's all you need.
Transition alertssignal > noise
One notification when a check goes down, one when it recovers. Optional nagging and flap suppression, off by default.
Ran-too-longduration
Pair /start with the finishing ping to catch jobs that hang or crawl, not just ones that vanish.
Signed webhooksintegrations
HMAC-SHA256 on every call and SSRF-guarded delivery, so your receiver can trust what it gets. Plus email, Slack, and Telegram.
Status badgesshare
Public SVG badges that show up/down without exposing the ping URL. Paste one into a README.
API keys & RESTheadless
A clean REST API with revocable keys — everything the dashboard does, scriptable, no browser required.
03 — monitoring as code

Checks live next to the jobs that run them.

A first-class Terraform provider, not a community afterthought. Declare a check, wire its ping_url straight into the job, and let the schedule review itself in your pull requests.

antonefremov/alwaysbeat on the registry →

// main.tf
resource "alwaysbeat_check" "nightly_backup" {
  name = "nightly-backup"

  schedule = {
    kind      = "cron"
    cron_expr = "0 3 * * *"
    tz        = "Europe/Berlin"
  }

  grace    = "30m"
  channels = ["webhook:https://ops.example/hooks/dmf"]
}

# hand the URL straight to the job that pings it
output "ping_url" { value = alwaysbeat_check.nightly_backup.ping_url }
get started

Stop learning about broken jobs from your users.

First check takes about a minute. Free while you kick the tires.