Insights
Shopify 13 min

Shopify B2B Customer-Specific Pricing: Catalogs, Company Accounts, and ERP Integration

How Shopify B2B catalogs, company locations, price lists, quantity rules and ERP sync fit together, which parts need Plus, and a checklist to implement it.

By Samuel Noriega · October 30, 2026

Customer-specific pricing in Shopify B2B runs on three objects: a company with at least one location, a catalog that holds prices and product availability, and the assignment that connects the two. On every plan that supports B2B, you can assign catalogs to B2B markets. Only Shopify Plus lets you assign them directly to a company location. That one difference decides how granular your negotiated pricing can be, and how much of it your ERP has to drive.

This guide is for wholesale distributors, manufacturers and B2B merchants who have outgrown spreadsheets and quote emails. It covers the pricing model, the Plus boundary, an example architecture, ERP synchronization, testing and the mistakes we see most often.

Shugert Marketing
Build B2B Pricing That Fits
Shugert Marketing delivers custom Shopify development and ongoing engineering support for B2B companies building connected commerce solutions.
Explore Shopify engineering

Key takeaways

  • A catalog controls both which products a buyer sees and what they pay. Where you assign it (market or company location) determines how specific your pricing can be.
  • Direct assignment to company locations is Plus-only. Basic, Grow and Advanced use B2B markets, and non-Plus plans are limited in how many catalogs they can run.
  • Keep your ERP as the source of truth for negotiated prices and push them to Shopify price lists by API, keyed on stable company and location IDs.
  • Most pricing bugs come from overlapping catalogs, themes that do not render quantity rules, and syncs that were never tested against a real buyer login.

Table of Contents

How customer-specific pricing works in Shopify B2B

Shopify manages B2B pricing through catalogs. A catalog lets you include or exclude products and set pricing, and it is assigned either to a B2B market or, on Plus, to a company location. Whatever the buyer’s location is assigned decides what they see and what they pay.

The buyer side is built on companies. A B2B customer must be set up as a company with at least one company location. When a buyer logs in, they are prompted to choose the location they are purchasing for. A company can have up to 10,000 locations and 10,000 customers, which covers even large dealer networks.

The company profile also holds the settings that make an account behave like a wholesale account: payment terms, shipping address, contact permissions, catalogs, tax exemptions and checkout settings.

The building blocks

Object What it does Typical wholesale use
Company The business entity you sell to A regional hardware distributor
Company location A purchasing site with its own address, terms and catalogs One warehouse or branch
Catalog Defines product availability and prices “Distributor Tier 2”
Price list (inside a catalog) Percentage adjustment plus fixed prices per variant 30% off list, with fixed prices on key SKUs
Quantity rules and volume pricing Minimums, maximums, increments and price breaks Case packs, pallet breaks
Payment terms When the company pays Net 30 on approved locations

Percentage adjustments and fixed prices

Catalogs support an overall percentage-based adjustment or fixed prices for specific products, and fixed prices override the general adjustment. This is the core mechanic for most distributors: a tier discount off list price as the baseline, with fixed contract prices on the SKUs where the discount does not apply.

The Admin API follows the same logic. Under Shopify’s catalog management documentation, a variant published to a catalog without a fixed price takes its price from the percentage adjustment on the price list. The priceListFixedPricesAdd mutation accepts a maximum of 250 prices per request and replaces any existing fixed price for a variant. Large ERP syncs have to batch accordingly.

Market-based catalogs vs. company-specific pricing

This is the main architectural decision. Both approaches use catalogs. The difference is what the catalog is attached to.

Market-based catalogs. You create a B2B market, such as “All B2B” or “Wholesale West,” and assign a catalog to it. Every company location in that market gets the same prices. Shopify’s market catalog guide gives the example of an All B2B market with its own catalog so B2B and D2C customers see different prices.

Company-specific catalogs. You assign a catalog directly to a company or a company location. Each account can have unique pricing and product assortments. Direct assignment is available only on Shopify Plus.

Factor Market-based (all plans) Company-specific (Plus)
Assignment target B2B market Company or company location
Best for Tiered pricing: bronze, silver, gold Negotiated contract pricing per account
Catalog volume Limited on non-Plus plans Unlimited catalogs
Per-location catalog cap 25, including market-assigned 25, including market-assigned
ERP mapping Customer group to market Customer account to location

Per Shopify’s plan comparison, non-Plus plans are limited to three active catalogs across all B2B markets, while Plus has unlimited catalogs, direct assignment to company locations, and advanced payment features such as deposits and partial payments. A location can hold a maximum of 25 catalogs, and that cap counts both market-assigned and directly assigned catalogs.

The same page notes that B2B-specific storefront and checkout contextualization, meaning different content for B2B versus DTC buyers, is limited to Advanced and Plus. Plan limits change, so confirm them on that page before you commit to an architecture. More B2B and integration guides are in the Shugert blog.

