Cronjob.de › Guides › Netlify

Monitoring Netlify Scheduled Functions – including apps built with Bolt

Bolt can publish apps to Netlify, and many projects live there anyway. Scheduled tasks then run as a Scheduled Function: a function with a schedule that Netlify starts by itself. Whether it ran today is in the function log – there is no message when a run is missed. A heartbeat at the end of the function tells you.

Why at all

Why you would not notice otherwise

Scheduled Functions only run for the published deploy, in UTC, and may work for 30 seconds at most. If it takes longer, the function ends before it is done.

Whether a run failed is in the function log in the Netlify UI. You have to look yourself.

A heartbeat as the last line only reports runs that really made it to the end. If it is missing, you hear from us.

Ping address (example)
https://runcheck.de/a8k3m2x9q1
Schedule
cron syntax or @hourly, @daily; UTC time zone
Applies to
Netlify Scheduled Functions, @netlify/functions
Sufficient Cronjob.de plan
One heartbeat is free; you see its status in your account. Email alerts come with Plus (€17.88 a year), Slack, Teams and Discord with Unlimited.

Setup

Set up in three steps

What is a heartbeat?

A regular sign of life: after every run your job calls its own address at Cronjob.de. If the call is overdue or the job reports a failure, we alert you. More about heartbeats

  1. Create a heartbeat

    In your account, create a new one under “Heartbeats”, with your function's rhythm and some leeway. You receive a ping address of its own, such as https://runcheck.de/a8k3m2x9q1.

  2. The check-in at the end of the function

    This is a Scheduled Function as in the current Netlify documentation; the check-in goes after the work. A five-second time limit leaves enough of the 30 seconds for your work. You can test with “Run now” on the function's page in the Netlify UI.

    // netlify/functions/daily-sync.mts
    import type { Config } from '@netlify/functions';
    
    export default async (req: Request) => {
      // ... your work ...
      await fetch('https://runcheck.de/a8k3m2x9q1', { signal: AbortSignal.timeout(5000) }).catch(() => {});
    };
    
    export const config: Config = {
      schedule: '@daily',
    };
  3. Older functions with schedule()

    If your project still uses the schedule() helper from @netlify/functions, the check-in goes right before the return in the same way:

    import { schedule } from '@netlify/functions';
    
    export const handler = schedule('@daily', async () => {
      // ... your work ...
      await fetch('https://runcheck.de/a8k3m2x9q1', { signal: AbortSignal.timeout(5000) }).catch(() => {});
      return { statusCode: 200 };
    });

The ready-made lines for Linux, PHP, Python, Node.js, n8n, Make, Supabase and Vercel are on the page Cron job monitoring. Your own ping address appears in your account once you create the heartbeat, with the same lines ready to copy.

When something fails

What happens when a run fails

If the function does not start, fails with an error or ends after 30 seconds before reaching the last line, the check-in is missing. After the leeway we alert you; the next successful run brings the all-clear.

FAQ

Common questions about Netlify

My Bolt app is not on Netlify.
Then the same principle applies to the service your scheduled tasks run on: call the ping address once at the end of the task. If the app uses Supabase, the guide Monitoring Supabase Cron helps.
What if the function hits the 30 seconds?
Then it ends before reaching the last line – the check-in is missing and you hear about it. For longer work Netlify offers Background Functions; the check-in belongs at their end just the same.
Does the function run in Deploy Previews?
According to the Netlify documentation it does not: Scheduled Functions only run for the published deploy. Check-ins therefore only come from production.

Set up your heartbeat now

One heartbeat is free; you see its status in your account. Email alerts come with Plus (€17.88 a year), Slack, Teams and Discord with Unlimited. The first 14 days run on the Unlimited plan, no payment details needed.

Set up a heartbeat for free More about heartbeats

More monitoring guides

Official documentation of Netlify

The details about Netlify and Bolt come from their own documentation, as of October 2026. Please check there whether anything has changed since. Netlify and Bolt are trademarks of their respective owners. This guide comes from Cronjob.de and has no business relationship with these providers.