How to Monitor GitHub Actions Scheduled Workflows

Detect skipped or failed scheduled workflow runs that would otherwise stay inside CI.

Monitor GitHub Actions scheduled (cron) workflows with a heartbeat: detect skipped, delayed, or failed runs that stay hidden inside CI. Setup, secrets, and buffers.

By H. Marcell, Freelance Software Developer

Updated July 17, 2026

H. Marcell is a freelance software developer who builds and runs web services and APIs, and writes about uptime monitoring, incident response, and status-page communication.

What this guide covers

GitHub Actions scheduled workflows are convenient but easy to lose track of — a `schedule` trigger can be skipped, delayed, or silently disabled, and you will not know unless you happen to check the Actions tab. This guide shows how to monitor them externally with a heartbeat so a missed run pages you, including the quirks specific to GitHub's scheduler.

  • Scheduled runs can be silently skipped or queued late.
  • Call the heartbeat from the final successful step only.
  • A buffered interval avoids false alarms from queue latency.

The setup

Add a final step to your scheduled workflow that runs only after the meaningful work succeeds. Storing the URL as a secret keeps it out of your workflow file and logs.

  • Create a heartbeat check and copy its ping URL.
  • Add the URL as a repository secret (e.g. HEARTBEAT_URL).
  • Add a last step: `run: curl -fsS "$HEARTBEAT_URL"` guarded so it only runs on success.
  • Set the monitor interval to your cron schedule plus a buffer.

GitHub-specific gotchas

Two behaviors trip teams up. First, scheduled workflows can be delayed — sometimes by many minutes — when GitHub's runners are under load, so a heartbeat interval with no buffer will false-alarm regularly. Second, GitHub disables scheduled workflows in repositories with no commits for 60 days; the workflow simply stops running with no notice. An external heartbeat is what turns both of these silent behaviors into an alert you actually see.

How Sandglass supports the practice

Create a heartbeat check in Sandglass, store its URL as a repository or organization secret, and add a final step to the scheduled workflow that calls the URL after the real work succeeds. Set the heartbeat interval to your schedule plus a generous buffer for GitHub's known scheduling delays. A skipped or failed run means no heartbeat, which means an alert.

  • Back the practices here with HTTP, ping, TCP, content, SSL certificate, and heartbeat checks.
  • Route incidents to email, Slack webhook channels, and generic webhooks so the right people respond fast.
  • Use a public status page to keep customers informed while the team works the incident.

Common mistakes to avoid

GitHub Actions scheduled workflows are not guaranteed to run exactly on time — runs can be delayed during high load, and scheduled workflows are automatically disabled on repositories with no activity for 60 days. Size your heartbeat buffer for the delay, and be aware that an inactive repo can have its schedule turned off entirely — which the heartbeat will catch.

Implementation checklist

Step 1: Start from customer impact

Decide which failures in this topic actually reach customers before adding any monitoring.

Step 2: Choose one signal per risk

Match each risk to a single HTTP, content, TCP, SSL certificate, or heartbeat check instead of stacking duplicates.

Step 3: Assign an owner and a channel

Give each alert one owner and one destination — email, a Slack webhook, or a generic webhook.

Step 4: Review after real incidents

Revisit intervals, thresholds, and ownership once a real incident shows what was missing.

Frequently Asked Questions

Monitor how to monitor github actions scheduled workflows with Sandglass

Start free

Free plan, no credit card required.