Recuro.
All alternatives

Netlify Scheduled Functions Alternatives

Netlify Scheduled Functions are convenient for Netlify-deployed code, but tight timeouts, no retries, and platform lock-in push teams toward dedicated schedulers. Here is how the options compare.

What is Netlify Scheduled Functions?

Netlify Scheduled Functions let you run Netlify-deployed serverless functions on a cron schedule. You define the schedule in your function code using the @netlify/functions package or in netlify.toml, deploy to Netlify, and the function runs automatically at the specified intervals. It is built into the Netlify platform with no additional setup or services required.

The free Starter plan includes scheduled functions with a 10-second timeout. The Pro plan ($19/month) extends the timeout to 26 seconds. Netlify Scheduled Functions are well-suited for lightweight, recurring tasks within the Netlify ecosystem — cache warming, simple data fetches, or cleanup tasks that complete quickly. The limitations appear when you need external URL support, longer timeouts, retries, or failure alerts.

Quick take

  • Netlify Functions only — cannot call external URLs. Your scheduled code must be deployed on Netlify.
  • Hard timeout of 10 seconds on free and 26 seconds on paid. Functions exceeding this are killed mid-execution.
  • No retries, no failure alerts, no recovery notifications. Failed executions are logged silently.
  • Schedule changes require editing code and redeploying. No dashboard or API for schedule management.

Feature comparison

How Netlify Scheduled Functions stacks up against the most common alternatives.

Feature Netlify ScheduledVercel Cron JobsGitHub Actions Croncron-job.orgFastCronUpstash QStash
Type Platform schedulerPlatform schedulerCI/CD schedulerHTTP schedulerHTTP schedulerHTTP queue + scheduler
Free tier Included in plan2 jobs (Hobby)2,000 min/mo (private)Unlimited jobs5 jobs500 msgs/day
Minimum interval 1 hour (varies)1 day (Hobby) / 1 min (Pro)5 minutes1 minute5 min (free) / 1 min (paid)1 minute
External URL support No (Netlify only)No (Vercel only)Yes (manual curl)YesYesYes
Function timeout 10s (free) / 26s (paid)10s (Hobby) / 300s (Pro)N/A (full VM)30s30s (free) / 10 min (paid)N/A (async)
Automatic retries NoNoNoNoBasic auto-retryYes, configurable
Failure alerts NoNoCustom step neededEmail after 15 failsEmail / Slack (paid)Callback URL
Execution dashboard No (function logs)No (function logs)Workflow run logs25 entries25 (free) / 250+ (paid)Yes
Schedule changes Code + deployvercel.json + deployYAML commit + pushDashboardDashboard + APIAPI
Platform lock-in Netlify onlyVercel onlyGitHub repos onlyNoneNoneNone
REST API NoNoGitHub API (workflows)NoYesYes
One-off jobs NoNoworkflow_dispatchNoNoYes
Pricing Free / $19/mo (Pro)Free / $20/mo (Pro)Free / $4/user/moFree / ~$1/moFree / $5/mo+Free / $1/mo+

Alternatives to consider

Different tools fit different needs.

Vercel Cron Jobs

Included in plan

Best for: Teams already on Vercel

Built-in cron for Vercel-deployed functions. Same platform lock-in trade-off but with longer timeouts on Pro (up to 300s) and 1-minute minimum intervals. Defined in vercel.json instead of in code.

Read our comparison

GitHub Actions Cron

Free / $4/user/mo

Best for: Repo-bound tasks where timing is not critical

Schedule workflows with 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 from your GitHub plan.

Read our comparison

cron-job.org

Free / ~$1/mo

Best 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 directly.

Read our comparison

FastCron

Free / $5/mo+

Best 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 management.

Read our comparison

Upstash QStash

Free / $1/mo+

Best 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 and is not locked to a deployment platform.

Why you may look for alternatives

These are the specific limitations that push teams to look beyond Netlify Scheduled Functions.

Locked to Netlify Functions

Netlify Scheduled Functions can only run code deployed as Netlify Functions. You cannot point a schedule at an external URL — your own API, a third-party webhook, or a service on another provider. If your backend is not on Netlify, you need to deploy and maintain a proxy function on Netlify just to forward requests, adding an unnecessary layer to your stack.

