# Migrate from Heroku to Unbroker: apps, Postgres and DNS step by step

Move the app and the database as two changes. Recreate each process from Git on Unbroker, rehearse a logical Postgres restore, and switch DNS only after that copy works. Keep Heroku available until new writes land on Unbroker.

Canonical URL: https://unbroker.cloud/migrate/heroku
Reviewed: Reviewed October 26, 2026

[Home](https://unbroker.cloud) / [Migrate from Heroku](https://unbroker.cloud/migrate/heroku)

[Start free](https://app.unbroker.cloud/login)

## Before you start: inventory

Write down every dyno, add-on, config var, Scheduler job, and domain before you create anything on Unbroker. Include workers and jobs that can still write after the web process is quiet.

You need the Git repository, access to Heroku config and backups, control of DNS, and an Unbroker organization. Pro is required for API tokens, workers, Dockerfiles, managed Postgres, custom domains, and scheduled jobs. Use a maintenance window if you cannot keep both databases consistent while traffic moves.

## Map Heroku concepts to Unbroker

A Heroku app becomes one or more Unbroker services in a project. The table is the mapping that the product actually supports. Anything missing from the row stays on Heroku or gets rebuilt by you.

Scheduled jobs are the closest equivalent to Heroku Scheduler. On Pro, a job is a command on a service, with a cron expression and a timezone. Commands require the service to be running. Nothing imports an existing Scheduler entry.

| Heroku | On Unbroker | What does not carry over |
| --- | --- | --- |
| Dyno | A service. Free is capped at 250m CPU and 256 MiB. Pro uses the CPU, memory, and replica count you configure. | Dyno names, Private Spaces, and Shield tiers have no matching SKU. |
| Procfile web | A web service from the same Git repository. | The Procfile is not imported. Set the start command on the service. |
| Procfile worker | A worker service. Workers require Pro and do not receive inbound HTTP. | A worker is a long-running process, not a copy of every Heroku process type. |
| Config vars | Service variables, or shared project variables on Pro. Scopes are All, Preview, and Production. | Values are not copied for you. Preview workflows require Pro and never receive Production-only variables. |
| Heroku Postgres | Managed Postgres, or an Apps Postgres node you operate. The smallest managed plan is 1 vCPU, 1 GB RAM, and 10 GB at $21.21 per month, on Pro. | There is no automatic transfer. Move data with a logical backup you restore yourself. |
| Scheduler | Scheduled jobs on Pro: a named command, a cron expression, and a timezone, on a service that is running. | Heroku Scheduler entries are not imported. One-off commands exist too, and they are not a schedule. |
| Add-ons and domains | Custom domains and managed TLS require Pro. Managed engines listed for the API include PostgreSQL, MySQL, Redis, Valkey, MongoDB, Kafka, and OpenSearch. The create flow shows what the region offers. | Other add-ons have no automatic equivalent. Recreate only the ones this account actually provides. |

## Recreate services from Git

Heroku buildpacks do not run on Unbroker. Connect the same repository and branch, then choose a framework preset. Free can build static HTML and managed Node.js. Other recipes, a Dockerfile, and a prebuilt image require Pro. Set the build and start commands yourself when the preset is not enough.

Recreate config vars as service variables. Do not paste secret values into Git. Point the app at the new database URL only after a restore has been tested. A GitHub-connected service can deploy on push to the configured branch. That push is not a data migration.

## Move the database

Take a logical backup of Heroku Postgres with the backup you already trust, restore it into a new Unbroker database, and run the app against that copy before any cutover. Managed Postgres is a provider-operated cluster and requires Pro. The smallest catalogue plan is 1 vCPU, 1 GB RAM, and 10 GB of storage at $21.21 per month, separate from the Pro fee. An Apps Postgres node is a database image you operate yourself. It is not the same product.

Rehearse the restore on a throwaway target: row counts, logins, and a safe read path. For the final cutover, stop writers, take a new backup, restore that backup, and only then send traffic. There is no automatic transfer from Heroku Postgres.

## Switch DNS and keep a rollback path

Prove the app on the Unbroker hostname first. Then lower DNS TTL, point the domain at Unbroker, and keep the Unbroker hostname in place for checks. Custom domains and managed TLS require Pro.

Before Unbroker accepts new writes, you can often put DNS back on Heroku and keep using the unchanged source database. After new writes land on Unbroker, changing DNS is not a data rollback. Reconcile those writes or restore an agreed backup. Leave the Heroku app and its backup available through the observation window you agreed.

## Cost: dyno ladder vs configured capacity

Heroku's pricing page, read on October 26, 2026, lists Eco at $5 per month for a dyno that sleeps after 30 minutes, Basic at $7 per month and always on, and Standard-1X at $25 per month. Larger Performance dynos are listed separately, from $250. Heroku Postgres Essential-0 is listed at $5 per month. Those are Heroku's prices. This page does not add them up into an Unbroker estimate.

Unbroker does not sell dyno tiers. Free is $0 with hard caps. Pro is $25 per month with $25 of credit, and then you pay for the CPU, memory, and replicas you configure while the service runs. A managed database is a separate catalogue price. A Linux cloud server, if you need a machine rather than a platform service, is a fixed monthly size on Pro, with unlimited traffic under fair use. Read both pricing pages with the process size you will actually run.

## FAQ

### Can I migrate a Heroku app to Unbroker?

Yes, by recreating the services from Git and moving data yourself. Buildpacks, Procfiles, add-ons, and Scheduler entries are not imported.

### How do I move Heroku Postgres?

Take a logical backup, restore it into managed Postgres or an Apps Postgres node, and rehearse before cutover. There is no automatic transfer. Managed Postgres requires Pro.

### Is there a Heroku Scheduler equivalent?

Pro has scheduled jobs: a command, a cron expression, and a timezone on a running service. That is not an import of Heroku Scheduler. One-off commands are separate and are not a schedule.

### What does the cutover rollback cover?

Before the destination receives new writes, pointing DNS back at Heroku returns traffic to the unchanged source. After those writes, DNS is not a data rollback.

## Sources

- [Heroku pricing](https://www.heroku.com/pricing/)
- [Migrate from Railway](https://docs.unbroker.cloud/guides/migrate-from-railway)
- [Plans](https://docs.unbroker.cloud/billing/plans)
- [Infrastructure API](https://docs.unbroker.cloud/api/infrastructure)
- [Unbroker pricing](https://unbroker.cloud/pricing)

## Related

- [Heroku alternative](https://unbroker.cloud/alternatives/heroku)
- [Managed Postgres](https://unbroker.cloud/managed-databases/postgres)
- [Deploy Django](https://unbroker.cloud/deploy/django)
- [Deploy Node.js](https://unbroker.cloud/deploy/nodejs)
- [Pricing](https://unbroker.cloud/pricing)
- [Linux cloud servers](https://unbroker.cloud/cloud-servers)
