DevStacked
DevOps

Vercel Cron Expression
Generator

Build a Vercel-compatible cron schedule visually, preview the next 5 execution times in UTC, and copy a ready-to-paste vercel.json snippet — no guessing at cron syntax.

  • Visual builder for every-minute, hourly, daily, weekly & monthly schedules
  • Live validation and plain-English description
  • Next 5 execution times previewed in UTC
  • Ready-to-paste vercel.json output

Cron schedule builder

Presets

Last day of month (approx.): Standard 5-field cron has no "last day of month" symbol. This runs daily from the 28th onward — check the date inside your handler and exit early unless it's actually the last day of that month.

Cron expression

0 9 * * *Valid

At 09:00 AM

Next 5 executions (UTC)

  • Today09:00 UTC
  • Aug 1009:00 UTC
  • Aug 1109:00 UTC
  • Aug 1209:00 UTC
  • Aug 1309:00 UTC

vercel.json

Add this to your project's vercel.json. The route must exist and respond to a GET request.

{
  "crons": [
    {
      "path": "/api/cron",
      "schedule": "0 9 * * *"
    }
  ]
}

Vercel Cron schedules are always interpreted in UTC, regardless of your project's region. Convert the times above to your local timezone before relying on them.

Cron cheat sheetShow
FieldAllowed values
Minute0–59
Hour0–23
Day of Month1–31
Month1–12
Day of Week0–6 (Sunday = 0)
ExpressionMeaning
* * * * *Every minute
*/5 * * * *Every 5 minutes
0 * * * *Every hour, on the hour
0 9 * * *Every day at 09:00 UTC
0 9 * * 1Every Monday at 09:00 UTC
0 0 1 * *First day of every month at midnight UTC

Vercel-specific limitations

  • You can't set both day-of-month and day-of-week at the same time — one must be "*".
  • Named values like MON or JAN aren't supported — use numbers only.
  • No L, W, #, or ? modifiers — standard 5-field Unix cron only.

What is a Vercel cron expression?

Vercel Cron Jobs let you trigger a Route Handler on a schedule instead of manually or via an external request. That schedule is defined with a standard 5-field cron expression — minute, hour, day-of-month, month, and day-of-week — registered inside your project's vercel.json file. This tool builds that expression for you and shows exactly what it will do before you ship it.

Why not just write the cron expression by hand?

Cron syntax is compact but easy to get subtly wrong — a misplaced field can mean the difference between "every hour" and "once a year." This generator removes the guesswork: pick a schedule type, and the tool assembles a valid expression, explains it in plain English, and shows you the next 5 times it will actually run — all before you commit it to your codebase.

How to use this generator

  1. Pick a schedule type — every minute, every X minutes, hourly, daily, weekly, or monthly — or switch to Custom to type an expression directly.
  2. Fill in the fields that appear for your chosen schedule (hour, minute, day, etc.).
  3. Check the live validity badge and the plain-English description.
  4. Review the next 5 execution times to confirm the schedule does what you expect.
  5. Set your API route path and copy the generated vercel.json snippet into your project.

The 5 cron fields, explained

Every Vercel cron expression is five space-separated fields, read left to right. Here's what each one controls:

  • Minute (0–59) — which minute of the hour the job fires on. A wildcard (*) means every minute.
  • Hour (0–23) — the hour of the day, in 24-hour UTC time. 9 means 9am UTC, 21 means 9pm UTC — there's no separate AM/PM field.
  • Day of month (1–31) — which date the job runs on, like the 1st or the 15th. Leave it as * unless you need a specific date every month.
  • Month (1–12) — restricts the schedule to specific months. Almost always left as * unless you're running something quarterly or seasonally.
  • Day of week (0–6) — the day of the week, where 0 is Sunday and 6 is Saturday. Useful for "every Monday" or "every weekday" schedules.

Only two of these five ever combine to form most real schedules — usually hour + minute for a daily time, or day-of-week + hour + minute for a weekly one. Day-of-month and month are mostly left as wildcards unless you have a genuinely date- or season-specific job.

Common Vercel cron examples

