Migration Guide
Change schedules without redeploying. Proper alerting on failure.
Open your vercel.json and find the "crons" array. Note each path and schedule.
// vercel.json
{
"crons": [
{ "path": "/api/cron/cleanup", "schedule": "0 * * * *" },
{ "path": "/api/cron/reports", "schedule": "0 9 * * 1" }
]
}Protect each route with a shared secret so only JustRun can call it.
// app/api/cron/cleanup/route.ts
export async function GET(req: Request) {
const auth = req.headers.get("x-cron-secret");
if (auth !== process.env.CRON_SECRET) {
return Response.json({ error: "Unauthorized" }, { status: 401 });
}
// ... your cron logic
}For each cron route, create a JustRun job: URL = your Vercel deployment URL + path, schedule = same cron expression, add the x-cron-secret header.
Delete the "crons" block from vercel.json and redeploy. Schedules now live in JustRun — change them without deploying.
Configure Slack, Discord, or PagerDuty alerts — Vercel cron has no failure notifications.
Vercel cron is free but has no failure alerting, no AI diagnostics, no retry policies, and schedules are tied to deployments. JustRun's Hobby plan is $3/mo — worth it for observability alone.
No. The crons block only configures scheduling — removing it has no effect on your app's functionality.
Yes. You can create separate JustRun jobs for preview URLs, or use a fixed production URL for scheduled jobs.