Acro Commerce

B2B mechanics

How does contract pricing actually work in B2B ecommerce, and why does it break native connectors?

A B2B price is a stack, not a number: a list price, a price class rate, a customer-specific negotiated price, and a volume break, resolved into one effective price for one customer on one day. Native ERP connectors break on it because Acumatica and Cin7 calculate that effective price at order entry, while Shopify B2B and BigCommerce want it pre-computed and pushed as a price list, so the connector ships the ingredients and never the answer.

What are the four layers of a B2B price?

Almost every mid-market distributor prices the same way, whatever the ERP is called. There is a published number, a tier the customer sits in, a deal the customer negotiated, and a discount for buying more. Those four layers stack, and the number your inside sales rep sees when they key an order is the result of resolving all four in a fixed order of precedence.

The vocabulary matters here because platform vendors use the same words for different things. When a Shopify partner says "custom pricing" they mean layer two. When your controller says "contract pricing" they usually mean layer three. Those are not the same problem and they do not cost the same to solve.

The number that actually has to appear on the product page is the fourth row of the table below, the effective price. Everything else is an input to it.

The four layers of a B2B price, and what each one is for
CriterionWhat it isWhere it usually livesWhy it exists
List priceOne published number per item. In Acumatica this is the stock item Default Price; in Cin7 Core it is the base sale price.The item record in the ERP.It is the fallback when nothing more specific applies, and the basis every percentage discount is calculated from.
Price class rateThis is the layer that maps most cleanly onto commerce platforms, which is why vendors demo it.A price that applies to a group of customers, not to one. A A price class is a label on a customer account that decides which set of prices they see. Acumatica and most ERPs use price classes so a seller can maintain one price list for a whole tier of customers instead of one per account. label on the customer record decides which set of prices they see.A customer price class in the ERP, mapped to a customer group or catalogue on the storefront.It is how a seller keeps hundreds of accounts priced without maintaining hundreds of price lists.
Customer-specific priceAn absolute price for one account on one item, usually with an effective date and an expiry date. This is what most people mean by Contract pricing is a price that applies to one customer or one group of customers rather than to everyone. In B2B it is normal for the same product to have a different price for every account on the book..A pricing table in the ERP keyed to the customer, populated by a worksheet or a contract.It is the deal the customer signed, and it is what they will phone about when the website disagrees with it.
Volume breakA quantity threshold that changes the unit price. Buy 1 to 49 at one price, 50 to 199 at another.Break quantities attached to any of the three layers above.It moves pallet quantities, and it is the layer most often lost in translation because it multiplies the number of rows.
Effective priceIf you remember one row, remember this one. The effective price is a function, not a field.The single number that survives after precedence is applied for this customer, this item, this quantity, today.Calculated. It is not stored anywhere as a durable value.It is the only number a buyer ever sees, and it is the one thing no connector can simply copy across, because it does not exist until someone asks for it.

Checked against: Acumatica community 17608: Default Price versus the effective sales price, Shopify Help Centre: customizing B2B pricing using catalogs, read 20 August 2026

Where can a price be computed, and why can only one of those places win?

There are exactly four places the effective price can be worked out, and the whole architecture argument on a B2B commerce project is really an argument about which one you are choosing. They are not compatible with each other. Two of them running at once is how a storefront ends up quoting a different number from the order desk.

The reason only one can win is that each place holds a different set of inputs. The ERP knows the contract, the expiry date and the customer’s tier. The storefront knows the cart, the quantity and the session. Middleware knows whatever you tell it. If two of them can produce a price, then sooner or later they will produce two prices, and the business will believe whichever one is worse for you.

Pick the row below that matches how your pricing actually behaves, not the row that matches the platform you have already shortlisted. Deciding The source of truth is the system that gets to be right when two systems disagree. For price, stock and customer terms in an ERP-run business, that is almost always the ERP. for price, field by field, removes more risk from a commerce project than the platform choice does.

