Blog
Wild & Free Tools

GitHub Actions Schedule Cron Expression Guide

Last updated: April 2026 6 min read

Table of Contents

  1. GitHub Actions Schedule Syntax
  2. Common GitHub Actions Cron Schedules
  3. Timezone Handling in GitHub Actions
  4. Important GitHub Actions Scheduling Caveats
  5. Troubleshooting Scheduled Workflows
  6. Frequently Asked Questions

GitHub Actions workflows can run on a schedule using cron syntax in the schedule trigger. The syntax follows standard 5-field cron — but there's a catch: GitHub Actions runs all scheduled workflows in UTC, and there's no official way to set a different timezone.

Use our free cron expression generator to build your schedule and verify the next run times before pushing to your repo.

GitHub Actions Schedule Trigger Syntax

Add a scheduled trigger to any GitHub Actions workflow by adding a schedule event with a cron value:

name: Daily Build
on:
  schedule:
    - cron: '0 2 * * *'     # 2:00 AM UTC every day

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run build
        run: npm run build

The cron field follows standard POSIX cron syntax with 5 fields. You can have multiple cron schedules for a single workflow by adding multiple items under schedule:

on:
  schedule:
    - cron: '0 9 * * 1-5'   # Weekdays at 9 AM UTC
    - cron: '0 0 1 * *'     # First of every month midnight UTC

Common GitHub Actions Cron Schedules

Use CaseCron ExpressionWhen It Runs
Nightly build0 2 * * *2:00 AM UTC daily
Weekly release check0 9 * * 1Monday 9:00 AM UTC
Dependency audit0 0 * * 0Sunday midnight UTC
Hourly health check0 * * * *Every hour on the hour
Bi-weekly0 9 1,15 * *1st and 15th at 9 AM UTC
Monthly cleanup0 0 1 * *First of month midnight UTC
Workday mornings0 6 * * 1-5Weekdays 6:00 AM UTC
Every 30 minutes*/30 * * * *:00 and :30 of every hour
Sell Custom Apparel — We Handle Printing & Free Shipping

Handling Timezones in GitHub Actions Scheduled Workflows

GitHub Actions only supports UTC for scheduled workflows. If you need to run a workflow at 9 AM Eastern time (UTC-5), you need to schedule it at 14:00 UTC in winter and 13:00 UTC in summer (due to daylight saving).

This is genuinely annoying for teams that think in local time. The common workaround is to schedule slightly offset from the "exact" time — for instance, if you want morning runs in Eastern time, use 0 13 * * 1-5 (8 AM EST / 9 AM EDT, splitting the difference). The hour-level imprecision rarely matters for most CI/CD tasks.

Some teams work around the timezone issue by running the workflow on a schedule but checking the current time inside the workflow and exiting early if it's outside business hours in their target timezone. It's a hack, but it works.

For precise timezone-aware scheduling, AWS EventBridge or a dedicated cron service like GitHub-compatible cloud functions is a better fit.

Important Caveats for GitHub Actions Scheduled Workflows

Minimum interval is 5 minutes. GitHub explicitly documents that scheduled workflows are not guaranteed to run more frequently than every 5 minutes. The * * * * * expression (every minute) is technically valid syntax but won't work as expected.

Workflows may be delayed. GitHub runs scheduled workflows based on system load. High-traffic times may delay your workflow by minutes or hours. Don't use GitHub Actions scheduling for time-critical tasks.

Inactive repositories disable scheduling. GitHub automatically disables scheduled workflows in repositories that have had no activity for 60 days. You'll get an email warning before this happens, but it's caught many developers off guard.

The default branch runs the schedule. GitHub Actions runs scheduled workflows from the default branch (usually main or master). Changing the cron expression on a feature branch has no effect until it's merged.

Troubleshooting GitHub Actions Scheduled Workflows

If your scheduled workflow isn't running, check these common issues:

1. Validate the cron expression first. Use our cron generator to confirm the expression is valid and check when it fires. A typo in the YAML can silently break the schedule.

2. Check the Actions tab. Go to your repo's Actions tab and look for the workflow. If it's listed with a "scheduled" trigger, GitHub has registered it. If runs are missing, the delay caveat above may apply.

3. Verify you're on the default branch. Workflow files on non-default branches don't drive schedules, even if the file is valid.

4. Use workflow_dispatch for testing. Add a workflow_dispatch trigger so you can manually run the workflow to test it without waiting for the schedule:

on:
  schedule:
    - cron: '0 2 * * *'
  workflow_dispatch:    # Adds a "Run workflow" button in the UI

Try It Free — No Signup Required

Runs 100% in your browser. No account, no install, no limits.

Open Free Cron Generator

Frequently Asked Questions

What timezone does GitHub Actions use for scheduled workflows?

GitHub Actions uses UTC for all scheduled workflows. There is no official way to set a different timezone. To schedule a workflow at 9 AM Eastern time (UTC-5 in winter), use the expression "0 14 * * *".

What is the minimum schedule interval for GitHub Actions?

GitHub Actions does not guarantee scheduled workflows run more frequently than every 5 minutes. While "* * * * *" is valid cron syntax, GitHub will not run it every minute. Use 5-minute intervals ("*/5 * * * *") as your practical minimum.

Why did my GitHub Actions scheduled workflow stop running?

GitHub automatically disables scheduled workflows in repositories with no activity for 60 days. You should receive an email warning before this happens. Re-enable the workflow from the Actions tab in your repository.

Can I have multiple cron schedules for one GitHub Actions workflow?

Yes. Add multiple items under the schedule trigger in your workflow YAML. Each cron entry is independent, so the workflow will run at each scheduled time.

Launch Your Own Clothing Brand — No Inventory, No Risk