Migration Guide
Migrate from Vercel Cron Jobs
Change schedules without redeploying. Proper alerting on failure.
Step by step
Find your cron routes in vercel.json
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" }
]
}Add authentication to your cron routes
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
}Create JustRun jobs
For each cron route, create a JustRun job: URL = your Vercel deployment URL + path, schedule = same cron expression, add the x-cron-secret header.
Remove crons from vercel.json
Delete the "crons" block from vercel.json and redeploy. Schedules now live in JustRun — change them without deploying.
Set up escalation policies
Configure Slack, Discord, or PagerDuty alerts — Vercel cron has no failure notifications.
Common questions
Vercel cron is free. Why pay for JustRun?
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.
Does removing vercel.json crons affect my build?
No. The crons block only configures scheduling — removing it has no effect on your app's functionality.
Can JustRun call my Vercel preview deployments?
Yes. You can create separate JustRun jobs for preview URLs, or use a fixed production URL for scheduled jobs.