Vercel

Monitoring for Vercel Cron Jobs

Vercel Cron Jobs are a clean way to trigger a route on a schedule, but they ship with no alerting. If your cron route throws, times out, or simply does not fire, Vercel will not tell you — the run just disappears into function logs. Adding a heartbeat gives your Vercel crons the missed-run and failure alerts they are missing.

What Vercel Cron does — and doesn’t

A cron entry in your project config calls one of your routes on a schedule. That part is reliable. What is missing is everything after the request: there is no alert when the route returns a 500, no alert when it exceeds the function timeout, and no alert when a run is skipped. You are expected to watch the logs.

Add a heartbeat to your cron route

Do the work, then ping Cronmint at the very end so only a fully successful run checks in. If the route throws before the ping, the missed check-in triggers an alert.

app/api/cron/route.ts
export async function GET() {
  await runScheduledWork();

  // ping last: a thrown error above means no check-in -> you get alerted
  await fetch('https://cronmint.com/ping/YOUR-TOKEN');

  return Response.json({ ok: true });
}

Wire up the schedule

vercel.json
{
  "crons": [{ "path": "/api/cron", "schedule": "0 * * * *" }]
}

Catch runs that never fire

Set the Cronmint heartbeat interval to match your Vercel schedule. If Vercel skips an invocation or the deployment breaks the route, no ping arrives and Cronmint alerts you — the failure a logs-only setup would hide.

Add alerts to your Vercel cron jobs

5 jobs free, no card. Set up your first monitor in about 30 seconds.

Start free

Frequently asked questions

Does Vercel alert me when a cron job fails?

No. Vercel Cron triggers the route but does not send failure or missed-run alerts. You need external monitoring — a heartbeat ping from the route is the simplest approach.

How do I monitor Vercel cron jobs?

Add a heartbeat ping at the end of your cron route and create a matching heartbeat monitor. A successful run checks in; a failed or skipped run does not, and you get alerted.

Why is my Vercel cron not running?

Common causes: the route throws before completing, the function hits its timeout, plan limits on cron frequency, or a deploy changed the path. A heartbeat surfaces all of these because the check-in stops arriving.