ExpressionWhat it does
*/5 * * * *Every 5 minutes — good for lightweight polling or heartbeat checks
0 * * * *Once an hour, on the hour
0 9 * * *Every day at 9:00 AM UTC — a common daily digest/report time
0 9 * * 1-5Every weekday at 9:00 AM UTC (Monday through Friday)
0 8 * * 1Every Monday at 8:00 AM UTC — a typical weekly-report schedule
0 0 1 * *Midnight UTC on the 1st of every month — common for monthly billing jobs
0 */6 * * *Every 6 hours — a lighter-weight alternative to hourly for cache refreshes

Common mistakes

  • Forgetting Vercel runs everything in UTC. An expression that looks right at a glance can fire at 2am for your users if you meant local time instead of UTC.
  • Setting both day-of-month and day-of-week. Vercel explicitly doesn't support combining the two — one of them has to stay a wildcard (*), unlike some other cron implementations that treat the combination as "either/or".
  • Using named values like MON or JAN. Vercel only accepts numeric values — 1 for Monday, 1 for January, and so on.
  • Assuming a 6-field or seconds-based format works. Vercel uses strict 5-field Unix cron — no seconds field, and no L/W/#/? modifiers some other schedulers (like Quartz) support.
  • Forgetting the route has to actually exist and respond. A valid schedule in vercel.json does nothing if the API route it points to is missing, returns a non-2xx status, or times out — check your function logs after the first scheduled run.
  • Not accounting for plan limits. Cron frequency and total invocation allowances can differ by Vercel plan — verify your plan supports the interval you're configuring before relying on it in production.

Vercel Cron vs. Linux Cron

Vercel CronLinux Cron (crontab)
Fields5 (minute, hour, day-of-month, month, day-of-week)5 (same), some variants add seconds/year
TimezoneAlways UTCSystem's local timezone (configurable)
Named values (MON, JAN)Not supportedSupported in most implementations
Day-of-month + day-of-week togetherNot allowed — one must be a wildcardAllowed, treated as OR
Where it runsTriggers an HTTP request to your API routeRuns a shell command directly on the host
Where it's definedvercel.json in your repo, deployed with your appA crontab file on the server, edited independently of your code

A note on timezones

Vercel Cron schedules are always interpreted in UTC, regardless of which region your project is deployed to. All execution previews on this page are shown in UTC — convert to your local timezone before assuming a job ran "at 9am your time."

Frequently asked questions

What timezone do Vercel cron schedules use?

Always UTC, regardless of your project's deployment region. If you need a job to run at a specific local time, convert that time to UTC first — daylight saving time changes can otherwise shift when your job actually fires relative to your local clock.

How many fields does a Vercel cron expression have?

Five: minute (0-59), hour (0-23), day of month (1-31), month (1-12), and day of week (0-6, where 0 is Sunday). Vercel does not support the 6-field format some other schedulers use with a seconds field.

Can I express "the last day of the month" in cron?

Not with a single literal token — standard 5-field cron has no "last day" symbol, and Vercel doesn't support the "L" modifier some other schedulers add. The closest workaround is a day-of-month range like 28-31 (ranges and comma lists are both supported by Vercel), then checking inside your handler whether tomorrow's date rolls into the next month before doing real work, since 28-31 fires on every one of those days, not just the actual last one.

Does this tool send my schedule anywhere?

No. Expression building, validation, the plain-English description, and the next-execution preview all run entirely in your browser — nothing is sent to a server.

How often can a Vercel cron job run?

As often as every minute, though your actual minimum interval and total invocation count may be limited by your Vercel plan. Check Vercel's current cron job limits before relying on a very high-frequency schedule in production.

Does my API route need to do anything special to work with cron?

It needs to exist as a Route Handler that responds to a GET request at the path you configure. Vercel calls it directly on the schedule you define — no special headers or setup are required beyond having the route available.

Can I set both day-of-month and day-of-week in the same expression?

No — Vercel's documentation explicitly states you can't configure both at the same time; one must stay a wildcard ("*"). Note that Vercel's own docs-page cron validator widget doesn't actually enforce this rule and will accept expressions that combine both, which is a known inconsistency on their docs page. This tool follows the written restriction rather than the widget's more permissive behavior, since it's the safer assumption for what actually runs in production.

Looking for a different generator?Browse all tools