A practical rule for choosing

If you have fewer than a dozen pricing tiers and almost no account-specific contracts, markets are enough, and you may not need Plus for pricing alone. If your ERP holds customer-specific price files, with hundreds of accounts each carrying distinct contract prices, you are modeling something that markets and a three-catalog limit cannot express. That is a Plus build.

To understand how the same model maps to different catalog scopes, this overview of company locations and catalog pricing is a helpful companion to the Shopify documentation.

Quantity rules, volume discounts and order minimums

Quantity rules and volume pricing live in the Products and pricing section of a B2B catalog. You can set them manually or by CSV upload, including minimum and maximum quantities, increments and price breaks.

Two behaviors to design around:

  1. Increments model case packs. If a product ships in cases of 12, set the minimum and the increment to 12. The buyer cannot order 13.
  2. Overlapping catalogs resolve to the lowest price. If the same product appears at different prices in catalogs assigned to a company location, the B2B store shows the lowest price, not including quantity rules or volume pricing breaks. That is useful when you want a promotional catalog to beat the standard one. It is dangerous when an old catalog is still assigned and quietly undercuts a negotiated rate. One exception: when a location matches a B2B market with its own catalog and also has a catalog assigned directly, Shopify shows the most specific price, so the location catalog wins over the market catalog.

Showing the rules to buyers

Setting a rule in admin does not mean the buyer sees it. To display rules on product pages, you need theme code updates in Liquid or JavaScript, or a current free theme: version 8.0.0 or later for quantity rules and 11.0.0 or later for volume pricing. A heavily customized theme will not inherit this automatically. Budget developer time to port it, and test it on collection pages and quick-add components, where it is most often missed.

Negotiated pricing and payment terms

Some prices cannot live in a catalog: one-off quotes, project pricing, a salesperson’s concession. For those, use draft orders. Merchants can quote negotiated prices that differ from catalog pricing. Once you assign a customer and company location, the order reflects the company’s payment and checkout settings.

Payment terms are configured per company, and Shopify’s feature overview describes them as the period a company has to pay an order. Deposits and partial payments are Plus features. If your distributors expect Net 30 on approved accounts and a deposit on custom manufactured goods, that combination points to Plus.

Keep credit decisions in your ERP or finance system. Shopify can carry the terms, but it should not be where credit limits and approvals originate.

Example wholesale pricing architecture

Here is a reference design for a mid-sized distributor on Shopify Plus. It is an illustration, not a client result.

Customer structure

  • One Shopify company per ERP customer account.
  • One company location per ERP ship-to.
  • ERP customer number and ship-to ID stored as metafields on the company and location, alongside Shopify’s own IDs.

Catalog layers

  1. Base wholesale catalog assigned to an All B2B market: percentage-off-list for every approved buyer, plus published product assortment.
  2. Tier catalogs (Tier 1, 2, 3) with percentage adjustments, assigned to the locations in each tier.
  3. Contract catalogs: one per account that has negotiated SKU prices, holding only fixed prices. Shopify’s developer guidance describes pricing-only and publication-only catalogs for merchants with many price lists and fewer assortments, so you can assign several to one location.
  4. Promotional catalog, time-boxed, relying on the lowest-price behavior and removed when the promotion ends.

Rules

  • Quantity rules and volume breaks on the base catalog, so every buyer inherits case packs.
  • Net terms set per company from ERP credit data.
  • Draft orders for quotes and exceptions.

Cap check. Each location can hold 25 catalogs, including market-assigned ones. In this design a typical location uses three or four.

ERP-driven price synchronization

If negotiated prices already exist in an ERP, Shopify should receive them, not be where they are maintained. Two sync patterns dominate, and we cover the trade-offs in depth in our guide to Shopify ERP integration:

  • Event-driven (webhooks and queues): a price change in the ERP triggers an update for the affected variants and price lists. Best for frequent changes and smaller deltas.
  • Batch: a scheduled job sends full or delta price files. Simpler and easier to audit, but a buyer can see stale prices between runs.

Regardless of pattern:

  • Use stable identifiers. When syncing to external systems, unique company and location IDs keep records aligned across platforms. Never match on company name.
  • Make writes idempotent. The fixed-price mutation is an add-and-replace operation, so re-sending the same price is safe. Build on that.
  • Respect the 250-price request limit by chunking, and log every userErrors response.
  • Reconcile nightly. Compare ERP prices with Shopify price lists and alert on drift, rather than assuming the sync worked.
  • Handle deletions deliberately. When a contract ends in the ERP, the fixed price must be removed in Shopify, or the buyer falls back to the percentage adjustment without anyone noticing.

Customer permissions and catalog assignment

Pricing is only correct if the right people are logged into the right location. Each company has contacts, and contact permissions are configured on the company. Decide up front who can order, who can see pricing, and whether a buyer with several locations can switch between them. Because the buyer is prompted to pick a location at login, the location choice determines the price they see. Train your purchasing contacts to check it before building a cart.