The four places a B2B price can be computed, with the real cost of each
CriterionHow it worksWhere it winsWhat it costs
1. The ERP, at order entry onlyThe storefront shows list price or nothing, and the real price is applied when the order lands in Acumatica or Cin7.Catalogues sold at list, or a quote-first business where the price is expected to be confirmed by a person.The buyer cannot self-serve. Any number on the website is provisional, and you have to say so on the page or you will be arguing about it later.
2. The ERP, pushed to the platform as price listsThis is the default path on Shopify B2B and BigCommerce, and it is the right answer more often than architects like to admit.The ERP calculates prices in advance and a connector or scheduled job writes them into platform price lists or catalogues.Tiered pricing that changes a few times a year. This is what native connectors are built for and what platform vendors demo.Prices are as fresh as the last run, not as fresh as the ERP. Effective dating usually does not survive the trip. The row count grows as customers times items times break quantities, and platform caps bite.
3. The platform, from its own rulesThe commerce platform holds the pricing logic itself, as a percentage adjustment, a customer group rate or a rules engine.Discount structures that are genuinely percentage-off-list, with no absolute negotiated prices and no expiry dates.You now maintain pricing in two systems. Every new contract has to be entered twice, and the second entry is the one nobody remembers.
4. Called at runtime, when the page rendersThe storefront asks the ERP, through Middleware is a layer of software that sits between the ERP and the storefront, translating and enforcing rules that neither system holds on its own. It can be a hosted integration platform or a custom service. or a custom service, what this customer pays for this item right now.Deep contract structures, lot or batch pricing, and anything with same-day effective dates. Drupal Commerce and Shopware are built to accept an answer from outside.Budget it as development, not configuration. You take an ERP dependency on your most performance-sensitive pages and you need a written answer for what the page shows when the ERP is mid-upgrade. Caching is mandatory and caching is where the bugs live.

Checked against: Drupal Commerce developer guide: price resolvers and the pricing Context, read 20 August 2026, Shopify Help Centre: catalogs and B2B pricing, read 20 August 2026

What do Shopify B2B, BigCommerce, Shopware and Drupal Commerce actually model?

Every number in this section was read from vendor documentation on 20 August 2026. Shopify in particular revises these limits, so treat the date as part of the fact.

Shopify B2B expresses pricing as catalogues. A catalogue holds a price list and is assigned to companies or company locations. Shopify documents two ways to set a price: an overall percentage adjustment across the catalogue, or fixed prices, and Shopify states that "fixed prices override any overall adjustments that you set". Volume pricing is real: "You can add up to 10 price breaks per product which are applied to each variant." There is a catch worth knowing before you design around it, in Shopify’s own words: once volume pricing applies, "the price becomes fixed. Any overall adjustment discount set on the catalog won’t apply."

The counts are the part that decides platform fit. On Basic, Grow and Advanced you can assign "up to 3 active catalogs across all your B2B markets"; on Shopify Plus you can create an unlimited number. Separately, "Each company location can have a maximum of 25 catalogs assigned to it" and a store can hold "a maximum of 10,000 total catalogs". Where a product appears in more than one catalogue for a buyer, Shopify says "the lowest price displays to the customer", which is a rule you have to design around rather than a rule you can turn off.

BigCommerce reaches customer-specific pricing through customer groups and price lists, and B2B Edition layers company accounts and negotiated quoting on top. Shopware ships an Individual Pricing component in B2B Components that Shopware describes as letting merchants "define catalog-wide discounts and special pricing based on flexible conditions". Drupal Commerce is the outlier: it has no fixed price model at all. A price is produced by a chain of price resolvers, and the resolver receives a Context carrying "The customer assigned to the cart/order" and the store and the time, which means a custom resolver can go and ask your ERP.

