Skip to content
SyncMyShop

Pricing and customer terms

Per-customer catalogs: each account sees only what it may order, at its price

Which products an account may order is recorded in your ERP: on a price list, in a contract, in an item group. We turn those records into catalogs in the store, assign them to the right company and location, and keep them in step when a contract, a customer or a product changes.

One store, a different range per account

A B2B agreement covers which products a customer may order as well as what they cost. A chain buys the private label range that is made for it. Regulated items go to certified buyers only. A contract customer orders from the 420 items in its contract and nothing else. A store that shows every account the full range takes orders that sales has to cancel by phone.

With 50 customers the exceptions fit in someone's head. With 500 customers and 8,000 items there are 4,000,000 customer-and-item combinations, and each one is either visible or not. The rules that decide it are already in the ERP.

Price is the other half and is covered on the pricing and customer terms page. This page is about the range, and about keeping range and price together.

How it works

Where the assortment rule lives in the ERP

An ERP rarely has a field called "catalog". The range of an account follows from other records.

Source in the ERP Example Resulting range
A web flag on the item 6,800 of 8,000 items are sold online the outer limit for every account
A restricted item group 240 items for certified buyers, 310 private label items for customer 10432 left out unless the account has the group
The customer's price level Wholesale the standard range of 6,800 minus 550: 6,250 items
Prices on the customer 80 contract items for customer 10432 fixed prices on top of the level
A contract with product restrictions 420 items for customer 10777 this list and nothing else

For customer 10432 that gives 6,250 standard items plus 310 private label items: 6,560 products, 80 of them at a contract price.

How it lands in the store

In Shopify B2B a catalog has two parts: a publication, which holds the products the catalog shows, and a price list. A catalog is assigned to one or more company locations.

From three ERP records to three catalogs on one company location For customer 10432, three records in NetSuite become three catalogs in Shopify B2B. The price level Wholesale becomes a catalog with 6,250 products at 20 percent off. The 80 item prices on the customer become a contract catalog with 80 fixed prices. The private label item group becomes a catalog with 310 products. All three are assigned to the company location, which sees 6,560 products. NetSuite Shopify B2B Price Level Wholesale, 20% off Item Pricing 80 items on customer 10432 Item group private label, 310 items Catalog Wholesale 6,250 products, list minus 20% Catalog Contract 10432 80 fixed prices Catalog Private label 310 products Company location customer 10432 per level per customer per group assigned assigned assigned Customer 10432 sees 6,250 + 310 = 6,560 products. A product that is in two catalogs is shown at the lowest price, here item 10482 at $9.60.
Three ERP records, three catalogs, one company location. Customer 10432 sees 6,250 plus 310 products.

Catalogs are built per rule, not per customer. The example with 500 customers, 6 price levels and 40 contract customers needs:

6  level catalogs, standard range        6,250 products each
6  certified-buyer catalogs, per level     240 products each
1  private label catalog                   310 products
40 contract catalogs                        80 fixed prices each
53 catalogs in total

Customer 10432 has three of them. A company location can hold 25, and a store on Plus 10,000.

Overlay or resolved catalog

Shopify shows the lowest price when a product is in more than one catalog of a location. That matches an ERP that calculates a best price, such as Business Central. It does not match an ERP in which the most specific price wins.

Item 10482 has a contract price of $9.60 for customer 10432, agreed in January. In June the Wholesale price of $10.00 is lowered to $9.40. NetSuite invoices $9.60, because item pricing on the customer overrides the level. The store shows $9.40. On 120 units the store and the invoice differ by 120 times $0.20: $24.00.

For those customers the contract cannot be an overlay. The account gets one resolved catalog that holds its full range with the final price per item, and no level catalog next to it. Each run reports how many contract prices sit above the level price. At 0, overlays are correct.

Throughput

Products are added to a publication with publicationUpdate, at most 50 per call. Prices go in arrays of up to 250.

Step Arithmetic Calls
Six level catalogs 6 times 6,250 divided by 50 750
Six certified-buyer catalogs 6 times 240 divided by 50, rounded up 30
Private label catalog 310 divided by 50, rounded up 7
40 contract overlays 40 times 80 divided by 50, rounded up 80
First load 867
The same 40 customers as resolved catalogs 40 times 6,250 divided by 50 5,000

The first load runs once. A normal day is small: 35 new items in the standard range are one call per level catalog, 6 calls. The resolved design costs 5,000 calls where the overlay costs 80, which is why it is used only for the customers that need it.

What goes wrong quietly

A new product is visible to everyone. A publication can be set to add new products automatically. A private label item created on Monday is then in every catalog with that setting on Monday. New products are assigned by rule, and a product with a restricted group is added to the catalogs of that group only.

Range and price are out of step. An item is added to the contract price list and not to the publication: the customer has a price for a product it cannot find. The other way round, the item is visible at the level price and not at $9.60. Publication and price list are written in the same run and compared afterwards, item by item.

