How do I get a report, sync or reminder to run by itself on a schedule?
Short answer: A scheduled function on Netlify runs on a cron-style timer (every day, every Monday, every hour) with no server for you to rent, patch or forget about. It's billed only for the time it actually runs, not for sitting idle, which is the opposite of a traditional rented server that costs the same whether it's busy or doing nothing.
You want a report, a price sync or a reminder to just happen on its own, without you remembering to trigger it or paying for a server that sits idle the rest of the time.
I'm Ranjit, and I run Blur Studio: 15+ years building software, 120 apps taken live, and clients who have gone on to raise $10M+. I build AI systems and processes that help businesses do a lot more with a lot less time. I also work differently from most of what else is out there, more on that further down this page. Say hello.
This page may contain affiliate links from which Blur Studio earns commissions.
A recurring job, send a weekly summary, sync prices from a supplier each morning, remind someone about an overdue invoice, is a classic case where people either do it by hand (which means it eventually gets forgotten) or rent a small server just to run one script once a day, paying for 24 hours of uptime to use about ten seconds of it. A scheduled function solves both halves of this at once: no server to manage, and billing tied to actual runtime rather than a flat fee regardless of how little the job actually does.
The options, from least to most effort
- Do it by hand: free, reliable until the one week someone's on leave or simply forgets.
- Make or Zapier's own scheduling: genuinely good for simple recurring tasks that stay within what their trigger-action model handles cleanly.
- A cron job on a rented server: works, but means managing a server (security updates, uptime, cost) for a job that might run for a few seconds a day.
- A scheduled function on Netlify: runs your actual code on a timer with no server to manage, billed only for the seconds it's actually running.
How a scheduled function actually works
You write the logic as a normal function, the same as any other Netlify function, but configure it with a cron expression instead of a URL path:
import type { Config } from "@netlify/functions"
export default async () => {
// fetch prices from a supplier, compare to your current list,
// send yourself an email if anything changed
}
export const config: Config = {
schedule: "0 6 * * *" // every day at 6am UTC
}
Netlify triggers the function according to that schedule automatically; there's no server listening and waiting, the function simply doesn't exist as a running process until the moment it's due to fire, then runs, does its job, and stops. That's the core difference from a rented server running a cron job: you're billed for the actual seconds of execution, not for 24 hours of a machine sitting there in case something needs to happen.
What it actually costs
Function compute is billed at 10 credits per GB-hour of runtime, roughly $0.07, on top of your base plan: Free ($0, 300 credits/month), Personal ($9/month, 1,000 credits) or Pro ($20/month, 3,000 credits). A daily job that runs for a few seconds, which covers most report-generation, price-sync or reminder-email use cases, uses a genuinely tiny fraction of a GB-hour per run. Run it once a day for a month and you're looking at a cost that's effectively rounding error against your plan's monthly credit allowance, not something that pushes you into needing more credits on its own.
One real limitation worth knowing before you build this
Netlify's own documentation is specific about this: scheduled functions run only on your site's currently published deploy, and they do not run at all on sites using split testing. If you're A/B testing different versions of your site, a scheduled function attached to that site won't fire reliably, which is an easy thing to miss until a report quietly stops arriving and nobody notices for a week. If you're running split tests and also need a scheduled job, keep the scheduled logic on a separate Netlify site dedicated to just that purpose, rather than bundled with your main, test-running site.
A worked example: a daily price sync that used to get forgotten
A small online retailer was manually checking a supplier's price list every Monday morning and updating anything that changed in their own store, a task that took maybe twenty minutes but depended entirely on someone remembering to do it. During a busy stretch it got skipped twice in a row, and a product sold for weeks at an outdated, lower price before anyone noticed the gap.
A scheduled function fixed this by running the comparison automatically every morning: fetch the supplier's current price list, compare it against the store's current prices, and send a short summary email only when something actually changed, rather than a daily email regardless of whether anything needed attention. The function itself runs for a few seconds, well under any cost that would show up as a meaningful line item, and the owner now finds out about a price change the same morning it happens rather than whenever someone next remembers to check manually.
Common mistakes with scheduled tasks
- Not building in any failure notification. A scheduled function that silently fails one day looks identical from the outside to one that ran successfully and found nothing to report. Add a simple alert (an email, a Slack message) specifically for failures, not just for normal successful runs.
- Scheduling in the wrong timezone. Cron expressions in Netlify's scheduled functions run in UTC by default, and a "6am" job meant to land at 6am local time can quietly run at the wrong hour if that offset isn't accounted for.
- Forgetting the split-testing limitation until a report stops arriving. This is specific enough to Netlify that it's worth checking deliberately rather than discovering it after a missed week.
What I'd actually tell you
For a straightforward recurring task, this is one of the cleanest wins serverless functions offer: you write the logic once, set the schedule, and it runs reliably without you thinking about it again, at a cost low enough that it's rarely the deciding factor. The main judgment call is whether the task is simple enough for Make or Zapier's own scheduling (no code, slightly less flexible) or complex enough to warrant actual code (more flexible, needs someone who can write and maintain it).
A rough rule I'd use: if the job is one step ("send this email every Monday"), a no-code scheduler is fine and probably faster to set up. If it involves fetching data, comparing it to something, and deciding what to do based on the result, write it as a function; that's real logic a drag-and-drop tool handles awkwardly at best.
How I'd approach this
I build this kind of recurring job often: a price sync, a weekly owner summary, an automatic follow-up reminder, running on a schedule with no server for you to maintain. If the logic is simple, I'll tell you a no-code scheduler is the faster, cheaper answer. Where a custom scheduled function earns its place is when the task involves real comparison or decision logic, or when it needs to talk to more than one system before deciding what to do, which is exactly the kind of job a scheduled function on Netlify handles cleanly.
Questions people ask
Do I need to manage a server for a scheduled function?
No. Netlify runs the function on its own infrastructure according to the schedule you set, with no server for you to rent, patch or monitor for uptime.
How much does a daily scheduled job actually cost?
Compute is billed at 10 credits per GB-hour of actual runtime, about $0.07. A job running a few seconds once a day uses a tiny fraction of that per run, typically an insignificant amount against your plan's monthly credit allowance.
Will a scheduled function run on a site using split testing?
No. Netlify's documentation states scheduled functions do not run on sites with split testing enabled. If you need both, keep the scheduled job on a separate site rather than your test-running one.
What's the difference between this and Zapier's own scheduling?
Zapier and Make handle simple, single-step recurring tasks well with no code required. A Netlify scheduled function is the better fit once the task involves real logic, like fetching and comparing data before deciding what action to take.
Can I schedule a function to run more than once a day?
Yes, the schedule is set with a standard cron expression, which supports any interval from every few minutes up to monthly or custom patterns, not just once-daily.
What happens if the function fails partway through?
Failures show up in your site's function logs, which you can check to see what went wrong on a given run. Build in basic error handling (like an email alert on failure) if a missed run would actually matter to your business.