Where each platform computes a B2B price, checked against vendor documentation on 20 August 2026
CriterionPricing modelThe limit that bites firstCan it price at runtime from the ERP?
Shopify B2BCatalogues holding price lists, assigned to companies and company locations. Percentage adjustment or fixed prices, plus up to 10 volume price breaks per product.Three active catalogues across all B2B markets on Basic, Grow and Advanced. Unlimited on Plus, with 25 catalogues per company location and 10,000 per store.Not natively. Prices are stored values that something has to write in advance.
BigCommerce B2B EditionCustomer groups and price lists on the BigCommerce catalogue, with company accounts and negotiated quotes added by B2B Edition.Price list maintenance volume rather than a published cap. The quote workflow is the escape hatch when a price is not on a list.Not natively for the product page. The quote path is where a non-list price is normally applied.
ShopwareB2B Components Individual Pricing, described by Shopware as catalogue-wide discounts and special pricing on flexible conditions.Shopware does not publish an edition or licence requirement per component on the component overview page, so confirm entitlement before you design.Yes, with development. The platform is open and the pricing layer is extendable.
Drupal CommerceA chain of price resolvers. The default resolver "simply returns the price that has been set for the product variation", with a priority of -100 so anything you write outranks it.You need a development team. There is no admin screen that gives you contract pricing without one.Yes. This is the design, not an extension of it. The resolver Context carries the customer, the store and the time.

Checked against: Shopify Help Centre: customizing B2B pricing using catalogs (catalogue counts, fixed versus adjustment), read 20 August 2026, Shopify Help Centre: quantity rules and volume pricing (10 price breaks per product), read 20 August 2026, Shopify Help Centre: B2B catalogs, lowest price displays, read 20 August 2026, Shopware developer docs: B2B Components introduction, read 20 August 2026, Drupal Commerce developer guide: prices and price resolvers, read 20 August 2026

Why does a native connector break on contract pricing specifically?

A A native connector is integration software published by the ERP or platform vendor themselves, configured rather than built. Acumatica ships native connectors for Shopify and BigCommerce. is a copier. It reads a field in the ERP and writes a field on the platform. That model works for a product title and it works for a stock quantity, because both of those are stored values. The effective price is not a stored value. It is the output of a calculation the ERP runs when someone asks, and there is no field to copy.

So the connector copies the nearest stored thing instead, which is the list price. Acumatica’s own community, answering a direct question about syncing the current effective sales price to Shopify rather than the Default Price, said "No. Only Default Price is supported." Cin7 has a different version of the same shape: price tiers are a fixed set of columns on the product, so the ceiling is the number of tiers rather than the calculation.

The failure is quiet, which is the dangerous part. Nothing errors. The product syncs, the order syncs, the price is simply wrong, and you find out when an account that has bought at a negotiated price for four years sees list price on the new website and phones their rep. Every contract you sign afterwards widens the gap, because the storefront has no way to learn about it.

There is a second, subtler break. Contract prices usually carry effective and expiry dates. A price list on a commerce platform generally does not, or does so only at the level of the whole list. When you flatten dated prices into an undated list, you have not just lost a feature, you have removed the mechanism that made last year’s price stop applying.

Checked against: Acumatica community 17608: "Only Default Price is supported", Acumatica community 11823: price lists move only on prepare and process, usually overnight

How do you work out in an afternoon which architecture your pricing needs?

You do not need a discovery project for this. You need six numbers out of your own ERP, and any of your finance or sales operations people can pull them. Write them down before you take another platform demo, because they change which demo is relevant.

The read on the answers is blunt. If line one is small and lines three and five are zero, you are a price-list business and a native connector path is genuinely fine. If line three is large or line five is non-zero, you are a runtime-pricing business and you should stop evaluating connectors as though they will solve it.

  1. How many distinct price tiers or price classes do you maintain today? Count them, do not estimate.

  2. How many customers have at least one price that is not derived from their tier?

  3. How many item-and-customer combinations carry a negotiated absolute price? This is the number that decides everything.

  4. How many of those prices carry an effective date or an expiry date in the future?

  5. How often does a price change take effect the same day it is entered? If the answer is never, a nightly push is fresh enough.

  6. How many volume break quantities does your busiest item carry, and does the break structure differ by customer?

