Home>Migrations & Replatforming>Data & Customer Migration>Migrating Customers Who Buy Wholesale and Retail

Does blended B2B/DTC customer data (one person who buys both wholesale and retail) migrate correctly without duplicating or misclassifying the account on Shopify?

One person who buys both wholesale and retail stays one Shopify customer record. A customer can belong to only one company, a single email address can belong to only one customer, and the buying context follows whether that email is assigned to a company location (Shopify Help Center, September 2026). Two source logins must collapse into one.

The model is better than the question implies

Shopify does not have a B2B customer type. It has a customer, and a CompanyContact layered on top: "A person that acts on behalf of the company. A company contact is associated with a retail customer record" (per Shopify developer docs, September 2026).

Which experience the person gets is derived, not stored as a flag: "If a customer's email address is associated with a company location, then the customer gains access to the B2B customer experience. If a customer's email address is associated only with a customer, then the customer gets the D2C customer experience" (per Shopify Help Center, September 2026). And removing someone from B2B does not delete them, it leaves "a D2C customer."

So the architecture handles the blended buyer cleanly. What breaks is the import, because of three rules that interact.

The three rules, and what they do to your data

RuleSourceConsequence on import
A customer can be added to only one companyShopify Help Center, Sep 2026A buyer purchasing for two unrelated companies cannot be modelled as one record
A single email address can be used by only one customerShopify Help Center, Sep 2026Two source logins with the same email must merge, or one must change
Legacy customer accounts cannot be used for B2BShopify Help Center, Sep 2026The store must be on the newer customer accounts before any of this works

Matrixify's B2B import documentation states the first rule in the same terms: "One Customer of the store can exist only in one Company," and the same customer cannot be linked to several companies.

The four source patterns, and the correct target for each

1. Same email, one wholesale login and one retail login. The commonest pattern and the easiest to get wrong. There is exactly one target record. Merge order history onto it, assign it to the company location, and accept that the person now sees the B2B experience when signed in. Do not create name+wholesale@ to preserve two records; that duplicates a human being permanently and splits their history forever.

2. Different emails, same person. Work email for wholesale, personal email for retail. Shopify sees two customers, which is correct and not a bug. Leave them separate unless the business genuinely needs one view, and if it does, that view belongs in your CRM rather than in Shopify.

3. Same person buying for two unrelated companies. A consultant or a rep who orders for two clients. The one-company rule blocks it. Options are one email per company, which is two customer records and is the honest model, or one company with both as locations, which is wrong if the companies are unrelated. Find these before the import; they are rare and they will stall a load.

4. A staff account, an internal test account, or a shared inbox. orders@company.com used by four people. Import it as one customer assigned to the location. Remember the ceilings: 50 customers per company location, 10,000 per company.

Why the "wholesale customer tag" habit does not port

Blended stores on older platforms and on pre-B2B Shopify used a customer tag plus theme logic to gate wholesale pricing. That mechanism still exists and it is no longer the mechanism. In native B2B, entitlement follows company-location assignment and catalogs. Importing the tags is harmless and importing the logic is not: two entitlement systems on one storefront produce a buyer who gets wholesale prices from one path and retail prices from another. Pick the catalog model and retire the tag logic in the same release.

Migration order

  1. Deduplicate on email across both source systems first, before anything touches Shopify. This is the whole game.
  2. Flag every email that appears in both wholesale and retail. That list is your merge decision list and it needs a business owner.
  3. Resolve the one-company conflicts. Small list, long conversations.
  4. Confirm the store is on the newer customer accounts. Legacy accounts are a hard blocker for B2B.
  5. Import customers, then companies and locations, then assign contacts with roles. Order matters; contacts cannot be assigned to locations that do not exist.
  6. Import historical orders last. B2B orders come through the orderCreate mutation with companyLocationId and customer.toAssociate, and "the customer must have a role assignment to the specified company location. If the customer doesn't have a role assignment to that location, then an error is returned" (per Shopify developer docs, September 2026).
  7. Spot-check the blended accounts on the storefront, signed in, on both a B2B and a retail product.

When NOT to merge

  • When the two identities have genuinely different billing entities. A person buying for their employer and for their household are two commercial relationships, and separate emails is the correct model.
  • When merging would expose one side's order history to the other. A shared company inbox that can see an individual's personal retail orders is a privacy problem you created during a data migration.
  • When you have not got a business owner for the merge list. Merges are irreversible in practice. Somebody signs.

The Deploi point of view

Our own position, from building on Shopify. Separate from the facts above.

  • Our take: Deduplicate on email before the migration starts, not during it. Every blended-account problem we have seen traces back to two source systems that were never reconciled, and the reconciliation is a business decision that gets made badly under import deadline pressure.
  • What we’ve seen: The name+wholesale@ workaround is the tell that a merge decision was avoided. It passes the import, it looks tidy, and it permanently splits one customer's history across two records that nobody will ever rejoin. When we find it in a source system, we treat it as debt to clear during the migration rather than a pattern to preserve.
  • Where we disagree: Blended B2B and D2C is usually presented as a store-architecture question, one store or two. That decision matters much less than the customer-identity decision underneath it, which is the same in both architectures and gets skipped in both. Answer the identity question first and the store question gets easier.
  • What this page adds: that a company contact is layered onto an ordinary retail customer record rather than being a separate type, that the buying experience is derived from company-location association rather than stored as a flag, the three rules that constrain the import and the four source patterns each one breaks, and why importing legacy wholesale tag logic alongside catalogs creates two competing entitlement systems.

Reviewed by Martin Dejnicki, Director of SEO & AI Search. Facts verified 2026-09-14.