← Back to writing
Writing · shopify plus

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

By Leo Nguyen · Jun 24, 2026 · 11 min read
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

  1. Discovery and account mapping — inventory every B2B account, its pricing, and its terms.
  2. Store architecture decision — single store with D2C, or separate B2B-only store.
  3. Pricing and catalog modeling — collapse legacy pricing sprawl into catalogs and price lists. (the hard one)
  4. Companies, locations, and buyer accounts — build the B2B customer structure.
  5. Draft orders and payment terms — wire net 30/60/90 and assisted selling.
  6. Integration and data migration — ERP, accounting, and historical orders.
  7. 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:

  1. 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.
  2. 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.
  3. 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.
  4. 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:

  1. 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.
  2. Terms apply correctly. Place a test order on net terms and confirm it lands in pending-payment, not collected at checkout.
  3. 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

Frequently asked
What is the hardest stage of a Shopify Plus B2B migration?
Stage 3 — pricing and catalog modeling — is where most migrations stall. Legacy B2B systems often encode pricing as overlapping rules: customer-group discounts, per-SKU contract prices, volume breaks, and one-off negotiated overrides layered on top of each other. Shopify B2B models this differently: a catalog determines which products a buyer can see and the price list attached to that catalog determines what they pay, assigned per company location. Per Shopify's documentation, the Basic, Grow, and Advanced plans allow up to 3 active catalogs, while Shopify Plus removes that ceiling. The work isn't technical — it's decision work: collapsing a sprawl of legacy pricing rules into a clean set of catalogs and price lists before any data moves. Teams that try to replicate every legacy rule one-to-one are the ones that miss launch dates.
Do I need Shopify Plus for B2B, or is B2B available on lower plans?
Shopify B2B is a native feature set, and a limited version is available on the Basic, Grow, and Advanced plans — but with a cap of 3 active catalogs. Shopify Plus removes the catalog ceiling and unlocks the features most serious wholesale operations need: unlimited catalogs and price lists, checkout customization through Functions and checkout extensibility, more expansion stores, and higher API limits for integrations with an ERP or accounting system. If you have more than a handful of pricing tiers, multiple selling regions, or a custom-priced enterprise segment, Plus is usually the right tier. If you run a small wholesale list with one or two price books, the lower plans can carry you while you validate the model.
How do I migrate net 30/60/90 payment terms to Shopify Plus B2B?
Shopify B2B supports payment terms natively — you define how long a company has to pay (for example, due on receipt, net 15, net 30, net 60, or a fixed date) and assign them per company location, not per customer. During migration you map each legacy account's credit terms onto a Shopify payment-terms template attached to that account's location. Orders placed on terms move into a pending-payment state instead of collecting at checkout, and your finance team reconciles them on the agreed schedule. The migration step that teams forget is reconciling open invoices from the old system — decide whether outstanding balances stay in the legacy platform until cleared or get re-keyed into Shopify as draft orders, because trying to mid-migrate a live receivables ledger is where accounting errors creep in.
How long does a Shopify Plus B2B migration take?
For a mid-sized wholesale operation, plan on 8 to 14 weeks across the seven stages, with pricing and catalog modeling (Stage 3) and integration testing (Stage 6) consuming the most time. The duration is driven less by Shopify's setup, which is fast, and more by data hygiene in the source system: how clean your customer-to-pricing mapping is, how many one-off negotiated prices exist, and how tightly your ERP or accounting system is coupled to the old storefront. A clean source dataset can compress the timeline; a decade of accumulated pricing exceptions can extend it. Running stages 1 through 3 as a decision-and-modeling sprint before touching production data is the single biggest lever on timeline.
Can I run B2B and direct-to-consumer on the same Shopify store?
Yes. Shopify B2B is designed to run on a single store alongside direct-to-consumer, or as a separate B2B-only store. The single-store model shares one product catalog, inventory pool, and theme, with B2B buyers seeing gated catalogs and contract pricing once they log in as a company contact, while retail shoppers see public pricing. The separate-store model gives you a fully independent B2B storefront with its own theme and URL, at the cost of maintaining two stores. The right choice depends on how different your wholesale experience needs to be from retail: shared catalog and light gating favors one store; a radically different wholesale buying flow favors two.
Should I migrate B2B to Shopify Plus natively or go headless?
Start native, go headless only when a concrete requirement forces it. Native Shopify Plus B2B handles companies, locations, gated catalogs, tiered price lists, draft orders, and payment terms without custom front-end code, and it ships with the buyer login, account switching, and reorder flows already built. Headless makes sense when you need a buying experience the native storefront genuinely can't express — a deeply custom configurator, a punchout integration with enterprise procurement systems, or a unified front end across multiple backends. The mistake is going headless by default and rebuilding account management, catalog gating, and the checkout from scratch when the native layer already does it. Migrate native first, prove the model, then add a headless front end against the same B2B backend if and when a requirement demands it.
What breaks most often after a Shopify Plus B2B migration goes live?
Three things, in order: wrong prices showing for the wrong buyer (a catalog or price-list assignment error), payment terms not applying at checkout (a company-location configuration gap), and integration drift where orders don't sync cleanly to the ERP or accounting system. All three are caught by the same discipline — a pre-launch test matrix that logs in as a representative buyer from each pricing tier, places a terms order, and confirms it lands correctly in every downstream system. Skipping that matrix is the most common reason a technically successful migration produces a messy first week.