Checked against: Shopify Help Centre: three active catalogs on Basic, Grow and Advanced, read 20 August 2026

When is contract pricing not your problem?

Four situations where this whole page is somebody else’s issue, and you should go and solve something that is actually in your way.

One thing we will not call for you. Several vendors, Acumatica included, advertise that company-specific volume break rules synchronize to the storefront. We have not verified that end to end and the community thread we cite does not test it. If break quantities are how your pricing works, prove that in a sandbox with your own data before you believe anyone about it, us included.

  • Your online catalogue is a deliberate subset sold at list, and negotiated accounts stay on EDI or on the phone. That is scoping the problem out, not failing to solve it, and it is often the right first release.

  • Your customer discounts are genuinely percentages off list held on the customer record, with no absolute prices and no expiry dates. A Shopify catalogue with an overall percentage adjustment expresses that directly.

  • You have three or fewer tiers, they change a handful of times a year, and you are on a Shopify plan where three active catalogues is not a constraint.

  • You are already committed to Middleware is a layer of software that sits between the ERP and the storefront, translating and enforcing rules that neither system holds on its own. It can be a hosted integration platform or a custom service. for order and inventory reasons, in which case pricing folds into a decision you have already made and paid for.

The wider picture

This page answers one narrow question. Acro Commerce covers the strategy around it.

Common questions

What is the difference between contract pricing, customer-specific pricing and a price class?
A price class is a label on a customer account that puts them in a pricing tier, so a whole group of customers shares one set of prices. Customer-specific pricing is a price attached to one account rather than a group. Contract pricing is the everyday term for customer-specific pricing that came from a signed agreement, usually with an effective date and an expiry date attached. Commerce platforms model price classes well, model customer-specific prices poorly, and mostly ignore effective dating.
Can Shopify B2B handle customer-specific pricing?
Yes, through catalogues, with two constraints that decide fit. Shopify documented on 20 August 2026 that Basic, Grow and Advanced plans allow "up to 3 active catalogs across all your B2B markets", with unlimited catalogues on Shopify Plus and a maximum of 25 catalogues per company location. The prices in a catalogue are stored values, so something has to calculate and write them in advance; Shopify will not ask your ERP what a customer pays at the moment the page renders.
How many volume price breaks can Shopify B2B hold per product?
Ten. Shopify’s documentation on quantity rules and volume pricing, read on 20 August 2026, states "You can add up to 10 price breaks per product which are applied to each variant." Note the second half of that sentence: the breaks apply per variant, not per product, and Shopify also warns that once volume pricing applies, "the price becomes fixed. Any overall adjustment discount set on the catalog won’t apply."
Is it a bad idea to keep pricing in the ecommerce platform instead of the ERP?
It is a bad idea when the ERP already holds the contracts, which is the normal case for a distributor on Acumatica or Cin7. Keeping prices in the platform means every negotiated deal has to be entered twice, and the second entry is the one that gets skipped. It is a reasonable idea when your pricing is genuinely simple, when the ERP is a bookkeeping system rather than an order entry system, or when the platform is the only place your commercial team will ever log in.
What does a runtime price call cost in page speed?
We do not have first-party measurements we can publish, and any number quoted without naming the ERP, the hosting region and the caching strategy is not worth much. The mechanism to plan around is straightforward: the call has to be cached, the cache has to be invalidated when a price changes, and the page needs a defined behaviour for when the ERP does not answer. Teams that skip the third of those ship a storefront that shows blank prices during an ERP upgrade window.

Last updated 2026-08-20. Facts on this page last checked against source 2026-08-20.