Vercel Cron Jobs are convenient if you are already on Vercel, but they only trigger Vercel functions and require a deploy to change schedules. Here is how the alternatives compare.
Vercel Cron Jobs let you trigger Vercel-deployed serverless functions on a schedule using cron expressions defined in your vercel.json file. It is a built-in feature of the Vercel platform — no extra service to set up. You specify a route path and a cron expression, and Vercel invokes that function on the schedule.
The Hobby (free) plan allows 2 cron jobs with a minimum interval of 1 day and a 10-second function timeout. The Pro plan ($20/month per member) raises this to 40 jobs, 1-minute intervals, and up to 300-second timeouts. Vercel Cron is a good fit for teams already on Vercel who need to schedule their own functions — but it does not support external URLs, retries, or failure alerts.
Quick take
How Vercel Cron Jobs stacks up against the most common alternatives.
| Feature | Vercel Cron (Hobby) | Vercel Cron (Pro) | Netlify Scheduled | GitHub Actions Cron | cron-job.org | Upstash QStash |
|---|---|---|---|---|---|---|
| Type | Platform scheduler | Platform scheduler | Platform scheduler | CI/CD scheduler | HTTP scheduler | HTTP queue + scheduler |
| Free tier jobs | 2 jobs | 40 jobs | Included in plan | 2,000 min/mo (private) | Unlimited | 500 msgs/day |
| Minimum interval | 1 day | 1 minute | 1 hour (varies) | 5 minutes | 1 minute | 1 minute |
| External URL support | No (Vercel only) | No (Vercel only) | No (Netlify only) | Yes (manual curl) | Yes | Yes |
| Automatic retries | No | No | No | No | No | Yes, configurable |
| Failure alerts | No | No | No | Custom step needed | Email after 15 fails | Callback URL |
| Execution dashboard | No (function logs) | No (function logs) | No (function logs) | Workflow run logs | 25 entries | Yes |
| Schedule changes | vercel.json + deploy | vercel.json + deploy | Code + deploy | YAML commit + push | Dashboard | API |
| Platform lock-in | Vercel only | Vercel only | Netlify only | GitHub repos only | None | None |
| Team management | Vercel team | Vercel team | Netlify team | Repo permissions | No | Upstash dashboard |
| REST API | No | No | No | GitHub API (workflows) | No | Yes |
| One-off jobs | No | No | No | workflow_dispatch | No | Yes |
| Function timeout | 10s (Hobby) | 60s (default) / 300s (max) | 10s (free) / 26s (paid) | N/A (full VM) | 30s | N/A (async) |
| Pricing | Free | $20/mo per member | Free / $19/mo (Pro) | Free / $4/user/mo | Free / ~$1/mo | Free / $1/mo+ |
Different tools fit different needs.
Best for: Teams already on Netlify
Run Netlify Functions on a cron schedule. Same platform lock-in trade-off as Vercel but with different timeout limits (10s free, 26s paid). Schedule defined in code with @netlify/functions package.
Read our comparisonBest for: Repo-bound tasks where timing is not critical
Schedule workflows using cron expressions in YAML. Can call any URL via curl but timing can be delayed 10-60+ minutes during high load. Consumes CI/CD minutes.
Read our comparisonBest for: Simple HTTP scheduling on a $0 budget
Free HTTP cron service with unlimited jobs and 1-minute intervals. 30-second timeout, no retries, alerts only after 15 failures. Platform-agnostic — calls any URL.
Read our comparisonBest for: Affordable HTTP scheduler with longer timeouts
5 free cron jobs with 5-minute intervals and 30-second timeout. Paid plans from $5/mo with 200 jobs and 10-minute timeout. Has auto-retry. No team access.
Read our comparisonBest for: Serverless apps needing queue + scheduling
HTTP-based scheduler and message queue with configurable retries, delays, and callbacks. Pay-per-request pricing. Works with any URL, not locked to a deployment platform.
These are the specific limitations that push teams to look beyond Vercel Cron Jobs.
Vercel Cron Jobs can only invoke serverless functions deployed on Vercel. You cannot point a cron job at an external URL — your own API server on AWS, a third-party webhook, or a service on Railway. If your backend is not on Vercel, you would need to deploy a proxy function just to forward the request, adding complexity and latency.
Cron expressions are defined in vercel.json and deployed alongside your code. Changing a schedule from every 5 minutes to every 15 means editing the config, committing, pushing, and waiting for a Vercel build. There is no dashboard control, no API endpoint, and no way to adjust schedules without a full deploy cycle.
When a Vercel cron invocation fails — function error, timeout, non-200 response — nothing happens automatically. There are no retries, no failure email alerts, and no recovery notifications. You find out about failures by manually checking the function logs in the Vercel dashboard, assuming you check at all.
Vercel has no dedicated view for cron execution history. Past runs are mixed into the general function logs with no filtering for cron-triggered invocations specifically. There is no timeline view, no status code tracking, and no response time charts. Debugging a cron failure means searching through general function logs.
The free Hobby plan allows only 2 cron jobs with a daily minimum interval and 10-second timeout. The Pro plan at $20/month per member raises this to 40 jobs and 1-minute intervals. If you need more than 40 jobs, or shorter intervals, you hit hard limits that cannot be raised without an Enterprise plan.
Vercel Cron Jobs are strictly recurring. There is no mechanism to schedule a one-time HTTP call — a delayed webhook, a deferred notification, or a future callback at a specific time. If you need one-off scheduling alongside your recurring crons, you need a separate queuing system entirely.