Home>Migrations & Replatforming>Data & Customer Migration>Migrating Past Shopify's 3-Catalog B2B Limit

How do multiple simultaneous B2B catalogs (one per customer segment) migrate to Shopify's 3-catalog limit on non-Plus plans, if we exceed that number?

Shopify caps Basic, Grow and Advanced at 3 active catalogs across all B2B markets, with unlimited catalogs on Plus (Shopify Help Center, September 2026). The count is rarely the binding constraint. On non-Plus plans catalogs attach to B2B markets rather than directly to company locations, so a per-segment model has to be rebuilt around pricing rules, not segments.

Read the limit properly, because two limits are at work

Most planning documents record one number and miss the one that actually decides the migration.

LimitValueSource
Active catalogs, Basic / Grow / Advanced3, "across all your B2B markets"Shopify Help Center, Sep 2026
Catalogs, Shopify PlusUnlimited, plus "direct assignment to companies and locations"Shopify Help Center, Sep 2026
Catalogs assignable to one company location25Shopify Help Center, Sep 2026
Catalogs per store, total10,000Shopify Help Center, Sep 2026
Company locations per company10,000Shopify Help Center, Sep 2026
Price breaks per product10, applied to each variantShopify Help Center, Sep 2026
Fixed prices per API request250Shopify developer docs, Sep 2026

The sentence that matters is this one, verbatim: "On the Basic, Grow, and Advanced plans, you can assign up to 3 active catalogs across all your B2B markets. The Shopify Plus plan offers an unlimited number of catalogs and direct assignment to companies and locations."

So the non-Plus restriction is not simply "three." It is that a catalog attaches to a B2B market, not to an individual company location. A per-segment catalog model is not merely capped on non-Plus; it is attached to the wrong axis. You can have three catalogs and still be unable to express "this one account gets this price list," because the mechanism that does that is the Plus-only direct assignment.

That reframes the migration decision completely. The question stops being "can we fit 12 segments into 3 slots" and becomes "is our pricing actually keyed to geography-style groupings, or to individual accounts."

How many price structures do you actually have?

Count price structures, not catalogs. On most legacy B2B platforms, a catalog is cheap to create and gets created for reasons that are not pricing: a label for a sales territory, a snapshot from a merger, a copy someone made to test something in 2019, a per-account clone that differs from its sibling by one SKU.

Run this before you model anything:

  1. Export every price list with its effective per-SKU price. Not the discount label, the resulting number.
  2. Hash each list. Lists that produce identical prices across the SKU set are one structure, however they are named.
  3. Sort the remainder by distance from list price. A large share will collapse into a small number of percentage bands.
  4. Isolate the genuine exceptions. Contract prices on named SKUs for named accounts. These are real, and they are usually a short list.
  5. Count what is left. That number, not the catalog count, is the input to the plan decision.

In our experience this exercise ends with a smaller number than the client expected, and the gap is the value of running it before choosing a plan.

The four ways past the limit, ranked by what they cost

1. Collapse by pricing rule. Three catalogs is enough for three percentage bands, and a band holds every account whose economics match, regardless of segment label. Quantity breaks live inside a catalog and do not consume a catalog slot, so 30 tiers that are really volume breaks on one list occupy one slot. Cost: the data work above. This is where we start.

2. Use fixed prices inside a band for the genuine exceptions. Fixed prices override the catalog's overall percentage adjustment per product or per variant, so a contract price on 40 SKUs does not need its own catalog. It needs 40 fixed-price rows inside an existing one.

3. Buy a pricing-rules app. Our decision record on the 3-catalog cap scores this BUY when the catalog count is the only blocker, and names SparkLayer at $49 to $299 per month, Wholesale Pricing Discount B2B at $24.99 to $64.99 per month, and BSS B2B Wholesale Pricing at $29 to $99 per month (verified September 2026). Verify current pricing at the listing before you budget; app pricing in this category moves.

4. Upgrade to Plus. Unlimited catalogs and direct company-location assignment. Plus runs $2,500 USD per month on a one-year term or $2,300 on a three-year term. Our record's position, which we hold: upgrade when a second Plus-only feature also justifies it, not for catalog count alone. Paying roughly $2,300 a month to avoid a data-modelling exercise is a poor trade, and the exercise still has to happen eventually because 25 catalogs per company location is a ceiling on Plus too.

When NOT to collapse segments

  • When two lists differ for a contractual reason you can point at. A negotiated agreement is not a naming inconsistency. Keep it and express it as fixed prices.
  • When the lists differ by currency. Catalog currency is a property of the price list, and merging across currencies loses information you will have to reconstruct.
  • When the lists differ by product availability, not price. That is a visibility problem, not a pricing one, and it has its own answer. See the product-visibility page below.
  • When you have not exported the effective prices yet. Every collapse decision made from catalog names rather than from prices is a guess.

The Deploi point of view

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

  • Our take: Collapse by pricing rule, never by customer segment. Most "one catalog per segment" models on legacy platforms are three or four genuine price structures wearing different labels, which is why we scored the catalog ceiling a data-modelling decision rather than an automatic Plus trigger.
  • What we’ve seen: The price-list export and hash is the highest-leverage half day in a B2B migration, and it is almost never in the original plan. It changes the plan recommendation often enough that we now run it before we quote the migration rather than after.
  • What we refuse to quote: a migration price before the price-list export exists. The variable that moves this scope most is the number of genuine price structures, and nobody knows it at the start, including us.
  • Where we disagree: The category treats the 3-catalog cap as a Plus upsell and answers the question with a plan recommendation. We think that is backwards, and expensively so. The cap is a prompt to find out how many prices you really have, and the answer to that question is worth more than the catalogs, because it is the same answer your ERP and your sales team need.

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

Follow-up questions

Do SuiteCommerce's bulk-pricing tables (common in B2B/wholesale setups) migrate to Shopify B2B's volume-pricing rules, or do they need rebuilding?

SuiteCommerce bulk-pricing tables need rebuilding, though not for the reason most teams expect. Shopify allows up to 10 price breaks per product, while a NetSuite quantity pricing schedule allows only 4 non-zero quantity levels (Shopify Help Center and Oracle NetSuite docs, September 2026). The break count fits. The calculation basis does not.

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.

Does customer-specific product visibility (certain SKUs only shown to certain B2B accounts) migrate correctly to Shopify B2B's catalog-assignment model?

Per-account SKU visibility migrates as a binary, and the legacy models it comes from are three-state. SuiteCommerce Personalized Catalog Views offer Display Fully, Disable Purchase, and Disable Purchase and Hide Price (Oracle NetSuite docs, September 2026). Shopify catalogs offer in or out. A visible product the buyer cannot purchase has no native catalog equivalent.

How do multi-location company hierarchies (headquarters plus regional branches, each with different pricing) migrate to Shopify B2B's company/location model?

Shopify B2B has exactly two levels: a company and its company locations. The Company object in the Admin API carries no parent or child company field, so a three-level headquarters-to-region-to-branch tree flattens on import (Shopify developer docs, September 2026). Per-branch pricing survives, because catalogs and payment terms both attach at the location.