Skip to content
Dialect

Vercel

Generate vercel.json crons array entries with awareness of Hobby plan once-per-day restrictions and Vercel cron syntax limits.

Last verified: 2026-05-15

Cron lives in vercel.json

Vercel cron jobs are declared in the project's vercel.json:

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

Each entry maps a cron schedule to a route on your deployed app. When the cron fires, Vercel sends an authenticated GET request to that path. The handler at /api/cron does the work.

No alphabetic aliases

Vercel's parser does not accept MON, SUN, JAN, DEC, etc. Use numeric values: 1-7 for day-of-week and 1-12 for month. cronpreview's Vercel dialect rejects alphabetic forms at validation time.

Hobby plan: at most one run per day

On the Hobby tier, Vercel limits cron schedules to a maximum of one fire per day, total. 0 9 * * 1-5 (which fires Mon-Fri, five times a week) is rejected. Acceptable Hobby schedules: 0 9 * * 1 (Monday only), 0 9 1 * * (1st of the month), 0 9 * * * (daily, single run).

The Pro plan removes this restriction and supports unlimited cron jobs with arbitrary intra-day frequency.

Authentication

Vercel signs cron invocations with a header containing a project-specific secret. Always verify the CRON_SECRET environment variable in your route handler before doing work, otherwise the endpoint is publicly callable.

Found something inaccurate? Let us know via the contact form.

Try it

loading builder…

Related recipes

Read next