Skip to content
SyncMyShop

Integrations

Pricing and customer terms: every buyer sees the deal you agreed

Price levels, contract prices, quantity breaks and payment terms live in your ERP. A logged-in buyer has to see the same price in the store that the ERP will put on the invoice. We build that integration to your pricing rules, host it and run it.

Which system owns the price?

The ERP owns the price, because the ERP writes the invoice. A price in the store that differs from the invoice produces a credit note, a phone call or both. The store receives prices and never sends one back.

Data Owner Direction When it has to arrive
List price per item ERP to the store scheduled, daily
Price level per customer group ERP to the store scheduled, and on change
Contract price per customer ERP to the store within minutes of the change
Quantity breaks ERP to the store with the price they belong to
Payment terms per customer ERP to the store checkout on change
Promotion created in the store store stays in the store excluded from the price flow
Price on a placed order store at capture to the ERP with the order

A general price is the simple part: one number per item. B2B pricing is the rest of the table. At 50 customers the exceptions are manageable by hand. At 500 customers there are thousands of customer-and-item combinations, and each one is a place where the store and the invoice can differ.

Pricing is one of the five flows on the integrations overview.

The four price layers

A B2B price is built from layers, from general to specific.

Four price layers for item 10482, from general to specific The price of item 10482 comes from four layers: a list price of 12.50 dollars, a Wholesale price level of 10.00, a quantity break of 9.50 from 100 units, and a contract price of 9.60 for customer 10432. Each layer is more specific than the one above it. more specific $12.50 List price Base price of the item in the ERP Wholesale: $10.00 Price level Price list for a customer group 100+ units: $9.50 Quantity break Price from a minimum quantity customer 10432: $9.60 Contract price Fixed price for one customer, with dates For 120 units, a most-specific-wins rule charges customer 10432 $9.60 a unit: $1,152.00. A lowest-price rule charges $9.50: $1,140.00. The store has to apply the rule the ERP applies.
One item, four layers. Which layer wins depends on the rule your ERP applies.

Take item 10482 with a list price of $12.50. The Wholesale price level gives 20% off: 12.50 times 0.80 is $10.00. From 100 units a quantity break gives 5% more: 10.00 times 0.95 is $9.50. Customer 10432 has a contract price of $9.60, valid from January 1 to December 31, 2026.

Customer 10432 orders 120 units. Which price applies depends on the rule in the ERP, and the three ERPs below do not use the same one:

ERP Rule Price for 120 units
NetSuite item pricing on the customer overrides group pricing, which overrides the customer's price level $9.60, total $1,152.00
SAP Business One a special price for a business partner overrides all other prices $9.60, total $1,152.00
Business Central best price: the lowest price with the highest line discount that is valid on the date $9.50, total $1,140.00

The difference is $12.00 on one order line. A store that applies "lowest price wins" in front of an ERP that applies "most specific wins" is wrong on every order where a contract price sits above a quantity break. The integration reproduces the rule of the ERP it is connected to.

Discounts come in three forms: a percentage, an amount and a replacement net price. They stop being interchangeable when they stack. 20% and then 5% is 24% off, not 25%: 12.50 times 0.76 is $9.50, while 12.50 times 0.75 is $9.375. On 120 units that is $15.00.

What actually moves

No black box: these are the fields in a price flow.

Field Example Note
List price 12.50 USD per item, per currency
Price level Wholesale: 10.00 NetSuite allows up to 1,000 price levels
Customer assignment 10432: Wholesale which customer sees which level
Contract price 10482: 9.60 with valid-from and valid-to dates
Quantity break 100+: 9.50 Shopify allows 10 breaks per product
Unit of measure each, box of 12 the unit the price is quoted in
Order increment and minimum 12, 24 quantity rules in the store
Payment terms Net 30 shown at checkout

Inside the integration a price record has one shape, whatever the source and target are:

