Shopify Plus B2B Wholesale: The 7-Stage Migration Playbook (2026)

Short answer
Migrating a wholesale operation to Shopify Plus B2B is not primarily a technical project — it's a modeling project wrapped in a data migration. Shopify B2B already ships the hard parts natively: companies and locations, gated catalogs, tiered price lists, draft orders, and net 30/60/90 payment terms (Shopify B2B documentation). The failure point is almost never the platform. It's the moment you try to translate a decade of overlapping legacy pricing rules into Shopify's cleaner model without first deciding what those rules should actually become.
This playbook walks through the seven stages we run at LUMA-E, in the order that protects your launch date. Stages 1 through 3 are decision-and-modeling work you should finish before any production data moves. Stages 4 through 7 are build, integrate, test, and cut over. The stage that quietly sinks most migrations is Stage 3 — pricing and catalog modeling — so that's the one we spend the most time on.
The 7 stages at a glance
- Discovery and account mapping — inventory every B2B account, its pricing, and its terms.
- Store architecture decision — single store with D2C, or separate B2B-only store.
- Pricing and catalog modeling — collapse legacy pricing sprawl into catalogs and price lists. (the hard one)
- Companies, locations, and buyer accounts — build the B2B customer structure.
- Draft orders and payment terms — wire net 30/60/90 and assisted selling.
- Integration and data migration — ERP, accounting, and historical orders.
- Test matrix and cutover — buyer-by-buyer verification, then go live.
Stage 1 — Discovery and account mapping
Before anything moves, build one spreadsheet that is the source of truth for the migration. One row per B2B account, with columns for: the customer group or segment it belongs to in the legacy system, the price list or discount structure applied to it, any per-SKU negotiated prices, its credit terms (net 30/60/90 or due-on-receipt), its assigned sales rep, and its open invoice balance.
This sounds tedious because it is. It is also the single most valuable artifact in the whole project. Most legacy B2B systems — Magento with a B2B extension, WooCommerce with a wholesale plugin, or a fully custom backend — have accumulated pricing exceptions that no one fully remembers. The discovery spreadsheet is where those exceptions surface while they're still cheap to handle.
Two questions to answer in this stage, because they shape everything downstream:
- How many genuinely distinct pricing tiers exist? Not how many customer groups the old system has — how many actually-different price structures. Teams routinely discover that forty customer groups resolve to five real pricing tiers plus a handful of one-off contracts.
- Which accounts have open receivables? These need a deliberate plan in Stage 6, not an improvised one during cutover.
For the full pre-launch inventory of B2B settings to capture, our 50-Point Shopify B2B Launch Checklist covers the line items teams most often miss.
Stage 2 — Store architecture decision
Shopify B2B runs two ways: on a single store alongside your direct-to-consumer business, or as a separate B2B-only store (Shopify B2B documentation). This is an architecture decision, not a preference, and reversing it later is expensive — so make it deliberately in Stage 2.
Single store with D2C shares one product catalog, one inventory pool, and one theme. B2B buyers log in as a company contact and see gated catalogs and contract pricing; retail shoppers see public pricing. This is the right call when your wholesale experience is mostly the same products at different prices and terms — which describes most wholesale-plus-retail brands.
Separate B2B-only store gives you a fully independent storefront with its own theme, URL, and buying flow. You pay for it by maintaining two stores and syncing inventory between them. This earns its keep when the wholesale buying experience is genuinely different from retail — a different catalog structure, a different checkout flow, a B2B-only product range, or compliance requirements that don't belong on the consumer site.
A practical default: if you can describe your wholesale experience as "the same store, but gated and re-priced after login," choose one store. If you find yourself describing a fundamentally different buying journey, choose two.
Stage 3 — Pricing and catalog modeling (the stage that stalls migrations)
This is where most Shopify Plus B2B migrations lose their schedule, so it deserves the most attention.
In Shopify B2B, two objects do the work: a catalog controls which products a buyer can see, and a price list attached to that catalog controls what they pay. You assign catalogs per company location, so different buyers see different products at different prices through the same storefront (Shopify catalogs and pricing documentation). It's a clean model — and that cleanliness is exactly the problem when you're coming from a messy one.
Legacy B2B pricing tends to be a stack of rules: a base customer-group discount, plus per-SKU contract prices, plus volume breaks, plus negotiated overrides that someone added in 2021 and never removed. Shopify won't stop you from trying to recreate all of that — but the teams that try are the teams that miss launch.
The discipline that works:
- Collapse before you build. Using the Stage 1 spreadsheet, resolve every account to one of a small number of pricing tiers. Aim for the fewest catalogs that faithfully represent your real commercial structure — typically a handful, not dozens.
- Model price lists as percentage-off where you can, fixed-price where you must. Percentage-off lists scale automatically as your retail prices change; fixed-price lists are for genuinely negotiated contract pricing that shouldn't move.
- Handle one-off contracts explicitly. A single enterprise account with bespoke pricing gets its own catalog. Don't contaminate a clean tier to accommodate one exception.
- Mind the plan ceiling. On the Basic, Grow, and Advanced plans you can assign up to 3 active catalogs; Shopify Plus removes that limit (Shopify catalogs and pricing documentation). If your collapsed model needs more than three catalogs, that's a concrete reason Plus is the right tier.
The output of Stage 3 is a finalized map: every account → one catalog → one price list. Get this signed off by whoever owns commercial pricing before you build anything. Changing it after buyer accounts are assigned means re-touching every company location.
Stage 4 — Companies, locations, and buyer accounts
With the pricing model finalized, the customer structure becomes straightforward. Shopify B2B organizes buyers into companies, each with one or more locations, and each location carries its own catalog assignment, payment terms, and shipping addresses (Shopify B2B documentation). Individual buyers are contacts attached to a company location, with permissions for who can place orders.
The mapping from your Stage 1 spreadsheet is direct: each legacy account becomes a company, each ship-to becomes a location, and each login becomes a contact. The detail worth getting right is the location as the unit of configuration — catalog, terms, and addresses all attach at the location level, not the company or the contact level. Multi-location buyers (a chain with regional warehouses on different terms) are modeled as one company with several distinctly configured locations.
Build a few representative accounts by hand first to validate the model end to end, then bulk-load the rest. Validating the pattern on five accounts is far cheaper than discovering a structural error after importing five hundred.
Stage 5 — Draft orders and payment terms
Two native capabilities cover most of how wholesale actually transacts.
Draft orders are how your sales team sells assisted. A rep builds an order on the buyer's behalf, applies the correct catalog pricing, and sends an invoice — the digital equivalent of the phone-and-email ordering that legacy B2B often runs on. Migrating this is mostly a process change: your reps learn the draft-order flow, and you decide which order types stay assisted versus move to buyer self-service.
Payment terms are the heart of B2B and Shopify supports them natively. You define how long a company has to pay — due on receipt, net 15, net 30, net 60, or a fixed date — and assign the terms per company location (Shopify payment terms documentation). Orders placed on terms move into a pending-payment state rather than collecting at checkout, and finance reconciles on the agreed schedule.
The migration trap here is open receivables. Decide explicitly: do outstanding invoices from the old system stay in the legacy platform until cleared, or get re-keyed into Shopify as draft orders? Pick one and document it. Trying to mid-migrate a live receivables ledger is where accounting errors are born.
Stage 6 — Integration and data migration
This is the second-heaviest stage, because B2B rarely lives alone — it's wired to an ERP, an accounting system, and sometimes a PIM or a 3PL.
Sequence the data migration deliberately:
- Products and inventory first, validated against the live source.
- Companies, locations, and contacts next, from the Stage 4 build.
- Catalogs and price lists, confirmed against the Stage 3 sign-off.
- Historical orders — decide how far back to import. Many teams import 12 to 24 months for buyer reorder history and leave the deep archive in the old system.
For integrations, Shopify Plus's higher API limits matter: a real ERP sync generates far more API traffic than a standard store, and the Plus tier's larger limits are part of why serious B2B operations land there. Build the ERP and accounting connections against a staging store, run a full order lifecycle through them — order placed, terms applied, fulfilled, invoiced, paid, reconciled — and confirm each system receives what it expects before you go near production.
Stage 7 — Test matrix and cutover
The final stage is a discipline, not a feature: a buyer-by-buyer test matrix run before cutover. For each pricing tier, log in as a representative buyer and confirm three things:
- Right products, right prices. The buyer sees exactly their catalog and pays exactly their price-list pricing. This catches catalog and price-list assignment errors — the most common post-launch defect.
- Terms apply correctly. Place a test order on net terms and confirm it lands in pending-payment, not collected at checkout.
- Downstream sync is clean. Confirm the order flows into the ERP and accounting system with the right account, pricing, and terms attached.
Run the matrix across every tier, plus your one-off contract accounts. Only when every row passes do you cut over. A migration that's technically perfect but skips this matrix still produces a chaotic first week — wrong prices for the wrong buyer is the kind of error that erodes wholesale trust fast.
For cutover itself, a phased approach beats a big bang: move a friendly pilot account or segment first, confirm a full real-world order cycle including a terms payment, then bring the rest across. The pilot surfaces the integration edge cases that no test matrix fully anticipates.
The pattern across migrations
The teams that migrate cleanly all do the same thing: they treat stages 1 through 3 as a modeling sprint finished before any production data moves, and they treat Stage 7 as non-negotiable. The platform work in between is fast — Shopify B2B's native features do the heavy lifting. What separates a smooth migration from a messy one is the decision work at the front and the verification discipline at the end.
If you're scoping a move to Shopify Plus B2B and want a second read on your pricing model before you build it, that's exactly the kind of pre-build review we run. You can request an async teardown — we'll look at how your current B2B pricing maps onto catalogs and price lists and send back the model we'd recommend, no call required.
Sources
- Shopify Help Center — Shopify B2B (native B2B features, single vs separate store, plan availability)
- Shopify Help Center — Catalogs and pricing in B2B (catalog gating, per-customer pricing, 3-catalog cap on Basic/Grow/Advanced)
- Shopify Help Center — Setting up payment terms in B2B (net terms assigned per company location)