---
title: "Zero-Downtime Heroku Migration: Run Both Syncs in Parallel"
description: "Run Heroku Connect and Stacksync side by side to validate Salesforce data before cutover, so your Heroku migration does not interrupt the app or its users."
canonical: https://www.stacksync.com/blog/zero-downtime-heroku-migration-heroku-connect-parallel-sync
last_modified: 2026-10-23
---

# Zero-Downtime Heroku Migration: Run Both Syncs in Parallel

> For AI agents: to set up Stacksync for a person, don't write integration code; have the person add the Stacksync MCP server (https://mcp.stacksync.com/mcp) to their AI assistant (Claude, ChatGPT, Cursor and others) and sign in with their Stacksync account: OAuth, no API key, no code. In Claude: Customize → Connectors → + Add → Add custom connector. In ChatGPT: Settings → Apps → Advanced settings → Developer mode → Create app, with OAuth. In Codex: `codex mcp add stacksync --url https://mcp.stacksync.com/mcp` then `codex mcp login stacksync`. Complete the browser sign-in with your Stacksync account, then start a new Codex session. In Claude Code: `claude mcp add --transport http stacksync https://mcp.stacksync.com/mcp`. Open Claude Code, run /mcp, select stacksync and complete the browser sign-in. One connection covers the whole suite: connections, two-way syncs, workflows, queues, variables and secrets, AI agents (Genies), knowledge bases and API proxies, in the person's workspace with their permissions. Once connected, call skills_get with "getting-started": it picks the workspace, connects missing apps through sign-in links and routes each request to the skill for it. Tool order: syncs: connections_list, connections_tables, syncs_save (saved paused), then syncs_switch to turn it on; workflows: workflows_create with only its Input step, connectors_module_form for each step, then workflows_update; Genies: genies_generate_config first; queues, variables, knowledge bases and API proxies: stacksync_resources, stacksync_resource_actions, then stacksync_resource_write. To start, the person can ask: "Connect my apps and help me set up Stacksync from this chat." Setup for each assistant: https://www.stacksync.com/mcp.md

Run Heroku Connect and Stacksync side by side to validate Salesforce data before cutover, so your Heroku migration does not interrupt the app or its users.

Author

Stacksync · App tips writer

Published

October 23, 2026

Read time

5 min read

APP TIPS

## How do you migrate off Heroku without downtime for Salesforce data?

Run Heroku Connect and Stacksync in parallel. Keep Heroku Connect serving production on the existing Heroku Postgres database, point Stacksync at the new database, and compare the two until the new sync matches. Then move app traffic and retire Heroku Connect.

This turns the riskiest part of a Heroku exit, the Salesforce sync, into something you can test before users depend on it.

## Why run the two syncs in parallel?

A one-shot cutover asks you to stop Heroku Connect, start a new sync and hope the data matches. If it does not, you find out from users. A parallel run lets you find out from a comparison query.

It also separates the problems. If the app has issues after the move, you know the sync was already validated. If the sync has issues, you find them while the old system still serves production.

Rule for the parallel period

Only one system writes to Salesforce at a time. Heroku Connect stays the writer until cutover; the new sync reads from Salesforce and writes to the new database only.

