GitHub Actions
GitHub Actions Cron Schedule Generator
Build and validate on.schedule cron expressions for GitHub Actions. All times are UTC. Minimum interval: 5 minutes. No @-aliases.
At 09:00 AM, Monday through Friday
Valid
- 1Thu, Apr 9, 2026, 9:00 AM
- 2Fri, Apr 10, 2026, 9:00 AM
- 3Mon, Apr 13, 2026, 9:00 AM
- 4Tue, Apr 14, 2026, 9:00 AM
- 5Wed, Apr 15, 2026, 9:00 AM
- 6Thu, Apr 16, 2026, 9:00 AM
- 7Fri, Apr 17, 2026, 9:00 AM
- 8Mon, Apr 20, 2026, 9:00 AM
- 9Tue, Apr 21, 2026, 9:00 AM
- 10Wed, Apr 22, 2026, 9:00 AM
Use in GitHub Actions
on:
schedule:
- cron: '0 9 * * 1-5'Key Constraints
- All times in UTC — no timezone field, convert manually
- Minimum interval: 5 minutes — shorter schedules are silently throttled
- No @-aliases (
@daily,@hourly, etc. are rejected) - Scheduled workflows disabled after 60 days of inactivity — public repos only (private repos unaffected)
- Scheduled runs are "best effort" — expect delays of up to 60+ minutes at peak times
Common UTC Conversions
| Local time | UTC equivalent | Cron expression |
|---|---|---|
| Midnight EST (UTC−5) | 05:00 UTC | 0 5 * * * |
| 9am EST (UTC−5) | 14:00 UTC | 0 14 * * * |
| Midnight WAT (UTC+1, Lagos) | 23:00 UTC | 0 23 * * * |
| 9am WAT (UTC+1, Lagos) | 08:00 UTC | 0 8 * * * |
| 9am EAT (UTC+3, Nairobi) | 06:00 UTC | 0 6 * * * |
| 9am IST (UTC+5:30, Mumbai) | 03:30 UTC | 30 3 * * * |
Common Patterns
| Expression | Meaning |
|---|---|
0 9 * * 1-5 | Weekdays at 9:00 AM UTC |
0 2 * * * | Every day at 2:00 AM UTC |
*/5 * * * * | Every 5 minutes (minimum allowed) |
0 0 1 * * | 1st of every month at midnight UTC |
47 3 * * * | Daily at 3:47 AM UTC (off-peak — avoids delays) |
GitHub Actions Schedule FAQ
Why is my GitHub Actions scheduled workflow not running?
Several causes: (1) Repository inactivity — GitHub disables scheduled workflows in public repositories after 60 days without activity (private repos are not affected); you'll receive an email to re-enable. (2) High load delay — popular cron times (midnight UTC, top of hour) are frequently delayed 30–60 minutes. (3) Fork behavior — scheduled workflows are disabled on forks by default. (4) Throttling — expressions shorter than 5 minutes are silently skipped.
Can I run a GitHub Actions workflow in my local timezone?
No. All
on.schedule times are strictly UTC. There is no timezone field. Convert manually: 9:00 AM EST (UTC-5 winter) = 0 14 * * *. 9:00 AM WAT (UTC+1, Lagos) = 0 8 * * *. During summer, account for DST shifts if your team is in a DST-observing timezone.What cron syntax does GitHub Actions support?
Standard 5-field POSIX cron:
minute hour day-of-month month day-of-week. No @-aliases — @daily, @hourly, etc. are rejected. No 6-field Quartz syntax. Minimum interval is 5 minutes — anything shorter is throttled. All times in UTC.How do I prevent a scheduled workflow from running on repository forks?
Add
if: github.repository == 'owner/repo' to your job definition. This checks the repository name at runtime and skips execution on forks. Alternatively, go to the fork's Settings → Actions and disable Actions entirely. The condition approach is more maintainable.Why does my scheduled workflow run hours late?
GitHub explicitly states scheduled workflows are "best effort" and run "as close to the scheduled time as possible." During high load (especially at midnight UTC, 00:00–01:00 and at the top of each hour), delays of 30–90 minutes are common. Mitigation: schedule at off-peak times like
47 3 * * * instead of 0 3 * * *. If exact timing is critical, trigger an external webhook from a dedicated cron service instead.