{
  "sku": "10482",
  "currency": "USD",
  "unit": "each",
  "list_price": "12.50",
  "levels": [
    { "level": "Wholesale", "price": "10.00" }
  ],
  "quantity_breaks": [
    { "level": "Wholesale", "min_qty": 100, "price": "9.50" }
  ],
  "contracts": [
    { "customer": "10432", "price": "9.60",
      "valid_from": "2026-01-01", "valid_to": "2026-12-31" }
  ]
}

Amounts are decimal text with a currency, never a floating-point number and never a bare integer. Dates are ISO 8601.

Where the fields come from differs per ERP. In NetSuite a customer has a Price Level field, a Group Pricing list that sets a level per pricing group, and an Item Pricing list that sets a level or price per item. In SAP Business One an item has a price per price list, and a special price for a business partner carries validity periods with a quantity scale inside each period. In Business Central a sales price list applies to a customer, a customer price group or all customers, with a minimum quantity, a unit of measure and a starting and ending date per line.

NetSuite pricing fields mapped to Shopify B2B The price level on a NetSuite customer maps to a Shopify catalog and the percentage adjustment of its price list. Group pricing and item pricing become fixed prices per variant. Quantity pricing becomes quantity price breaks, of which Shopify allows 10 per product. Terms map to payment terms. NetSuite customer and item Shopify B2B Price Level Wholesale Group Pricing Fasteners: Contract A Item Pricing 10482: 9.60 USD Quantity pricing 100+: 9.50 Terms Net 30 Catalog Wholesale 3 active below Plus PriceList adjustment 20% below list PriceList fixed price variant 10482: 9.60 Quantity price break minimum 100: 9.50 10 breaks per product Payment terms Net 30 per variant
Where each NetSuite pricing field lands in Shopify B2B.

On the store side, Shopify B2B holds prices in a price list attached to a catalog. A price list has a percentage adjustment against the base price and fixed prices per variant that override it. Payment terms on a company location are net 7, 15, 30, 45, 60 or 90, or due on fulfillment. Adobe Commerce B2B uses shared catalogs with custom prices per company. A credit limit, a PO number and a tax exemption travel with the customer and the order; those are part of B2B terms in the orders flow.

What goes wrong quietly

A factor of 100. One system sends 12.50, another sends 1250 and means cents. Read the wrong way, a $12.50 item is published at $1,250.00, or at $0.13. Every amount is carried with its currency and its unit, and a run in which a price moves by more than a set percentage is held for approval.

Rounding per unit or per line. A unit price of $9.375 times 120 is $1,125.00. Rounded to $9.38 first, it is $1,125.60. The store and the ERP differ by 60 cents, the payment does not match the invoice, and automatic matching in accounts receivable stops. The integration rounds where the ERP rounds. The notes on money, tax and rounding work through the cases.

Price per box, sold per unit. The ERP price is $114.00 per box of 12 and the store sells single units. Published without the conversion, one unit costs $114.00 instead of $9.50. The unit of measure moves with the price, and the conversion factor comes from the item record. See units of measure.

A contract that expired last night. The contract price for customer 10432 ends on December 31. On January 1 nothing changes in the ERP record, so no change event is sent, and the store keeps showing $9.60. The integration evaluates the valid-from and valid-to dates itself, every night, in the time zone of the ERP.

A promotion overwritten by the next run. Marketing sets item 10482 to $8.99 in the store for a week. At 02:00 the price run writes $12.50 back. Products with a manual arrangement go on an exclusion list with an end date, and the run skips them.

A price change while an order is placed. A buyer adds 120 units at $9.50 at 1:55 PM. At 2:02 PM the ERP price changes to $9.80. The order arrives at 2:05 PM with $9.50. The rule is set once: the confirmed price stands and the ERP imports the order with that price, with the difference of $36.00 flagged on the order.

Tax counted in. A list price that includes tax in one system and excludes it in the other is off by the tax rate on every item. Each price field is marked as including or excluding tax, per source.

Throughput and limits