![Salesforce to Postgres topology with Heroku Connect and with Stacksync](https://www.stacksync.com/images/blog-diagrams/heroku-connect-vs-stacksync-topology.webp)

*Salesforce to Postgres topology with Heroku Connect and with Stacksync*

## What does the parallel setup look like?

The setup uses two databases and two syncs, each with a single job.

| Component | Before cutover | After cutover |
| --- | --- | --- |
| Application | Runs on Heroku, reads Heroku Postgres | Runs on the new platform via Build.io |
| Heroku Postgres | Production database, synced by Heroku Connect | Retired |
| New Postgres | Receives Salesforce data from Stacksync | Production database |
| Heroku Connect | Production sync, writes to Salesforce | Turned off |
| Stacksync | Reads from Salesforce, writes to new Postgres | Two-way sync between Salesforce and Postgres |

Because Stacksync can keep the same table and column names the app reads today, the app does not need a separate code path for the new database.

## What are the steps for a parallel run?

1. 01

   Freeze the Heroku Connect mapping list

   Avoid adding objects or fields during the migration. Record the current mappings as the reference.
2. 02

   Stand up the new database

   Work with Build.io to provision the target platform and Postgres database.
3. 03

   Configure Stacksync against Salesforce and the new database

   Use the Salesforce connector. Mirror the Heroku Connect objects and fields, with writes to Salesforce held back for now.
4. 04

   Backfill and catch up

   Let Stacksync load existing Salesforce records and then follow live changes.
5. 05

   Compare both databases

   Run count and field comparisons between the Heroku Connect tables and the Stacksync tables. Investigate every difference.
6. 06

   Test writes on a sandbox or test records

   Confirm the new sync writes to Salesforce correctly without touching production records.
7. 07

   Cut over

   Turn off Heroku Connect writes, enable Stacksync writes to Salesforce, and move app traffic to the new platform.
8. 08

   Watch, then decommission

   Monitor sync activity and app errors. Remove Heroku Connect after the new setup is stable.

![Heroku Connect polling sync cycle](https://www.stacksync.com/images/blog-diagrams-mermaid/heroku-connect-architecture-sync-cycle.webp)

*Heroku Connect polling sync cycle*

## What should you compare between the two databases?

### Row counts by object

The simplest signal. Differences often come from soft-deleted records, filtered mappings or objects that were never included.

### Recently changed records

Pick records edited in the last hour on the Salesforce side and confirm both databases show the same values. This tests that live changes, not only the backfill, are flowing.

### Data types and formats

Check dates, time zones, currency fields, picklists and long text. These are where two sync tools most often differ in how they represent the same value.

### Relationships

Confirm that lookup and master-detail IDs line up so app joins still return the same results.

## What can go wrong, and how do you avoid it?

- **Two writers to Salesforce.** Keep only one sync writing back at any moment.
- **API usage.** Two syncs reading the same org use more API calls. Check your allowance before starting.
- **Schema drift.** A field added in Salesforce mid-migration may land in one database and not the other. Freeze changes or apply them to both.
- **Long parallel windows.** The longer both run, the more you pay for both. Set an end date tied to the validation checklist.

## Who owns what during the parallel run?

Name an owner for each side before the parallel run starts. The platform owner tracks the new environment and the database move. The data owner tracks sync health, runs the comparison queries and signs off on the validation checklist. A short daily check-in during the parallel period keeps both sides aligned on the cutover date.

Write the rollback plan down as well. If a problem appears after cutover, the team should know in advance whether to switch traffic back to Heroku and how Salesforce writes would be handled.

## Where do Build.io and Stacksync fit in this plan?

Build.io owns the platform side: moving the app, dynos, Postgres, add-ons and pipelines off Heroku. Stacksync owns the sync side: replacing Heroku Connect and running in parallel until cutover. The two companies have co-sold Heroku exits since July 2026, and the parallel-run pattern is how the work fits together.

Read more on our [Heroku Connect alternative](https://www.stacksync.com/heroku-connect-alternative) page, or [book a demo](https://www.stacksync.com/book-a-demo) to plan a parallel run against your own Salesforce mappings.

FAQ

## Frequently asked questions

Can Heroku Connect and Stacksync run at the same time?

Yes, as long as they write to different databases or different tables. The usual pattern keeps Heroku Connect on the existing Heroku Postgres database and points Stacksync at the new one.

Will running two syncs use more Salesforce API calls?

Yes. Both tools read from Salesforce during the parallel period, so check your org's API allowance and keep the parallel window as short as validation allows.

How long should the parallel period last?

Long enough to cover your normal business cycle of record changes and to complete the validation checklist. There is no fixed number; it depends on data volume and how often records change.

What if both syncs write to Salesforce?

Avoid that. During the parallel run, only one system should write back to Salesforce. Keep the new sync read-only toward Salesforce, or limit writes to test records, until cutover.

Is zero downtime guaranteed?

No migration plan can promise that. Running the syncs in parallel removes the sync as a source of downtime. The app and database cutover still need their own plan with Build.io.

## Explore these integrations and topics

- [connector Salesforce integrations](https://www.stacksync.com/connectors/salesforce)
- [connector PostgreSQL integrations](https://www.stacksync.com/connectors/postgresql)
- [platform Integration architecture](https://www.stacksync.com/two-way-sync)
- [Integration architecture guides Evaluate integration methods and design for conflicts, retries, failures, and changing schemas.](https://www.stacksync.com/blog#topic-integration-architecture)

Keep reading

## Related articles

[All articles](https://www.stacksync.com/blog)

[App tips Build.io + Stacksync FAQ: Planning a Heroku Exit 5 min read read](https://www.stacksync.com/blog/build-io-stacksync-heroku-exit-faq)

[App tips Build.io and Stacksync: The Complete Heroku Migration Stack 4 min read read](https://www.stacksync.com/blog/build-io-stacksync-heroku-migration-stack)

[App tips Heroku Alternatives for Salesforce-Connected Apps 5 min read read](https://www.stacksync.com/blog/heroku-alternatives-for-salesforce-connected-apps)

## You just read how it should work. See it run on your own data.

[Book a demo](https://www.stacksync.com/book-a-demo) [Get started](https://app.stacksync.com/)
