September 22, 2026 · Muhammad Rehan · More by Muhammad Rehan
The Combinatorial Trap in B2B Catalog Sync
Why mirroring ERP pricing tiers into Shopify B2B catalogs can explode to 500 catalogs, and the split pattern that cuts it to 60.

A catalog in Shopify's B2B Catalogs API is the join point between two separate concerns: what a company location can see, and what it pays. A price list attached to the catalog sets pricing; a publication attached to the catalog sets product visibility. If neither is attached, customers get default variant prices converted to market currency, and if a publication isn't attached, customers logged into their B2B account won't see any products for that location.
The failure mode shows up when an integration treats a catalog as the atomic unit and mirrors an ERP's pricing-tiers-by-product-assortments matrix directly. Fifty pricing tiers times ten product assortments is 500 full catalogs, each carrying its own price list and publication. Shopify's own documentation uses this exact example to illustrate the trap.
Splitting Pricing from Publishing
The fix documented in Shopify's B2B catalogs guide is to stop pairing a price list and a publication inside every catalog. Instead:
- Create one pricing-only catalog per price list, with no publication attached
- Create one publication-only catalog per product assortment, with no price list attached
- Assign the relevant pricing-only and publication-only catalogs to each company location in combination
Fifty pricing tiers plus ten assortments becomes 50 + 10 = 60 catalogs, not 500. Because B2B company locations support multiple catalog assignments, a location can pick up one pricing-only catalog and one publication-only catalog, and the storefront composes them: if multiple pricing catalogs apply, the customer receives the lowest price; for visibility, a product must be published in at least one applicable publication catalog.
Two Ways to Orphan a Resource
Reassignment breaks things silently in two specific directions. Call priceListUpdate to move a price list to a new catalog, and the price list detaches from its old catalog — if that old catalog depended on the price list, it doesn't error, it silently becomes a publishing-only catalog running on store default prices. Call catalogUpdate to point a catalog at a new publication, and the previous publication isn't deleted — it stays in the system as an orphan unless explicitly removed with publicationDelete, following the documented sequence: query the current publication ID, update the catalog, then delete the old one.
For a bulk ERP sync job, priceListFixedPricesAdd and priceListFixedPricesDelete each cap at 250 items per request, and the add mutation is add-and-replace: an existing fixed price for a variant is replaced, not duplicated.
What's Plus-Only Now
As of Shopify's April 2026 changelog, merchants on Basic, Grow, and Advanced plans get up to three active B2B catalogs assigned via Markets, plus company profiles, payment terms, volume pricing, and ACH payments, at no additional cost. Unlimited catalogs for customer-specific pricing and direct catalog assignment to companies and locations, the pattern above depends on, remain exclusive to Plus.