Migration Guide
Migrate from Heroku Scheduler
No dyno spinup. No 10-minute minimum. Proper failure alerting.
Step by step
List your Heroku Scheduler tasks
Open your Heroku app → More → Scheduler. Note each task's command and schedule (10 min, hourly, or daily).
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 });
});Deploy your changes
Deploy the new routes to Heroku. Test each endpoint manually.
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.
Set up escalation policies
Configure Slack, Discord, or PagerDuty alerts in JustRun. Heroku Scheduler has no failure alerting.
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.