Monitor Vercel Cron Jobs
Vercel Cron Jobs invoke a route on a schedule defined in vercel.json. Vercel's own dashboard shows recent invocations, but there's no alerting if a run fails or silently stops firing — adding one ping call at the end of the route handler closes that gap.
Setup
Create an incoming monitor
Add a heartbeat monitor in Pingtastic matching your cron schedule, with a grace period a little past the expected run time.
Ping at the end of the route handler
After your job logic succeeds, call the Pingtastic ping URL before returning a response.
export async function GET(request: Request) {
// ...existing job logic...
await fetch('https://ping.pingtastic.net/ping/daily-sync');
return new Response('ok');
}Keep vercel.json and the monitor schedule in sync
Vercel Cron Jobs are defined declaratively in vercel.json — if you change the cron expression there, update the monitor's grace period in Pingtastic to match.
{
"crons": [{ "path": "/api/cron/daily-sync", "schedule": "0 6 * * *" }]
}Gotchas
- ⚠Vercel's free/Hobby plan limits cron job frequency and count — if a cron silently stops firing after a plan change or a vercel.json typo, the missed-ping alert is often the first signal you'll get.
- ⚠If the route handler is protected by Vercel's cron secret header check, make sure the ping call happens inside the authenticated branch — a ping that fires even when the auth check fails will mask real failures.
Questions
Does Vercel alert me if a cron job fails?
Vercel's dashboard shows invocation history, but there's no built-in alerting on failure or on a cron that stops firing entirely — that's the gap a heartbeat ping closes.
What if the function times out before reaching the ping call?
That's the intended behavior — no ping means no "success" signal, so Pingtastic alerts after the grace period exactly as if the job never ran.
Start monitoring your Vercel cron jobs
Set up your first monitor in under five minutes.
Get started — $5/month