Cron expression for the first of every month

At 12:00 AM, on the 1st

0
minute
0
hour
1
day (month)
*
month
*
day (week)

At 12:00 AM, on the 1st

Try this expression in the interactive tool:

Open in cron explainer →

Next 10 scheduled runs

#1Fri, 1 May 2026, 00:00
#2Mon, 1 Jun 2026, 00:00
#3Wed, 1 Jul 2026, 00:00
#4Sat, 1 Aug 2026, 00:00
#5Tue, 1 Sept 2026, 00:00
#6Thu, 1 Oct 2026, 00:00
#7Sun, 1 Nov 2026, 00:00
#8Tue, 1 Dec 2026, 00:00
#9Fri, 1 Jan 2027, 00:00
#10Mon, 1 Feb 2027, 00:00

Common use cases

The first of the month is the canonical trigger for any monthly business process. Billing cycle processing — generating invoices, charging subscriptions, calculating overages — is the most common application.

Monthly report generation is another staple: summarising the previous month's revenue, user growth, infrastructure costs, or API usage. SSL/TLS certificate renewal checks and data retention enforcement also commonly run on this schedule.

Platform-specific syntax

crontab
0 0 1 * * /path/to/script.sh
AWS EventBridge
cron(0 0 1 * ? *)
GitHub Actions
schedule:
  - cron: '0 0 1 * *'  # 1st of month, midnight UTC
Kubernetes
schedule: "0 0 1 * *"

Technical breakdown

The expression 0 0 1 * * has five fields: minute=0, hour=0, day (month)=1, month=*, day (week)=*. At 12:00 AM, on the 1st.

Frequently asked questions

How do I run on the last day of the month instead?
Standard cron doesn't have a "last day" keyword. Schedule the job daily and check in your script: [ "$(date -d tomorrow +\%d)" = "01" ] && run_job.