cronuru
Pattern

Quarterly (1st of Every 3rd Month)

0 0 1 */3 *
0 0 0 1 */3 ?
0 0 1 */3 *
0 0 1 */3 ? *
0 0 0 1 */3 *
0 0 1 */3 *

Runs at 00:00 on the 1st of January, April, July, and October — 4 invocations per year, once per calendar quarter.

Use in your stack

# Quarterly — 1st of Jan, Apr, Jul, Oct at midnight
0 0 1 */3 * /usr/local/bin/quarterly-report.sh
{ "cron": "0 0 0 1 */3 ?", "timezone": "UTC" }
apiVersion: batch/v1
kind: CronJob
metadata:
  name: quarterly-report
spec:
  schedule: "0 0 1 */3 *"
  timeZone: "UTC"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: report
            image: my-image:latest
          restartPolicy: OnFailure
cron(0 0 1 */3 ? *)
@Scheduled(cron = "0 0 0 1 */3 *")
public void quarterly() { /* ... */ }
on:
  schedule:
    - cron: '0 0 1 */3 *'

Next runs

Pick a timezone to see when this expression fires next.

Next 10 runs
  1. 012026-10-01T00:00:00.000Z
  2. 022027-01-01T00:00:00.000Z
  3. 032027-04-01T00:00:00.000Z
  4. 042027-07-01T00:00:00.000Z
  5. 052027-10-01T00:00:00.000Z
  6. 062028-01-01T00:00:00.000Z
  7. 072028-04-01T00:00:00.000Z
  8. 082028-07-01T00:00:00.000Z
  9. 092028-10-01T00:00:00.000Z
  10. 102029-01-01T00:00:00.000Z

Variations

Common use cases

  • Quarterly fiscal or usage reports.
  • Quarterly billing or subscription renewals.
  • Rotating credentials on a quarterly cadence.
  • Quarterly data archival or compliance jobs.

Gotchas

  • `*/3` in the month field steps from month 1, so it fires in January, April, July, October — calendar quarters, not fiscal quarters. For a fiscal year starting in a different month, use an explicit list like `0 0 1 2,5,8,11 *`.
  • AWS EventBridge: `0 0 1 */3 ? *` — uses `?` for day-of-week.
  • The 1st of the month always exists, so this is a safe date anchor.

0 0 1 */3 * is the quarterly schedule — the 1st of January, April, July, and October. The key subtlety is that */3 anchors to January; if your fiscal quarters start elsewhere, switch to an explicit month list.

Frequently asked questions

What does `0 0 1 */3 *` mean?
Minute `0`, hour `0` (midnight), day-of-month `1`, month `*/3` (every 3rd month from January), day-of-week `*` (any). So the job fires at midnight on the 1st of January, April, July, and October — four times a year, once per calendar quarter.
Which months does `*/3` actually fire in?
January, April, July, and October — `*/3` steps from the field's minimum (1 = January) by 3. It does NOT center on the current month. For a fiscal year that starts in a different month, use an explicit month list instead, like `0 0 1 2,5,8,11 *` for February/May/August/November.
How do I run on the last day of each quarter instead of the first?
Last-day-of-quarter is harder — the quarter-end months (March, June, September, December) have different lengths. In Quartz or AWS EventBridge use `L` in the day-of-month field with a month list: `0 0 0 L 3,6,9,12 ?`. In Unix cron, schedule on the 28th-31st of those months and check inside your script.
Is there a `@quarterly` shortcut?
No — standard cron has `@yearly`, `@monthly`, `@weekly`, `@daily`, `@hourly`, but no `@quarterly`. Write the full expression `0 0 1 */3 *`. (systemd timers do have a `quarterly` OnCalendar shortcut, but crontab does not.)

Browse all cron patterns

Every schedule Cronuru documents, with its expression and code snippets for six dialects.