Heroku Scheduler is not going away — but it has become very difficult to justify for European developers in 2026.
The problem is not the scheduler itself. It's the pricing model underneath it. Heroku Scheduler requires a running dyno to execute your code. That means you pay for a server that sits idle 99.9% of the time, just so it can wake up and run your script for 30 seconds.
For a single daily Python script, that's €6–7/month in wasted compute. Multiply that across three automations and you're spending €20–25/month on idle infrastructure — before you've written a single line of business logic.
This guide is specifically written for European developers and small businesses evaluating their options in 2026. It covers the honest cost of Heroku, what the alternatives actually offer, and which one fits which situation.
The Heroku Scheduler Problem in Plain Terms
Here's how Heroku Scheduler actually works:
- You write a Python script
- You deploy it to a Heroku dyno (a containerised server that runs continuously)
- Heroku Scheduler triggers your script on a schedule by running a command inside that dyno
The dyno runs whether your script is executing or not. A Basic dyno costs $7/month (approximately €6.50 at current rates). For a script that runs once per day for 10 seconds, you are paying for 99.997% idle time.
The Numbers
Scenario: 1 Python script that sends a daily email report. Execution time: 15 seconds per run.
| Resource | Usage | Cost |
|---|---|---|
| Actual compute used | 365 × 15 seconds = 91 minutes/year | ~€0.001 at market rates |
| What Heroku charges | Basic dyno, 24/7 | €6.50/month = €78/year |
| Overhead ratio | 99.98% idle | — |
You're paying €78/year for 91 minutes of actual work.
Why European Teams Feel This More
In North America, $7/month is a rounding error for many developer budgets. In Europe, where:
- Startup runway is scrutinised more carefully
- VAT adds 20–25% to software costs (UK: 20%, Germany: 19%, France: 20%)
- Many SaaS products have EUR pricing that doesn't map cleanly to USD
...paying €78–125/year per scheduled script adds up quickly. A team running five automation workflows on Heroku is spending €400–600/year net of VAT on idle compute.
What a Heroku Scheduler Alternative Must Provide
Before comparing options, here's what a genuine replacement needs:
| Requirement | Why It Matters |
|---|---|
| pip package support | Heroku lets you install packages. Most cron services don't. |
| Per-execution pricing | The point of switching is to stop paying for idle. |
| Standard cron expressions | 0 9 * * 1 not proprietary formats |
| Execution logs | You need to see stdout per run, not just pass/fail |
| Failure alerts | Email notification when a script errors or times out |
| Environment variables | Secrets storage that doesn't require re-deploying |
| GDPR compliance | If your scripts process personal data, this is non-negotiable |
The Best Heroku Scheduler Alternatives for European Developers in 2026
1. LiteLambda — Closest Equivalent, Lower Cost
LiteLambda is purpose-built for exactly what most Heroku Scheduler users are doing: running scheduled Python scripts without managing a server.
The key difference: LiteLambda uses a credit-based execution model. You pay for the seconds your script actually runs, not for a server sitting idle. For a script running once per day, you use roughly 10–30 credits per execution depending on RAM and CPU configured.
Migration from Heroku is minimal. Your Procfile command python daily_report.py becomes a handler(event, context) function:
# Before (Heroku Scheduler command: python daily_report.py)
import os
import requests
def run_report():
api_key = os.environ.get('API_KEY')
res = requests.get('https://api.example.com/stats',
headers={'Authorization': f'Bearer {api_key}'})
data = res.json()
print(f"Today's signups: {data['signups']}")
print(f"Revenue: €{data['revenue']:.2f}")
if __name__ == '__main__':
run_report()
# After (LiteLambda) — same logic, wrapped in a handler
import os
import requests
def handler(event, context):
"""Daily stats report. Schedule: 0 9 * * * (9 AM UTC daily)"""
api_key = os.environ.get('API_KEY')
res = requests.get('https://api.example.com/stats',
headers={'Authorization': f'Bearer {api_key}'})
data = res.json()
print(f"Today's signups: {data['signups']}")
print(f"Revenue: €{data['revenue']:.2f}")
return {"signups": data['signups'], "revenue": data['revenue']}
The difference is literally: wrap in a function, return a dict instead of printing and exiting.
What you also get that Heroku doesn't have:
- Built-in AI assistant — describe what you want and it writes the script
- Per-run execution logs in the UI (no Heroku log drain needed)
- Failure email alerts included
- Key-value environment variable editor (no need to redeploy to change a secret)
Pricing: Starter plan from €4.99/month — includes enough credits for scripts running every 15 minutes.
2. Railway — Best If You Have a Full Application
Railway is a modern PaaS with a clean cron job feature. If you're already hosting a web application or database on Railway, adding a cron job is natural.
How it works: You deploy your Python project to Railway, then add a Cron service that runs a command on a schedule.
# railway.toml
[deploy]
startCommand = "python cron_job.py"
[cron]
schedule = "0 9 * * *"
Cost: Railway's Hobby plan includes $5 credit/month. A lightweight cron-only service typically uses $0.50–2/month, within the credit. Larger projects or more frequent jobs may exceed the free credit.
Limitation: Similar to Heroku — you're running a persistent service, not pure pay-per-execution. Idle time costs. Also, Railway's infrastructure is US-based primarily, which matters for GDPR data residency.
Best for: Teams already on Railway who want to avoid adding another platform.
3. Render Cron Jobs — Simple, Predictable Pricing
Render offers cron jobs as a first-class feature. You deploy your script as a Cron Job service (not a web service), and it spins up, executes, and shuts down — closer to the pay-per-execution model.
Cost: Cron Job services on Render start at $1/month for the Starter instance type.
Limitation: You need a Dockerfile or a render.yaml. Render auto-detects Python but you still need to define your requirements.txt and entry point. Less zero-config than LiteLambda or Heroku Scheduler.
Best for: Developers comfortable with Dockerfile workflows who want simple hosted crons.
4. Hetzner VPS + Crontab — Best for High-Volume, Budget-Conscious Teams
If you're running many scheduled scripts and want the lowest possible cost, a Hetzner CX11 in Nuremberg or Helsinki costs €3.92/month and can run hundreds of cron jobs simultaneously.
# crontab -e
0 9 * * * /usr/bin/python3 /opt/scripts/daily_report.py >> /var/log/daily_report.log 2>&1
*/30 * * * * /usr/bin/python3 /opt/scripts/price_checker.py >> /var/log/price_checker.log 2>&1
Advantages:
- EU-based (Frankfurt, Helsinki, Nuremberg datacentres)
- Lowest cost per script at scale
- Full control over Python version, packages, system dependencies
- Data stays in the EU
Disadvantages:
- You manage the server: OS updates, log rotation, monitoring, reboots
- No UI — monitoring is SSH + tail -f
- No failure alerts unless you build them
- Setup takes 2–3 hours for a properly configured server
Best for: Technical teams running 10+ scripts where €3.92/month is significantly cheaper than per-script SaaS pricing, and who are comfortable with Linux server administration.
5. GitHub Actions — Best for Developers, Worst for Business Operators
GitHub Actions supports scheduled workflows via on: schedule. For open source projects or internal developer tooling, it's genuinely free and powerful.
# .github/workflows/daily-report.yml
name: Daily Report
on:
schedule:
- cron: '0 9 * * *'
jobs:
run-report:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- run: pip install -r requirements.txt
- run: python daily_report.py
env:
API_KEY: ${{ secrets.API_KEY }}
Cost: Free for public repos. Private repos get 2,000 minutes/month on the free tier, then $0.008/minute.
Limitation: GitHub Actions is not a reliable production scheduler. It can be delayed by minutes or hours during high-load periods on GitHub's infrastructure. The GitHub UI is not built for monitoring business automations — you're watching CI/CD pipelines, not a cron dashboard.
Also: GitHub stores your code and secrets. For teams handling personal data under GDPR, this adds a vendor to your data processing register.
Best for: Internal developer tooling where occasional delays are acceptable and the team is already on GitHub.
Direct Comparison for European Developers
| Platform | Monthly Cost (1 daily script) | EU Data Residency | pip Packages | Execution Logs | AI Code Writing |
|---|---|---|---|---|---|
| LiteLambda | €4.99 | ✅ | ✅ | ✅ | ✅ |
| Heroku Scheduler | €6.50 (Basic dyno) | ❌ US-based | ✅ | Requires log drain | ❌ |
| Railway | €0–2 (within credit) | ❌ US-based | ✅ | ✅ | ❌ |
| Render | €1+ | ❌ US-based | ✅ | ✅ | ❌ |
| Hetzner VPS | €3.92 (shared with other scripts) | ✅ | ✅ | Manual setup | ❌ |
| GitHub Actions | €0 (free tier) | ❌ US-based | ✅ | ✅ | ❌ |
The GDPR Question Every European Team Should Ask
If your scheduled Python scripts process personal data — customer order information, email addresses, analytics events, financial records — every platform in the list above requires scrutiny.
The key GDPR questions for a cron job platform:
1. Where is your code executed?
Railway, Render, and GitHub Actions run primarily on US infrastructure. If your script processes EU personal data, you need to check whether an adequacy decision or Standard Contractual Clauses (SCCs) are in place with the provider.
2. Where are your execution logs stored?
Heroku's log drain sends logs to Papertrail or Loggly — more vendors, more SCCs. LiteLambda stores logs in-product with configurable retention. Hetzner logs stay on your EU server.
3. Who can access your environment variables (secrets)?
Your STRIPE_SECRET_KEY, DATABASE_URL, and SENDGRID_API_KEY are stored somewhere. Make sure you know where and under what conditions the platform can access them.
For most solo developers and small teams, LiteLambda or a Hetzner VPS are the simplest options from a GDPR perspective — fewer vendors, clearer data flows.
How to Migrate From Heroku Scheduler to LiteLambda
Time required: 15–30 minutes per script.
Step 1: Identify your Heroku Scheduler jobs
In the Heroku dashboard, go to your app → Resources → Heroku Scheduler. Note down:
- The command being run (e.g., python send_report.py)
- The schedule (every 10 minutes / hourly / daily)
- The dyno type
Step 2: Wrap your script in a handler function
# Your existing Heroku script (send_report.py)
import os, smtplib
def main():
# existing logic
pass
main() # Called directly when the script runs
# LiteLambda version — same logic, handler wrapper
import os, smtplib
def handler(event, context):
"""
Sends the daily report email.
Schedule: 0 9 * * * (9 AM UTC, every day)
"""
# same existing logic here
return {"status": "sent"}
Step 3: Move your Config Vars
In Heroku: Settings → Config Vars → copy all key-value pairs.
In LiteLambda: Env Vars tab → add the same keys and values.
Step 4: Move your requirements.txt
In LiteLambda, go to the Packages tab and paste your requirements. LiteLambda installs them before the first run automatically.
Step 5: Test with Manual Run
Click Run Manually in LiteLambda. Execution logs appear in real-time. Once passing, activate the cron schedule.
Step 6: Scale down your Heroku dyno
Once your scripts are confirmed working in LiteLambda, remove the Heroku Scheduler jobs and scale your dyno to 0 (or delete the app if it's only used for scheduling).
Summary
Heroku Scheduler works. But in 2026, paying €6–7/month per script for 99.98% idle compute is hard to justify when purpose-built alternatives exist.
For European developers and businesses:
- LiteLambda if you want zero infrastructure management, built-in AI code writing, pip packages, and per-execution pricing from €4.99/month
- Hetzner VPS if you're running many scripts at scale and comfortable with Linux administration
- Railway if you already have a Railway-hosted application and want co-location
- Render if you want Docker-based scheduled jobs with a clean UI
The migration from Heroku is a 15-minute task per script. The savings accumulate every month from the moment you switch.
Start migrating from Heroku in 15 minutes →
Also comparing your options? Read our AWS Lambda cron alternative guide for European developers and our GDPR-compliant Python cron hosting guide.