A catalog of 8,000 items and 500 B2B customers is 4,000,000 customer-and-item prices when every combination is written out. Almost none of those are distinct. The same catalog stored as layers:

6 price levels x 8,000 items          48,000 prices
40 customers with a contract,
  80 contract items each               3,200 prices
total                                 51,200 prices

Shopify accepts up to 250 items in an array input, so 48,000 level prices are 192 calls and 3,200 contract prices are 13. A nightly change of 600 prices on one level is 3 calls.

System Limit Number
Shopify B2B active catalogs 3 on Basic, Grow and Advanced; on Plus 10,000 per store and 25 per company location
Shopify B2B catalog assigned directly to a company location Plus only
Shopify B2B quantity price breaks 10 per product
Shopify, every API items in an array input 250
Shopify GraphQL Admin API points restored per second 100 standard, 200 Advanced, 1,000 Plus
NetSuite price levels 1,000
NetSuite concurrent requests per account 5 Standard, 15 Premium, 20 Enterprise and Ultimate
Business Central online OData requests per user 6,000 per 5 minutes

Sources: Shopify B2B features by plan, NetSuite price levels for customers and Business Central operational limits, checked on October 3, 2026.

The catalog limit decides the design. The example above needs 6 catalogs for the levels and 40 for the contract customers: 46. That fits on Plus. On a plan with 3 active catalogs, three levels fit and contract prices need another mechanism, which the customer-specific pricing page describes.

On the ERP side the cost is in the reading. Customer item pricing sits on the customer record in NetSuite. Reading it customer by customer is 500 requests against an account that processes 5 to 20 at a time and shares that number with every other integration. One query that returns all customer-and-item prices in pages replaces them.

Scheduled, event-driven or checkout-time

A price reaches the store in one of three ways, chosen per price type.

Method The store has the price Used for
Scheduled after the next run, for example nightly at 02:00 list prices, price levels, full price lists
Event-driven a few minutes after the change in the ERP contract prices, corrections, a customer moved to another level
Checkout-time at the moment the buyer orders prices that depend on the cart, the date or live cost

A scheduled run is the easiest to check: one diff a day. Event-driven needs the ERP to report changes, and a nightly comparison to catch what an event missed. Checkout-time gives the exact ERP price and makes the checkout depend on the ERP: each request counts against the same limit as every other call, which is 5 concurrent requests on a NetSuite Standard tier account. A checkout-time lookup therefore has a time limit, and the last synchronized price is used when the ERP does not answer within it. Real time versus batch covers the choice per flow.

Where standard connectors stop

Standard connectors and iPaaS platforms are built around one price per item. The documented shape for the common NetSuite and Shopify connector is one price level for the selling price and one for the compare-at price, in one currency per store instance. A second or third price level is added through custom fields on the item that a script in the ERP has to keep filled. Tier pricing is mapped per customer group, and a price agreed with one customer is outside the mapping.

Per-customer catalogs exist there as a template next to the managed connector. A template is a starting point: after installation it receives no fixes and no new functionality, and orders from the B2B side have to be filtered out of the standard flow by hand so they are not imported twice.

In an integration built for your price structure, every layer the ERP uses is in the flow: levels, group pricing, contract prices with dates, quantity breaks and units. The per-customer catalogs page shows how assortment and price go together, so an account sees only what it may order.

You stay in control

A price run is compared with the current prices before anything is written.

  • Dry run. The run calculates every price and writes nothing. You get the list of changes.
  • Approval. Per price list, changes wait for approval or go through automatically.
  • Exclusions. Products with a promotion or a manual price are skipped until their end date.
  • Hold rule. A run in which more than a set share of prices moves by more than a set percentage is held.
  • Diff per run. Item, customer or level, old price, new price and the ERP record it came from.
run 2026-10-02 02:00   source: NetSuite   prices compared: 51,200
changed: 612    unchanged: 50,574    excluded: 14
10482  Wholesale        10.00 -> 10.40   item record, edited 10/01/2026
10482  customer 10432    9.60 ->  9.75   contract renewed to 12/31/2027
10517  Wholesale        48.00 -> 4.80    held: change of -90%

