Guide

Shopify B2B catalogs and price lists: what the 3-catalog limit forces you to decide

Shopify's native B2B gives every wholesale customer a company, a location and a catalog with its own price list. What it does not give you is a way to assign a catalog directly to a company location unless you are on Shopify Plus — and that single entitlement decides how you have to model wholesale pricing. This guide covers the two mechanisms, the limits each carries, and how to build wholesale pricing that works on both.

The two ways to price for a B2B buyer

Native B2B separates who the buyer is (a company with locations and contacts) from what they see (a catalog containing a price list). Attaching the second to the first happens one of two ways.

Direct company-location catalogs. A catalog is assigned to specific company locations. This is the precise mechanism: this buyer, this location, these prices. It is also entitlement-gated — attempting the assignment without the entitlement fails with UNPERMITTED_ENTITLEMENTS_DIRECT_CATALOG_ASSIGNMENT, which in practice means Shopify Plus.

B2B market catalogs. A catalog is attached to a B2B market, and company locations belong to that market. Available on standard plans, but with a hard ceiling: a shop can have at most 3 active B2B catalogs of this kind. Exceed it and catalog creation fails with B2B_CATALOG_LIMIT_REACHED.

Those two error codes are the whole design constraint. Any wholesale app or custom build has to pick a strategy per shop, and the only honest way to know which applies is to try the assignment and read the error — plan names are not a reliable proxy, since entitlements move.

What "3 active catalogs" forces you to do

Three is enough for pricing tiers and not enough for pricing per customer. If your model is "every wholesale account negotiates its own prices", the market-catalog path cannot express it on a standard plan, and no amount of engineering works around the limit.

What does fit in three:

  • Tiered wholesale — for example Bronze / Silver / Gold at 20% / 30% / 40% off retail, with each company location assigned to the market matching its tier. This covers the majority of real wholesale programs.
  • Regional pricing — one catalog per currency or region, with tier handled through quantity breaks inside the price list instead.
  • A trial tier plus two real tiers — useful when new accounts get standard wholesale until they prove volume.

If you genuinely need per-account pricing, that is a Plus conversation, and it is better to have it before you promise a customer bespoke rates.

Price lists: fixed prices or relative adjustments

Inside a catalog, a price list sets prices either as an adjustment relative to the product's price (a percentage off, applied across the board) or as fixed prices per variant. Both have a place, and mixing them badly is a common source of surprise.

A percentage adjustment stays correct when retail prices change — raise a retail price and wholesale follows. Fixed prices do not: they are a snapshot, and they silently go stale. If your margins depend on the relationship between the two, adjustments are safer. If your wholesale prices are genuinely independent of retail (contract pricing, price-per-kilo, catalog pricing), fixed prices are the honest representation and you accept the maintenance.

Quantity breaks live in the price list too, which is how "cheaper by the case" works without a separate catalog per volume tier — worth exhausting before you spend one of your three catalogs on a volume band.

Currency, and why it constrains catalogs

A B2B catalog is tied to the currency of its market. Selling wholesale in EUR and CHF is therefore two catalogs before you have expressed any tiering at all — half your budget on a standard plan. It is worth deciding early whether you are running multi-currency wholesale or multi-tier wholesale, because on three catalogs you rarely get both.

Payment terms belong to the company, not the catalog

A frequent modelling mistake: trying to express net-30 as a pricing concept. Payment terms attach to the company (and its locations) as a payment-terms template, independent of which catalog they see. Prices and terms are separate axes — a buyer can be on your best tier and still pay up front, or on standard pricing with 30 days to pay.

Keeping them separate also keeps verification meaningful: granting terms is a credit decision, while a registry check tells you a business exists and is registered. Those are different questions, and conflating them is how unpaid invoices happen (see our guide to VAT ID verification).

Getting a new account onto the right prices

The sequence that works, and the order matters:

  1. Create the company and at least one location. The location, not the company, is what carries tax settings, payment terms and catalog membership.
  2. Create the contact and link it to the customer account, so the buyer signs in and lands in B2B context rather than retail.
  3. Assign to the market or catalog according to the strategy the shop's entitlements allow.
  4. Set tax exemption where it applies — an intra-EU B2B buyer with a valid VAT ID is usually exempt, and this is the setting that decides whether their invoices come out with or without VAT.
  5. Record the verification evidence on the company as metafields, including the VIES consultation ID. Six months later, "why did we zero-rate this?" needs an answer.

Each step can fail independently, which is why provisioning should be resumable rather than a single transaction — a half-created company with no catalog assignment is a customer who signs in and sees retail prices.

The short version

Direct company-location catalogs are precise and Plus-gated; B2B market catalogs work everywhere but cap at three active. Decide whether your three go to tiers or to currencies, use price-list adjustments rather than fixed prices unless wholesale is genuinely independent of retail, put quantity breaks in the price list instead of spending a catalog on them, and keep payment terms on the company where they belong. Probe the entitlement rather than guessing from the plan name — the two error codes above are the ground truth.

Verify your next wholesale application automatically

Anmelda checks every B2B application against VIES, Zefix and Companies House, then creates the native Shopify company for you.

Add to Shopify