A contract ended last night. The contract of customer 10777 ends on December 31. Nothing changes in the ERP record on January 1, so no event is sent, and the 420 items stay orderable at last year's prices. The integration evaluates start and end dates itself, every night.

A customer moved and the old catalog stayed. Customer 10518 goes from Wholesale to Distributor. The new catalog is assigned and the old one is not removed, so the location has both and the store shows the lower of the two prices. An assignment is replaced, not added.

An order for an item outside the range. A buyer repeats last year's order, which holds an item that left the contract. The order line is checked against the account's range before the order goes to the ERP. The order flow itself is on the orders, customers and shipping page.

What it covers

  • Range per account. Built from item flags, restricted groups, price levels and contracts in the ERP.
  • Range and price together. Publication and price list of each catalog written in one run.
  • Assignment. Catalogs per company and per company location, replaced when the customer changes.
  • Dates. Contracts that start and end, evaluated nightly in the time zone of the ERP.
  • Order check. Every order line validated against the assortment of the account.

Which systems

System How it models a range per account Limit or caveat
Shopify B2B catalog with a publication and a price list, assigned to company locations 3 active catalogs below Plus; on Plus 25 per location and 10,000 per store; lowest price wins
Adobe Commerce B2B shared catalog with custom prices, assigned to companies one public shared catalog for guests; a shared catalog controls category permissions
NetSuite Price Level, Group Pricing and Item Pricing on the customer up to 1,000 price levels; the level is on the customer record, not on an address
SAP Business One price list per business partner, special prices with validity dates a special price overrides all other prices
Business Central sales price lists per customer or customer price group best price: the lowest valid price applies

Shopify documents the catalog limits in its help center page on B2B catalogs, and Adobe describes shared catalogs in the Commerce admin guide. Both were checked on October 3, 2026. Writing publications through Shopify's API needs the write_publications access scope on top of the product scopes.

Because NetSuite records the price level on the customer, a company location with its own catalog is a sub-customer under the parent company. The pair pages for Shopify and NetSuite and Shopify B2B and NetSuite cover that model. Contract prices for logged-in buyers on plans with 3 catalogs are on the customer-specific pricing page.

Where standard connectors stop

Standard connectors and iPaaS platforms cover per-customer catalogs for one combination, as a template next to the managed connector. In that template a price level stands for the catalog: the items with a price on the level are the range. The link between level and catalog is kept in a custom table in the ERP. It needs Shopify Plus and the extra access scope, and B2B orders have to be filtered out of the standard order flow so they are not imported twice.

A range that does not follow the price level has no place in that model: a restricted group, a contract with a product list, a location with its own range. The choice between an overlay and a resolved catalog, which decides whether the store price equals the invoice price, is not a setting there either.

In an integration built for your agreements, the range comes from the records that define it in your ERP, and a dry run lists per account which products and prices would change before anything is written. See dry run and approval. Send us the price list and contract of one customer with exceptions. Tell us what you run.

Frequently asked questions

Do we need Shopify Plus for per-customer catalogs?

For a catalog per customer, yes. Basic, Grow and Advanced allow 3 active catalogs in total, attached to B2B markets, and assigning a catalog directly to a company location is a Plus feature. On Plus a company location can hold up to 25 catalogs and a store up to 10,000. Checked against Shopify's help center on October 3, 2026.

Can different locations of one company have different catalogs?

Yes. In Shopify B2B a catalog is assigned to a company location, so the branch in Reno and the branch in Columbus of the same company can each have their own range and prices. In NetSuite each location is then a sub-customer under the parent company, because the price level is recorded on the customer.

Can a customer order an item outside its catalog?

Not from the storefront, where the item is not shown. Orders also arrive in other ways: a sales rep creates a draft order, a buyer repeats an order from last year, a procurement system sends a purchase order. Every order line is checked against the assortment of that account before the order goes to the ERP, and a line outside it is flagged with the order number and the item.

How fast does a change in the ERP reach the catalog?

A customer who moves to another price level, or a contract that starts or ends, is sent as an event and reaches the store within minutes. Assortment rules on item groups go in a scheduled run. A new product is assigned to its catalogs by rule when it is created and is not visible to any account before that.

What do visitors who are not logged in see?

What you choose: the public range at list price, the public range without prices, or a login page. In Adobe Commerce the public shared catalog is what guests and logged-in customers without a company see. Restricted items are in none of the public catalogs, so they do not appear in search or in a category.

Does this work for buyers who order through a procurement system?

Yes. A buyer who enters the store from a procurement system lands in the same account and sees the same catalog and contract prices as a buyer who logs in directly. The session and the order format are part of PunchOut.

Tell us what you need

Tell us which systems you use and what needs to work better. We reply personally within one working day. We help you define the work, then agree the price and timing before you commit.

  • You know the price and the timeline before you commit to anything
  • We work out the connection that takes the work off your hands
  • We handle the build, hosting, monitoring and maintenance
  • Your team has less information to retype and fewer discrepancies to chase

Suppliers, products, orders per day, a rough estimate is fine.

Or email directly: carsten@syncmyshop.com