The YAML you need
on:
schedule:
- cron: '0 9 * * 1-5'Quote the expression. Unquoted, YAML will try to parse * and the workflow will fail to load. You can list several - cron: entries under one schedule block.
GitHub Actions always runs in UTC
There is no timezone option. 0 9 * * 1-5 means 09:00 UTC, which is 04:00 in New York during winter and 05:00 during summer — the offset moves twice a year and your workflow time moves with it. If you need a fixed local time you have to change the cron twice a year, or schedule in UTC and adjust inside the job. Use the timezone selector above to see what your expression means where you are.
Scheduled runs are delayed, sometimes badly
GitHub explicitly does not guarantee scheduled workflows start on time. Delays of 5 to 15 minutes are routine and can stretch much further during peak load — the top of the hour is the worst possible slot because everyone schedules there. Offset your schedule to something like 7 9 * * 1-5 to sit outside the crush.
Two things that silently disable your schedule
Default branch only. Scheduled workflows only run from the repository's default branch. A schedule on a feature branch never fires, with no warning.
60 days of inactivity. GitHub disables scheduled workflows in public repositories after 60 days with no commits. You get an email, which is easy to miss. The workflow has to be re-enabled manually.
Shortest supported interval
The minimum is every 5 minutes — */5 * * * *. Anything shorter is accepted by the parser but silently rounded up. The @reboot and other @ shorthands are not supported.
Frequently asked questions
What timezone does GitHub Actions cron use?
UTC, always. There is no way to set a timezone for a scheduled workflow.
Why is my GitHub Actions scheduled workflow not running?
The three usual causes: the workflow is not on the default branch; the repository has been inactive for 60 days and GitHub disabled the schedule; or the cron expression is unquoted and the YAML fails to parse.
What is the shortest GitHub Actions cron interval?
Every 5 minutes (*/5 * * * *). Shorter intervals are rounded up.
Related cron expressions
Browse the full cron expression reference, or build your own expression from scratch.