Vercel Hobby cron runs once a day, up to 59 minutes late
Vercel Hobby cron runs once a day with hourly precision, so a job can start up to 59 minutes late. When to move paid work to a Sume bulk run or Scheduled agent.

On the Hobby plan Vercel runs a cron job at most once a day, with hourly precision, so a job set for 09:00 may start any time up to 09:59. That is fine for a digest and a poor fit for a job that needs a fixed minute. Keep the cron as a thin trigger and let Sume own the paid work, the budget and the retries.
What does Vercel's page say?
The cron usage page gives the limits per plan.
| Topic | Hobby | Pro and Enterprise |
|---|---|---|
| Frequency | Once per day | Once per minute |
| Precision | Per hour, up to 59 minutes late | Per minute |
| Jobs per project | 100 | 100 |
| What runs | A Vercel Function, so function limits apply | A Vercel Function, so function limits apply |
What happens if I write a faster expression on Hobby?
The page says a more frequent expression fails deployment, so you find out at deploy time, not at 3 a.m. Because the cron calls a Vercel Function, the function's time limit also applies. A function that waits on a long render will run into it, so do not wait.
What should the function do instead?
Start work and return. A Sume Format run is asynchronous: you create it, keep the run id, and read the receipt or take the webhook later. For many items, a bulk run takes 1 to 100 items with concurrency from 1 to 16, so one cron call can start a whole batch without holding the function open.
Give the call an Idempotency-Key tied to the day, so a retry after a timeout returns the original instead of spending twice. A bulk replay with the same key and payload returns 202 and the old queue. A different payload under the same key is a 409 idempotency_conflict, with details.queue_id pointing at the queue that already exists.
- Set generation_spend_cap_usd on each item; the default comes from the Format's cap.
- Use a webhook per item for completion, because the queue itself has no webhook.
- Read the queue with GET /v1/format-run-queues/{id} when you want counts.
When is a Sume schedule better than a Vercel cron?
If you need a fixed minute or an IANA timezone, a Sume Scheduled agent has both: a 5-field cron expression plus a timezone. It is created in the dashboard, and its default per-run spend cap is $1.00. Vercel cron is still the better fit when the trigger belongs to your app's own deploy. Details are in the bulk runs reference and the scheduled agents guide.
Sources
Related posts
More in Agents
- Verify a Sume run webhook in Python: replay window and empty secret
A Python verifier for the sume-v1 signature on a Sume run webhook: raw body, five-minute replay window, constant-time compare, and no empty secrets.
- A weekly scheduled agent run for podcast clips: cron, cap and trigger
Set a Sume Scheduled Action to run every week, with a cron schedule, an IANA time zone and a spend cap that a manual or API run can lower but never raise.
- account_me then balance_get: two reads before an agent spends
Before an unattended agent submits paid work over Sume MCP, call account_me to confirm the workspace and balance_get for the wallet. What each returns.
- Agent Completions: input is data, messages are the prompt
On POST /v1/agent/completions, messages or instruction become the prompt; input is written to a file as data the Agent never treats as instructions.
Written by Sume