Guide

How to Migrate Off Heroku in 2026: Steps and Monthly Costs

Moving a two-process Heroku app with a 10 GB Postgres costs $24 to $60.70 a month. Steps, Heroku export commands, and five hosts, priced in October 2026.

How to Migrate Off Heroku in 2026: Steps and Monthly Costs

A two-process Heroku app with a 10 GB Postgres database costs $59 a month on Heroku today, and $24 to $60.70 a month elsewhere. DigitalOcean App Platform is the cheapest managed option at $25.15, Coolify on a Droplet is cheapest if you run the backups yourself, and Render's Pro workspace is the most expensive at $60.70. Prices checked on October 10, 2026, on each vendor's own pricing page, in USD.

Most of the cost change comes from billing. Heroku charges per dyno and per database plan, and each destination meters something different: a fixed instance per service, a per-second meter, a machine per second, or a flat Droplet. The steps below follow Heroku's export commands and Render's Heroku migration guide, and the cost table prices the same workload on five destinations.

Toolradar data: Toolradar tracks 310 hosting and deployment tools as of October 10, 2026. Render ranks second on its side-by-side comparisons for the category, with 394 in the 90 days to that date.

The scenario you are replacing

The scenario is a web process and a background worker, each on Heroku's Standard-1X dyno ($25 a month, 0.5 GB of RAM), plus a Postgres database on Essential-1 ($9 a month, 10 GB of disk). Both processes run all month, so the Heroku bill is $59 before any add-ons.

Essential-1 shares RAM with the rest of its tier, and the Essential plans allow up to 4 hours of downtime a month. The Standard tier allows 1 hour. For a database that a paying customer depends on, that difference matters as much as the sticker price.

What the same app costs on five hosts

Setup Web and worker Postgres Monthly total Watch for
Heroku today 2 Standard-1X dynos (0.5 GB each) Essential-1, 10 GB, $9 $59 Shared RAM; up to 4 hours of downtime a month on Essential
Render, Pro workspace Pro at $25, plus 2 instances at $7 (0.5 CPU, 512 MB) 1 GB RAM plan at $19, plus 9 GB of extra storage at $0.30 a GB ($2.70) $60.70 Hobby ($0) is for individuals, so $35.70 is the no-fee reference only
Railway, Pro 2 services at about $15.01 each (0.5 vCPU, 0.5 GB) About $21.57 (0.5 vCPU, 1 GB RAM, 10 GB volume) $51.58 Usage-billed; the sizes are our assumption
Fly.io 2 shared-cpu-1x machines at 512 MB, $3.69 each Managed Postgres Basic at $38, plus 10 GB at $0.28 a GB ($2.80) $48.18 No free tier for new organizations
DigitalOcean App Platform 2 containers at 1 vCPU, 512 MiB, $5 each Managed PostgreSQL, 1 GiB RAM, 1 vCPU, $15.15 $25.15 A dedicated egress IP adds $25 a month per app
Coolify on a Droplet One Basic Droplet with 4 GiB RAM and 2 vCPU Postgres in a container on the same Droplet $24 Coolify is free to self-host; backups and patching are yours

Every price is from the vendor's pricing page, read on October 10, 2026, in USD. Totals assume both processes and the database run all month. Egress, backups and Heroku add-ons are not in the totals.

Railway needs its own arithmetic, because it bills per second. A 30-day month is 2,592,000 seconds. At $0.00000772 per vCPU-second, 0.5 vCPU costs $10.01 a month, and at $0.00000386 per GB-second, 0.5 GB costs $5.00. That makes a 0.5 vCPU, 0.5 GB service about $15.01. The database at 0.5 vCPU, 1 GB and a 10 GB volume (volume at $0.00000006 per GB-second) comes to about $21.57. The parts are rounded, so they can differ from the total by a cent.

Fly.io comes third on price in this table, and its $38 Basic Postgres plan is the largest line. The two machines are a small share of its bill, so a cheaper database plan would move the total more than a cheaper machine would.

What changed at Heroku in 2026

On February 6, 2026, Heroku described a move to a sustaining engineering model, with less weight on new features. Its post says card-paying customers keep their pricing, billing and service unchanged, and that Enterprise contracts are no longer offered to new customers. It sets no end-of-life date. The source for these points is Heroku's own post.

Read that as a change in roadmap priority, not an outage notice. What the post does change is the planning horizon. Enterprise is closed to new buyers, so a team starting on Heroku now pays the card price, and that is the number any alternative has to beat.

Step 1: Inventory the formation

Write down every process, config var and add-on before you price anything. Each item maps to a different thing on the new host.

  • Procfile processes. Each process becomes its own service. Render maps web to a web service and every other process to a background worker, and it reuses the Procfile command as the start command.
  • Config vars. Run heroku config --app <app> to read them, then set them on the new host with the same names. Render does not share environment variables between services by default, so the worker needs its own copy.
  • Scheduler jobs. Heroku Scheduler jobs become cron jobs. Render bills cron by the minute, from $0.00016 a minute on its smallest instance, so a short nightly job costs far less than an always-on worker.
  • Release phase. Heroku's release command becomes a pre-deploy command on Render. Render runs it immediately before each deploy, which is the job the release phase did on Heroku.

Step 2: Pick the host by how it bills

