GitHub Actions uses standard 5-field cron, but with two important constraints: UTC only and minimum 5-minute interval. Schedules can also be delayed under heavy load.
| Expression | What it means | Typical use |
|---|---|---|
*/5 * * * * |
Every 5 minutes (minimum allowed) | Polling, dependency checks, status updates. |
0 * * * * |
Every hour on the hour | Hourly builds, hourly link-checking. |
0 0 * * * |
Every day at midnight UTC | Nightly builds, daily security scans. |
0 9 * * 1-5 |
Weekdays at 9 AM UTC | Workday automation, daily reports. |
0 0 * * 1 |
Every Monday at midnight UTC | Weekly maintenance, weekly reports. |
0 0 1 * * |
First day of every month | Monthly cleanups, monthly releases. |
Click any expression to load it into the tool above.
GitHub enforces this to prevent excessive runner load. Cron expressions like */1 * * * * or */3 * * * * are rejected at workflow validation time. The minimum step value for the minute field is 5.
GitHub Actions cron is best-effort, not guaranteed. During high load (Monday mornings UTC are notoriously busy), scheduled runs can be delayed 5-30 minutes. For time-critical workflows, use external triggers (Cloud Scheduler, EventBridge) calling workflow_dispatch.
GitHub Actions cron is UTC-only. 0 9 * * * means 9 AM UTC, which is 1 AM Pacific or 5 PM Tokyo. Calculate your desired local time in UTC, or use a separate scheduling service if you need timezone awareness.
Yes — you can comment out the schedule block in your workflow YAML, or rename the file to .yml.bak. GitHub also automatically disables scheduled workflows in repos with no activity for 60+ days.
Combine triggers: on: { schedule: [...], workflow_dispatch: {} }. The workflow_dispatch trigger adds a "Run workflow" button in the Actions UI.