Uptime checksHTTP, keyword and TLS checks on your addresses, with the evidence of every failure kept.
Cron heartbeatsOne curl line at the end of a job. Silence past the grace window is the alert.
Status pagesA page your customers read, on your own domain, with the incident in plain words.
ExplanationsA written reason with the alert: what failed, what the checks saw, what to look at first.
on every plan Alerts to six channelsImportTeams
APIRead, pause, acknowledge and post updates from your own scripts.
MCP serverAsk your AI assistant what is down, then acknowledge or post an update.
WebhooksSigned JSON when an incident opens, is acknowledged or recovers.
Heartbeat guidescrontab, GitHub Actions, Railway, Node, Go, WordPress and Kubernetes.
DocsShort guides, each one task, with the lines to copy.
GuidesWhy monitors send false alarms, why cron jobs stop, and the fix.
ChangelogThe big things we shipped, newest first.
Trust and securityWhere your data lives, who processes it, how long we keep it.
Referral program soonRecommend Upglory to another team. In the works.
Contact

Know when a job did not run.

Add one curl to the end of a cron job. If the ping is late past the grace window, the alert says which job and by how much.

24 expected pings, one missed past the grace window
how it works

A promise, a line, a watch.

You say when the job runs. Upglory waits for it to say it finished.

  1. Set the promise

    Every 24 hours, with 30 minutes of grace. Presets for the usual schedules, or your own.

  2. Add the line

    The job pings its own address when it finishes. Crontab, a systemd timer or a CI step.

  3. Silence is the alert

    No ping by the due time plus grace opens an incident and tells your channels.

the line

One line, and a little more if you want it.

The ping address takes a plain request. A few extras say more about the run.

  • /start marks the start, so the run time is measured
  • /fail reports a failure the job caught itself
  • ?duration= sends the run time in milliseconds
  • Test ping send one from the app before the first real run
  • New address replaces the old one at once, history stays
# every night at 2, then tell Upglory it finished
0 2 * * *  /usr/local/bin/backup-nightly \
  && curl -fsS -m 10 https://ping.upglory.io/abc123
missed Nightly backup
The Nightly backup heartbeat, missed: no ping since yesterday, late past its 30 minutes of grace, with Acknowledge, Open incident and how long its last run took.
plans

Heartbeats have their own limit.

They never share a count with monitors.

Free0 EUR

  • 20 heartbeats
  • any period and grace
  • 90 days of history

Solo15 EUR a month

  • 100 heartbeats
  • any period and grace
  • 1 year of history

Team49 EUR a month

  • 500 heartbeats
  • any period and grace
  • 2 years of history
Every limit, side by side prices in EUR, VAT added where it applies
questions

Before you add one.

Does anything alert before the first ping?

No. A new heartbeat waits for its first ping, so a job you have not deployed yet never raises an alarm.

What if the job runs for hours?

Send /start when it begins and the plain ping when it ends. The run time is measured and a long run is not a missed one.

Someone saw my ping address. Now what?

Make a new one from the heartbeat's page. The old address stops answering at once and the history stays.

20 heartbeats free. No card.

Your first check runs two minutes from now.

Start free
the mark: five days, one short