Cronjob.de › Guides › Vercel Cron

Monitoring Vercel Cron: know whether the job ran

A cron job on Vercel calls a route of your app on a schedule, such as /api/cron. That applies to Next.js projects as well as apps built with v0, Lovable or Bolt that you deployed on Vercel. Whether the call came today and went through is in the logs – you get no message. A heartbeat at the end of the route tells you.

Why at all

Why you would not notice otherwise

By its own account Vercel delivers cron invocations “best effort”: most run as scheduled, occasionally an invocation does not reach your function. Then there is no log entry either. Vercel does not retry failed invocations.

On the free Hobby plan there is more: jobs run at most once a day, and Vercel starts them some time within the given hour – so 0 1 * * * runs between 1:00 and 1:59. The time zone is always UTC.

And if a cron invocation hits a redirect, Vercel considers it done. A heartbeat at the end of your route, by contrast, only reports what really went through.

Ping address (example)
https://runcheck.de/a8k3m2x9q1
Schedule
UTC; Hobby once a day, some time within the hour
Applies to
Vercel Cron Jobs, Next.js App Router
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 the rhythm from your vercel.json. On the Hobby plan give it generous leeway, at least two hours, because Vercel starts the job some time within the hour. You receive a ping address of its own, such as https://runcheck.de/a8k3m2x9q1.

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

    Open the route listed under crons in vercel.json and put the check-in after the actual work, before the response. The CRON_SECRET check comes from the Vercel documentation and stays as it is.

    // app/api/cron/route.ts
    import type { NextRequest } from 'next/server';
    
    export async function GET(request: NextRequest) {
      const authHeader = request.headers.get('authorization');
      if (!process.env.CRON_SECRET || authHeader !== `Bearer ${process.env.CRON_SECRET}`) {
        return new Response('Unauthorized', { status: 401 });
      }
    
      // ... your work ...
    
      await fetch('https://runcheck.de/a8k3m2x9q1', { signal: AbortSignal.timeout(10000) }).catch(() => {});
      return Response.json({ success: true });
    }
  3. Deploy and trigger once

    After the next deployment you can run the job by hand in the Vercel dashboard. In your Cronjob.de account, “Waiting for the first check-in …” turns green.

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 invocation does not arrive, the work throws an exception or the function runs into its time limit, the last line is never reached – the check-in is missing. After the leeway we alert you; the next successful run brings the all-clear.

FAQ

Common questions about Vercel Cron

What does the vercel.json entry look like?
Like this, with your route's path and the schedule in UTC: { "crons": [ { "path": "/api/cron", "schedule": "0 5 * * *" } ] }
Why await – would the check-in not go out anyway?
A Vercel Function can be stopped as soon as the response is out. With await it waits for the check-in, ten seconds at most, and errors while checking in are ignored.
Pages Router or another framework?
The check-in is an ordinary fetch call and works in any Vercel Function on Node.js 18 or later. What matters is the place: after the work, before the response.

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 Vercel Cron

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