Skip to content
cron.surf

Run a GitHub Actions workflow on the 15th of every month

The GitHub Actions expression for “15th of the month” is 0 0 15 * *. Below: config you can paste, the next run times, and what to watch out for. GitHub Actions takes POSIX cron in on.schedule and runs it on the default branch, in UTC unless the entry sets a time zone.

0 0 15 * *Open in tool

“At 00:00, on day 15 of the month”

Workflow file

.github/workflows/15th-of-month.yml
name: 15th-of-month
on:
  schedule:
    - cron: '0 0 15 * *'
      timezone: 'UTC'
  workflow_dispatch:
jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - run: echo "running 15th-of-month"

GitHub Actions gotchas

5 minutes is the floorGitHub documents every 5 minutes as the shortest interval a scheduled workflow can run. Do not count on anything tighter.
Runs can be late or droppedScheduled runs are delayed at busy times, especially at the start of each hour, and some may be dropped. Avoid minute 0 if timing matters.
UTC unless you set timezoneAdd timezone: with an IANA name to the schedule entry. Without it the schedule runs in UTC.
Default branch only, and it can switch offSchedules run from the latest commit on the default branch. In public repositories they are disabled after 60 days without activity.

FAQ

What is the GitHub Actions cron expression for “15th of the month”?

0 0 15 * *. It reads: At 00:00, on day 15 of the month

Which time zone does a GitHub Actions schedule use?

In UTC by default. Add timezone: with an IANA name, such as Asia/Tokyo, next to cron: in the schedule entry.

Can GitHub Actions run every minute?

No. The documented minimum is every 5 minutes. For tighter intervals, trigger the workflow from outside with workflow_dispatch or repository_dispatch.

Does GitHub Actions support @hourly or @daily?

No. GitHub does not support @yearly, @monthly, @weekly, @daily, @hourly or @reboot. Use the five fields.