Migration Guide

Migrate from Heroku Scheduler

No dyno spinup. No 10-minute minimum. Proper failure alerting.

Step by step

1

List your Heroku Scheduler tasks

Open your Heroku app → More → Scheduler. Note each task's command and schedule (10 min, hourly, or daily).

2

Expose tasks as HTTP endpoints

For each scheduler task that runs a command, add a protected HTTP route to your app that performs the same action.

// Express example
app.post('/cron/cleanup', authenticate, async (req, res) => {
  await runCleanup();
  res.json({ ok: true });
});
3

Deploy your changes

Deploy the new routes to Heroku. Test each endpoint manually.

4

Create JustRun jobs

For each task, create a JustRun job: paste the endpoint URL, set the matching schedule. Use the visual wizard or CLI: npx @justrun/cli create.

5

Set up escalation policies

Configure Slack, Discord, or PagerDuty alerts in JustRun. Heroku Scheduler has no failure alerting.

6

Disable Heroku Scheduler tasks

Once JustRun jobs are verified, delete each task from Heroku Scheduler.

Common questions

Heroku Scheduler has no API — why is this manual?

Heroku Scheduler has no export API. Tasks must be recreated. But exposing them as HTTP endpoints is a one-time change that also makes them testable and observable.

Can I run tasks more frequently than Heroku's 10-minute minimum?

Yes. JustRun's Hobby plan ($3/mo) supports 1-minute intervals. Scale plan supports 10-second intervals.

What about tasks that need Heroku config vars?

Your HTTP endpoint already has access to Heroku config vars — no change needed. JustRun just triggers the endpoint.

Ready to migrate?

Free to start. Import in under 2 minutes.

Start Free