Cron for the first Monday of the month
The classic trap. Because standard cron ORs day-of-month with day-of-week, this fires on the 1st through 7th AND on every Monday — not only on the first Monday.
0 9 1-7 * 1
At 09:00, on the 1st through 7th of the month and also on Monday
Interpreted in UTC · approximately 10.3 runs per month
Things to check
Gotcha
Day-of-month and day-of-week are combined with OR, not AND
Both the day-of-month field ("1-7") and the day-of-week field ("1") are restricted. Standard cron runs the job when EITHER matches, so this fires more often than most people expect — not only on days that satisfy both.
Fix: To require both conditions, set one field to * and check the other inside your job (for example `[ "$(date +%u)" = "1" ] || exit 0`).
Note
Interpreted in UTC
A cron expression has no timezone of its own — the scheduler's zone decides when it fires. These times are computed in UTC. The same expression on a host in another zone runs at a different moment.
Fix: Set the schedule timezone explicitly (TZ= or CRON_TZ= in crontab, `timeZone` in Kubernetes, or the scheduler's own setting). Vercel Cron Jobs always run in UTC.
Fields
- Minute
0 - At minute 0.
- Hour
9 - At 09:00.
- Day of month
1-7 - On the 1st, 2nd, 3rd, 4th, 5th, 6th and 7th.
- Month
* - Every month.
- Day of week
1 - On Monday.
Next runs
- Thu, 2026-09-03, 09:00
- Fri, 2026-09-04, 09:00
- Sat, 2026-09-05, 09:00
- Sun, 2026-09-06, 09:00
- Mon, 2026-09-07, 09:00
- Mon, 2026-09-14, 09:00
- Mon, 2026-09-21, 09:00
- Mon, 2026-09-28, 09:00
Try a different expression or timezone
Times above are in UTC. Pick a timezone here to see this schedule in local time.
Call this from code or an agent
curl 'https://crontoenglish.com/api/v1/explain?expression=0%209%201-7%20*%201'