The third line is a typing error in the ERP. It is held, shown in the dashboard and released or corrected by you. The dry run and approval page describes the controls in full.

In depth

  • Customer-specific pricing: contract prices and quantity breaks for logged-in buyers, per platform.
  • Per-customer catalogs: each account sees only its own assortment, at its own price.
  • B2B terms: credit limits, payment terms such as Net 30, tax exemptions and buyer permissions.

Pricing connects to two other flows. Contract prices inside a procurement session are part of PunchOut. Whether an item with a price can ship is part of stock and availability.

Systems and platforms

ERP systems. NetSuite with price levels, pricing groups and item pricing per customer. SAP Business One with price lists and special prices per business partner, each with date ranges. Business Central with sales price lists and best-price calculation.

Store platforms. Shopify with B2B catalogs, of which 3 are active below Plus. Magento with customer groups, and shared catalogs in Adobe Commerce B2B. BigCommerce and WooCommerce.

Combinations. Shopify B2B and NetSuite, Shopify and NetSuite and Magento and SAP each have a page with the mapping for that pair.

Send us an export of one price list and the pricing rules your sales team applies, and you get a concrete answer on how they map. Tell us what you run.

Frequently asked questions

Can the store show ERP customer-specific pricing to logged-in buyers?

Yes. The buyer logs in, the store knows which company and location the buyer belongs to, and the catalog for that company carries the prices from the ERP: the price level of the customer, the contract prices on top of it and the quantity breaks. A visitor who is not logged in sees the list price or no price, as you choose. The customer-specific pricing page covers the mechanics per platform.

Do customers see the list price next to their own price?

That is a setting. With the list price shown struck through next to the contract price, a buyer sees $12.50 and $9.60 and the value of the agreement is visible on every product. Without it the buyer sees $9.60 only. Both prices come from the same ERP record, so the two numbers stay consistent.

What if a customer has a contract price for some products and not for others?

The price is resolved per product. For a product with a contract price the contract applies; for every other product the customer falls back to its price level and the quantity breaks of that level. A customer with 80 contract items in a catalog of 8,000 gets 80 fixed prices and 7,920 prices from the level.

Can a temporary promotion run on top of quantity breaks?

Yes, as a rule with a start date and an end date. Per promotion you set whether it stacks with the quantity break or replaces it, and whether it applies to customers with a contract price. The integration applies the dates itself, so a promotion that ends on November 30 is gone from the store on December 1 without anyone removing it.

How fast does a price change in the ERP reach the store?

It depends on the method chosen for that price type. List prices and price levels usually go in a scheduled run, for example nightly at 02:00. A changed contract price is sent as an event and reaches the store within a few minutes. A price that has to be exact at the moment of ordering is requested from the ERP at checkout, with the last known price as the fallback when the ERP does not answer in time.

Do we need Shopify Plus for B2B pricing?

Not for the basics. Shopify B2B is available on the Basic, Grow, Advanced and Plus plans, with quantity rules, volume pricing and net payment terms on all four. Basic, Grow and Advanced allow up to 3 active B2B catalogs. Plus allows up to 10,000 per store, 25 per company location, and is the only plan where a catalog is assigned directly to a company location, which is what a price per customer needs. Checked against Shopify's help center on October 3, 2026.

What happens to an open cart when the price changes?

The buyer who has already placed the order keeps the confirmed price. The order goes to the ERP with that price, and when the ERP now calculates a different one the difference is flagged on the order, with both amounts. A cart that has not been ordered yet is repriced when the buyer reaches checkout.

Which system should own prices?

The system where the price agreement is recorded, which is almost always the ERP. The store receives prices and does not send them back. The exception is a promotion that is created in the store by the marketing team. Those products are excluded from the price flow for the duration of the promotion, so the next run does not overwrite them.

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