Aggressive function timeouts

The free tier times out after 10 seconds. Paid plans extend this to 26 seconds. If your scheduled task calls a slow API, processes data, or waits on a downstream service, these timeouts will kill the execution before it completes. The common workaround — returning immediately and running the task asynchronously — means the scheduler cannot tell you if the task succeeded.

No retries or failure handling

When a Netlify Scheduled Function fails or times out, the failure is silent. There are no automatic retries, no configurable retry delays, and no failure alert emails. You discover problems by manually reviewing function logs — if you think to check. A transient error at the wrong moment means a missed execution with no recovery.

Schedule changes require a deploy

Cron expressions are defined in code using the @netlify/functions package or in netlify.toml. Changing a schedule means editing source code, committing, pushing, and waiting for a Netlify build. There is no dashboard slider, no API call, and no way to adjust timing without a full deploy cycle. Quick schedule tweaks are not possible.

No dedicated execution history

Netlify has no dashboard for viewing scheduled function execution history as a timeline. Past invocations are mixed into the general function logs with no way to filter by scheduled triggers, track status codes over time, or view response time trends. Debugging intermittent failures or answering "did this run last Tuesday?" requires searching through unstructured logs.

No one-off or delayed jobs

Netlify Scheduled Functions only support recurring cron schedules. There is no way to schedule a one-off delayed job — a deferred webhook call, a post-signup callback, or a timed notification at a specific future time. You need a completely separate queuing system for anything that is not on a fixed recurring schedule.

Frequently asked questions

Can Netlify Scheduled Functions call external APIs?
Not directly as a scheduling target. Netlify Scheduled Functions run your Netlify-deployed function code on a cron schedule. Inside that function, you can make HTTP requests to external APIs using fetch or any HTTP client. But the schedule itself can only trigger Netlify Functions — you cannot point a Netlify schedule at an external URL. This means you need to deploy and maintain a proxy function on Netlify just to call an external endpoint on a schedule.
What is the timeout limit for Netlify Scheduled Functions?
On the free Starter plan, Netlify Functions time out after 10 seconds. On paid plans (Pro at $19/month), the timeout extends to 26 seconds. These are hard limits — if your function takes longer, the execution is killed. For tasks that call slow APIs, process data, or wait on downstream services, 10-26 seconds is often not enough. There is no way to extend these limits further.
How do I change a Netlify scheduled function's cron expression?
The cron expression is defined in your function code using the @netlify/functions package (or in netlify.toml). Changing the schedule means editing the source code, committing, pushing, and waiting for a Netlify build and deploy. There is no dashboard control, no API endpoint, and no way to adjust timing without a full deploy cycle. For teams that need to tweak schedules frequently, this is a significant friction point.
Does Netlify support retries for scheduled functions?
No. If a Netlify Scheduled Function fails, times out, or throws an error, there is no automatic retry. The failure is logged in the function logs, but there is no retry mechanism, no failure alert, and no recovery notification. The next execution happens at the next scheduled time. You would need to implement retry logic inside your function code to handle transient failures.
When is Netlify Scheduled Functions a good choice?
Netlify Scheduled Functions work well when you are already deployed on Netlify, your tasks complete within the timeout limits (10-26 seconds), and you need simple recurring jobs like cache invalidation, lightweight data syncs, or periodic cleanup. If you do not need retries, alerts, or external URL support, and your team is already managing a Netlify project, it avoids adding another service to your stack.
How does Netlify Scheduled compare to Vercel Cron?
Both are platform-locked schedulers that only trigger their own deployed functions. Netlify defines schedules in code with the @netlify/functions package; Vercel uses vercel.json. The key difference is timeouts: Netlify caps at 26 seconds on paid plans, while Vercel Pro allows up to 300 seconds. Vercel Pro also allows 1-minute minimum intervals and up to 40 jobs, while Netlify scheduling limits vary by plan. Neither offers retries, failure alerts, or external URL support. The choice typically depends on which platform you already use for deployment.