Consolidating Shopify stores with Graftport: a practical guide
How to use Graftport's Shopify-to-Shopify migration to consolidate multiple brand stores into one: source credentials, what moves, handle-collision mapping, and the idempotent cut-over.
How to use Graftport's Shopify-to-Shopify migration to consolidate multiple brand stores into one: source credentials, what moves, handle-collision mapping, and the idempotent cut-over.
Multi-brand groups that started each brand on a separate Shopify store often reach the same point: the maintenance overhead — separate themes, separate apps, separate catalogues, separate customer databases — starts to outweigh the brand-separation benefit. Consolidating into one store, with Shopify Markets or metafield-based brand flags handling the storefront split, is one of the most common projects Graftport runs. This guide walks through the source setup, the mapping decisions that actually need your attention, the staging verification, and the cut-over sequence.
Consolidations land in one of three shapes:
brand metafield to tag each product's origin brand. A single
homepage, a single checkout, a single customer account system.Graftport handles all three. The choice determines how you configure the mapping — specifically how you handle handle collisions and customer deduplication — but the migration pipeline is the same in each case.
The source is any Shopify store you have admin access to. You connect it via a custom Shopify app on the source store — not a personal admin login. Creating a dedicated app gives you a revocable, scoped token and a clean audit log.
Graftport read access works.Paste this token into Graftport's source credentials field. Read-only access is all Graftport needs from the source; it never writes to the source store.
For the destination store, you need a separate token from a custom app on the destination, with read and write access to every resource you plan to load.
The Shopify-to-Shopify mapping template covers every record a standard Shopify store can hold:
| Resource | Notes |
|---|---|
| Products & variants | Title, body, options, images, SEO fields, every metafield |
| Collections | Manual and rule-based, with parent/child nesting preserved |
| Customers | Profile, addresses, marketing consent, customer notes |
| Orders | Line items, taxes, shipping, fulfillments, refunds, full history |
| Discounts & gift cards | Codes, automatic discounts, outstanding gift card balances |
| 301 redirects | Every existing URL Redirect on the source preserved on the destination |
| Blogs & pages | Every post and page intact, with their authors and publish dates |
| Markets | Multi-currency and multi-language storefronts where supported |
What does not migrate: installed apps and theme code. Apps are owned by Shopify and must be reinstalled on the destination store after the migration. Theme code — Liquid files, JSON templates, assets — is rebuilt or re-imported separately. Graftport moves the data; the store configuration is your team's workstream.
For a straightforward like-for-like consolidation, the default Shopify-to-Shopify template handles most fields automatically. Three areas come up in almost every consolidation:
If two source stores have products with the same handle —
/products/black-tote-bag exists on both — they will collide on the
destination. The products mapping ships a configurable handle rule.
The standard fix is to prefix the handle with a brand slug:
/products/brand-a-black-tote-bag/products/brand-b-black-tote-bagSet this per-migration in the products mapping's handle field, using a
string prefix transform. The corresponding 301 redirects (from
/products/black-tote-bag on each source domain) are written
automatically to the destination.
A customer who shopped from two source stores has an account on each. Graftport identifies duplicates by email address. When the same email already exists on the destination (from an earlier migration run for another brand), Graftport merges the new order history onto the existing customer record rather than creating a duplicate. The customer ends up with a single account and orders from every brand they shopped with.
The same pattern applies to collections: two stores both having a New Arrivals collection will produce a handle collision. Apply the same
brand-prefix rule to collection handles, then create a parent New Arrivals smart collection on the destination that pulls from all
brand-prefixed sources. The structure resolves after your first full
load.
Run the consolidation on a staging destination — a Shopify development store under your Shopify Partner account works well — before touching production. The verification checklist:
If anything looks wrong, edit the mapping (it is versioned — revert if needed), re-run transform only + dry-run, inspect the output in the Data tab, and re-load when the shape is right.
Graftport's idempotency model means re-running is safe: any record already loaded is skipped. The consolidation cut-over follows the same sequence as any Graftport migration:
T −2 hours. Run extract only against each source store. This locks in the final state of each source store's catalogue and order stream at a known timestamp.
T −1 hour. Run transform only + dry-run. Confirm record counts match expectations. No destination writes.
T 0. Run load only (no dry-run). Most records are already on the destination from the staging rehearsal — they are skipped at zero cost. New orders placed since the rehearsal are first-loaded. The delta typically takes a few minutes.
T +5 min. Open the run page. Confirm all resources show succeeded
or completed with errors. For any errors, check whether the failing
records are business-critical before flipping DNS.
T +10 min. Flip DNS to the destination store. The 301 redirects loaded during staging are already in place — customers arriving from bookmarked source-store URLs land on the right destination page.
T +1 hour. Submit the destination sitemap to Search Console. Watch Coverage → Not found for the next two weeks for any missed redirects.
Shopify does not share customer passwords across stores. Every customer who had an account on a source store needs to complete a password reset on the destination. This is a Shopify constraint, not a Graftport one — the customer account, address book, order history, and marketing consent all migrate cleanly; the password rotation is the one thing Shopify controls cross-store.
The standard approach: send a post-launch email announcing the new store and prompting customers to set a new password. Most email platforms can target the segment of migrated customers who have not yet logged in, so you can re-send to non-openers after a week.
Ready to run your first consolidation? Sign up at app.graftport.com — connect a source store, run a dry-run against a staging destination, and see the full record output before a single live write happens.
Connect a source store, dry-run a migration, see the exact Shopify result before a single record lands. The same platform your team will use on go-live night.