The same app lands at different prices because each host bills a different unit, so read the meter before you read the sticker.

  • Render charges a flat workspace fee and a fixed instance price for each service. Its Pro workspace is $25 a month, and Render describes its Hobby workspace as meant for individuals building personal projects, so a team needs Pro.
  • Railway bills vCPU, memory and volume by the second. Its Pro plan has a $20 minimum usage that includes $20 of credits, and unlimited workspace seats.
  • Fly.io bills each machine by the second while it runs and charges no monthly platform fee. New organizations get no free tier, only a trial of up to 2 hours of machine runtime or 7 days.
  • DigitalOcean App Platform charges per container size, and each size comes with a bandwidth allowance. Managed databases are a separate product on DigitalOcean.
  • Coolify on a Droplet is free to self-host, so the server is the whole bill. You also own the backups and the OS updates.

Step 3: Build the new stack before you touch the data

Create the new database first, then the services, so each one can connect to its database on the very first deploy. Render's guide recommends the same order. Deploy each process with the build and start commands from the Procfile, set the database URL and config vars, and put the migration command in the pre-deploy step.

Give the new services a working URL and check the flows that matter (sign-in, checkout, background jobs) while Heroku still serves real users. Problems found here are cheap to fix. Problems found during the cutover cost downtime.

Step 4: Cut over in a maintenance window

Plan one window for the data move. The commands below come from Heroku's maintenance and export docs, and the restore step matches Render's guide.

  1. Turn on maintenance mode so no writes reach the database: heroku maintenance:on --app <app>. Heroku's maintenance mode docs describe the page visitors see.
  2. Capture a backup: heroku pg:backups:capture --app <app>.
  3. Download it: heroku pg:backups:download --app <app>, which saves a file called latest.dump.
  4. Restore into the new database, using the external URL from the new database's dashboard page: pg_restore --verbose --clean --no-acl --no-owner -h <host> -U <user> -d <database> latest.dump. The --clean flag drops existing objects, so restore into an empty database. Heroku's import and export guide gives the same command.
  5. Compare row counts on the largest tables between Heroku and the new database before you switch traffic.
  6. Point the custom domain at the new service. Keep Heroku in maintenance mode until DNS has moved, then keep the Heroku app and its database in place rather than deleting them, so you have a rollback.

After the switch, compare the first full invoice on the new host with the table. The totals assume every process runs all month. A bill well under the table can mean processes that sleep or scale down, and a bill well over it usually means an extra instance, a larger database or bandwidth the table leaves out. Remove the Heroku dynos and databases only after that comparison holds for a full billing cycle.

The window is as long as the dump, the download, the restore and the DNS change. Heroku's docs say PGBackups is meant for databases up to 20 GB. Above that, follow Heroku's guidance for larger databases, and add --jobs to pg_restore to parallelize it. That flag works on custom and directory formats, which the capture produces.

Gotchas before you cut over

  • Render storage only grows. You can raise Postgres storage once every 6 hours and you cannot lower it, so size the disk for the next year, not the last month.
  • Render workers are never free. Render has no free compute plan for background workers, so the worker is a paid instance from day one, even if the web service starts on a free plan.
  • Fly databases outlive their apps. Fly Managed Postgres lives outside your apps, so deleting the app leaves the database and its charge in place.
  • DigitalOcean's development database is not production. Its $7 development database is not backed up by default and has limited capabilities. Use the managed database for anything a customer depends on.
  • Railway scales linearly. Each extra vCPU that runs all month adds about $20.01, so a worker that needs two cores costs more than the table row suggests.

Frequently asked questions

Is Heroku shutting down in 2026?

The February 6, 2026 post sets no end-of-life date. Heroku moved to a sustaining engineering model and said card-paying customers keep their pricing, billing and service. For a team choosing a host, that makes the move a cost decision, not a shutdown deadline.

What is the cheapest place to move a Heroku app?

For the scenario above, Coolify on a Droplet is cheapest at $24 a month, and DigitalOcean App Platform is the cheapest managed option at $25.15. The Droplet figure leaves out your time, your backups and your patching, so count those before you choose it.

Does pg:backups work for a large database?

Heroku describes PGBackups as intended for databases up to 20 GB. Above that size, follow Heroku's guidance for larger databases. For the restore, --jobs runs pg_restore in parallel, and it works on the custom and directory formats the capture produces.

Do I need to rewrite my app to leave Heroku?

A standard app usually moves without code changes, because Render's guide reuses the Procfile's start commands for each service. What needs a replacement is anything that only Heroku provides: the release phase, Heroku Scheduler, and add-ons with no equivalent on the new host.

Which host should a small team pick?

Pick DigitalOcean App Platform if you want managed containers at the lowest managed price. Pick Render if you want the web services, workers and Postgres in one console and can pay $60.70 for it. Pick Fly.io if you want per-second billing, and expect $48.18 a month for this stack. Stay on Heroku while the app depends on an Enterprise contract or on an add-on you cannot replace.

Cite this: Devshot, "How to Migrate Off Heroku in 2026: Steps and Monthly Costs", October 2026.

For the product walkthroughs behind these numbers, start with the Heroku review and the Heroku alternatives list. The per-host reviews are Render, Railway, Fly.io and DigitalOcean. The database options are compared in best Postgres hosting, and the self-hosted route is in best VPS hosting for developers and best self-hosting tools. The tool records are on Toolradar: Render, Railway, Fly.io and DigitalOcean.

Want more cost breakdowns like this one? The Devshot newsletter covers the developer tools and bills that change them. Get it at devshot.co.

Some offers on this page may be paid placements or contain affiliate links.

Devshot: the daily dev & AI brief

Free daily newsletter, read in 5 minutes.

Subscribe free