On the staff side, restrict who can edit catalogs and company settings. A sales rep who can edit a price list can change every buyer’s price on it.

Do you need apps or custom development?

Native catalogs cover most wholesale pricing. Custom work usually enters in four places:

  • Theme rendering: quantity rules, volume tables and B2B-only content on heavily customized themes.
  • ERP integration: middleware or a custom app to sync prices, terms and inventory by location.
  • Edge cases: pricing logic that catalogs cannot express, such as formula pricing based on cost plus margin. Those often need Shopify Functions or an app.
  • POS: retail staff handling B2B customers may not see catalog prices the way the online store does, a gap merchants regularly raise in Shopify’s community forums. Verify current POS behavior before promising it to sales teams.

Before choosing an app, check whether it works with catalogs or bypasses them. Apps that apply their own discounts can conflict with native price lists and with checkout, and they add a vendor to your pricing path.

Testing before launch

Test with real buyer logins, not just the admin preview.

  1. Create test companies that mirror each tier, plus one with overlapping catalogs.
  2. Log in as a buyer and confirm the price on the product page, collection page, cart and checkout match the ERP.
  3. Verify quantity rules: minimums, increments, and each volume break boundary (the quantity just below and exactly at the break).
  4. Check a buyer with two locations on different tiers.
  5. Confirm payment terms appear on checkout and on the resulting order.
  6. Place a draft order for a negotiated price and confirm it carries company settings.
  7. Run the ERP sync, change a price, and confirm the buyer-facing price updates within your agreed window.
  8. Test a logged-out visitor and a DTC customer to confirm neither sees wholesale prices.

Common implementation errors

  • Stale catalogs left assigned. The lowest-price behavior means an old catalog can override a newer, higher price.
  • Rules set but not displayed. The theme is older than the versions that support quantity rules and volume pricing.
  • Matching on names. Companies get renamed; IDs do not.
  • Designing around the wrong plan. Teams plan 40 company-specific catalogs, then learn non-Plus plans cap active catalogs.
  • Ignoring the 25-catalog cap. Layering tier, contract, promo and regional catalogs adds up faster than expected.
  • No drift monitoring. Syncs fail silently, and the first signal is a buyer email.
  • Pricing logic duplicated in Shopify, the ERP and a spreadsheet, so no one knows which is correct.

Implementation checklist

  • Confirm the plan: markets only, or Plus for direct assignment, unlimited catalogs, deposits and partial payments.
  • Map ERP customers to companies and ship-tos to locations, with stored IDs.
  • Define catalog layers: base, tier, contract, promotional.
  • Set percentage adjustments and fixed prices; set quantity rules and breaks.
  • Configure payment terms per company from ERP credit data.
  • Update or port theme code to display rules everywhere.
  • Build the sync: batching, idempotent writes, error logging, nightly reconciliation.
  • Set contact permissions and staff access.
  • Run the full buyer test script.
  • Pilot with a handful of accounts before migrating the rest.

Our perspective

We approach B2B pricing as an engineering problem with a commercial constraint: the buyer must see the right number every time, and your team must be able to prove it. The expensive failures are rarely missing features. They are architecture choices made before anyone mapped the ERP price structure, followed by a sync nobody monitors. We start by diagnosing the constraint, define scope and acceptance criteria, implement in a controlled environment, QA the release and measure before and after. We do that with senior engineers, with no junior handoffs and no offshore subcontracting, and we do not promise outcomes we cannot control.

— Samuel Noriega

Work with Shugert on B2B pricing

If your pricing lives in an ERP and your catalogs, theme or sync are not behaving, we scope the work as a fixed-price intervention or as ongoing engineering. A Scoped Shopify Intervention starts from $2,500, and Shopify Plus Engineering starts from $9,000 per month, both listed on our pricing page. For catalog architecture, ERP sync and theme work, see our custom Shopify development service.

Ready to scope a Shopify B2B implementation? Request a fixed-price quote.

FAQ

Can I offer customer-specific pricing without Shopify Plus?

Yes, at the market level. On Basic, Grow and Advanced you assign catalogs to B2B markets, so groups of buyers can share a price list. You cannot assign a catalog directly to a company location, and non-Plus plans are limited to three active catalogs across B2B markets, per Shopify’s plan comparison.

What happens if two catalogs price the same product differently for one location?

The B2B store shows the lowest price, not counting quantity rules or volume pricing breaks. Audit assigned catalogs regularly so an outdated one does not undercut a negotiated price.

How many catalogs can one company location have?

A maximum of 25. That limit includes catalogs assigned through a market and catalogs assigned directly to the location.

How do I push ERP prices into Shopify?

Use the Admin API to update price lists, setting fixed prices by variant in batches of up to 250 per request. Key every record on stable company and location IDs, log errors and reconcile against the ERP on a schedule.

Sources