Migration Guide

Migrate from Vercel Cron Jobs

Change schedules without redeploying. Proper alerting on failure.

Step by step

1

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" }
  ]
}
2

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
}
3

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.

4

Remove crons from vercel.json

Delete the "crons" block from vercel.json and redeploy. Schedules now live in JustRun — change them without deploying.

5

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.

Ready to migrate?

Free to start. Import in under 2 minutes.

Start Free