customer specific pricing, contract pricing, contractor pricing, lumber yard eCommerce, B2B pricing, ERP integration

Customer-specific pricing for contractors starts in your ERP

October 29, 2026

A contractor at a lumber yard counter checking his account prices on a phone while a counter employee pulls up the same order on a screen

Customer-specific pricing for lumber yards: keep the ERP as the price source, map accounts and quantity breaks, and test 6 cases before contractors log in.

Executive summary

Customer-specific pricing means each account sees its own price after it logs in: a contract price, a group discount or a quantity break. For a lumber yard it only works online when the ERP stays the source of every price and the store applies it per account and per quantity, so nobody re-keys a price list.
I run ToolSwift, which sells online stores and contractor portals to lumber yards, hardware stores and building supply dealers. So read this knowing I sell one of the options. This piece works from the pricing documentation for Shopify, BigCommerce, WooCommerce's B2BKing plugin and Oracle NetSuite, read on October 29, 2026: where each one stores a contractor's price and where each one stops.
The platforms explain price lists well in the abstract. None of them explains what happens when your price already lives in Spruce, BisTrack or Agility and every contractor account carries its own sheet.
A price list you maintain twice is two price lists. One of them is wrong.

Where general platforms cap customer-specific pricing

Every general platform caps customer-specific pricing somewhere, and the cap is usually the number of price lists, the unit a price can attach to, or the plan you must be on.
Shopify extended B2B to its Basic, Grow and Advanced plans on April 2, 2026, with "up to 3 active catalogs across all your B2B markets." A catalog is Shopify's price list. Unlimited catalogs, and assigning a catalog directly to a company or a company location, stay on Shopify Plus, which Shopify's help center lists from US$2,500 a month on a one-year term. Even on Plus, "each company location can have a maximum of 25 catalogs assigned to it," and a store can hold 10,000 catalogs in total.
BigCommerce takes the other route. Its price lists need a Performance plan, and BigCommerce says "there is no limit to the number of price lists you can have." But each customer group and storefront pair gets one price list at a time, and B2B Edition companies get their prices through a customer group, not directly. Price changes can take "up to 10 minutes" to reach the storefront.
WooCommerce core has no B2B pricing; it comes from plugins. B2BKing offers per-customer price lists, and for very large lists it recommends an optimized storage mode. In that mode, customer prices no longer show in WooCommerce REST API responses or the product exporter, which is exactly where an ERP sync would look for them.
NetSuite, the ERP, is the most generous on paper: "You can set up to 1,000 price levels," and Oracle advises against creating more than 1,000 pricing groups.
The finding: a yard with more than three negotiated price sheets outgrows Shopify's non-Plus plans, and the platforms without a hard cap move the risk into how the price gets there.

Step 1: decide which system owns the price

The ERP owns the price. The store displays it, applies it at checkout and never becomes a second place where someone types a price.
That sounds obvious until you count who edits prices at a yard. Your purchasing manager updates cost on a lumber market move. Your sales manager negotiates a framer's contract. If the online store has its own copy of either, someone has to remember to change it, on the same day, for the right accounts. DCKAP, which sells ERP integration software, makes the same argument in its October 2026 post on pricing sync: one system should own pricing and push changes out to the store, the portal and everything else.
Two decisions follow. First, how fresh the price has to be: DCKAP describes real-time, near-real-time and scheduled sync, matched to how often prices change. A yard that reprices dimensional lumber on a market move cannot wait for a weekly file. Second, whether the cart rechecks the price at checkout, so a contractor never checks out on a stale cached number.
On ToolSwift, pricing and inventory sync in real time where the ERP supports it, and customer accounts, credit limits and net terms flow through from your system. We connect to sixteen named ERP and accounting systems, including Epicor BisTrack and Eagle, ECI Spruce, DMSi Agility and Frameworks, Paladin and NetSuite. When a dealer connects Claude or ChatGPT to the store to make bulk edits, ERP-owned fields are refused, so not even the assistant can create a second copy of a price.
The honest limit: "where the ERP supports it" is doing real work in that sentence. If your ERP cannot send prices out in real time, no store can display them in real time. Ask your ERP vendor that question before you ask any eCommerce vendor.

Step 2: map every ERP price layer to an account or group

Map each pricing layer your ERP uses to one place in the store, before anyone builds anything. A yard can run several layers at once, and the store has to know which one wins.
NetSuite's documentation is the clearest public example of what those layers look like. A customer record has a default Price Level. Item Pricing on the same record sets a price level for a single item. Pricing groups set a level for a group of items. Oracle's rule: "The price level for a pricing group overrides the customer's price level, but not item pricing." A customer with no price level gets the base price. Expect your ERP to have the same shape under different names.
Contractor accounts add one more wrinkle: the account is a company, but the people ordering are a foreman, a purchasing lead and an owner. The price belongs to the company. Every login under it must see the same number.
In ToolSwift, customers are grouped, and each group decides both which products an account sees and which pricing applies, so contractors and retail customers each get a catalog meant for them. One company account holds several individual logins, each with its own role. The customers page covers groups and credit; the products page covers catalogs and tiers.
The finding: every layer needs a home, and the last row is the one that decides whether your online pricing is limited to what your ERP can express.

Step 3: put quantity breaks on the listing and decide what wins

Quantity breaks belong on the product page, where the contractor can see that 200 studs cost less each than 20, and you have to decide in writing which rule wins when a break and a contract price both apply.
This is where platforms quietly differ. Shopify allows up to 10 price breaks per product, and once a volume price applies it is fixed: the catalog's overall percentage adjustment no longer applies. On BigCommerce, if a variant has a price record on a price list, product-level bulk pricing does not apply to it in the cart. NetSuite needs Quantity Pricing switched on as a separate feature, with an optional setting for different quantity discounts per price level.
None of those rules is wrong. Each is a precedence decision someone made for you. If your contract says a framer gets level 3 pricing plus the bundle break on full units, and the platform drops one when the other applies, the contractor sees a number your counter would never quote.

Step 4: carry the same price into quotes, the counter and the app

A contractor's price has to be the same in the portal, the app, a quote and at the counter. If it changes depending on where he asks, he will call to check every time, and you have paid for a portal nobody trusts.
Quotes break first, because a quote is usually built by a person. At many yards, a contractor sends a materials list, someone inside turns it into SKUs, and that person has to remember the account's price sheet.
On ToolSwift, the Takeoff Agent turns a contractor's voice note, photo, scan, takeoff or file into a draft quote for staff review, matching the items against your catalog with that account's pricing applied. When the quote is approved it converts into an order with the same line items, pricing and customer account, with nothing re-entered. AI quote drafts through the Claude and ChatGPT connector are coming. The contractor's account, pricing and credit are the same whether he buys at the counter, on the app or on the phone with your inside sales rep, and checkout enforces his credit limit automatically.
The counter is where Shopify drops the contractor's price. Shopify's help center says "company-specific prices for B2B markets aren't available for retail purchases," which means a contractor's negotiated prices don't follow him to a Shopify POS sale. I covered the rest of that gap in my Shopify B2B comparison.

Step 5: test six real accounts before contractors log in

Test the pricing with real accounts and real items before a single contractor gets a login.
What goes wrong is almost never the base price. It is the overlap. Shopify shows the lowest price when several catalogs price the same product differently, so an account that sits in two catalogs gets the better of the two whether you meant it or not. Fixed prices in a Shopify catalog override any overall percentage adjustment. BigCommerce drops product bulk pricing for variants with a price record. In NetSuite's Advanced Pricing, customer-specific price rules come first, then customer item pricing, group pricing and the customer's price level, then rules for all customers, then the item's base price. Every platform has an order. You need to know yours and test it.
Here is the test plan I would hand a yard before go-live. Pick six accounts from your ERP that each exercise one rule, log in as each, and compare the screen to what your counter would charge.
Run the price-change test twice: once for an item on a contract and once for an item that is not. DCKAP's best practices say the same in general terms: validate before go-live, retry failed updates with alerts, keep audit logs, and test contract pricing and quantity breaks. The six rows below are that advice made specific to a yard.

Who needs customer-specific pricing online, and who does not

You need it online if more than a handful of your contractor accounts buy at a price other than your shelf price. If everyone pays the same price, a group discount is enough, and a per-account setup is overhead.
The yards that need it most are the ones with negotiated sheets for framers and builders, quantity pricing on units of lumber and sheet goods, and contractors who order from a truck before the counter opens. Those contractors will trust the portal only when the number on the screen matches the number on their invoice, every time.
The yards that should wait are the ones whose ERP cannot yet say clearly which price an account gets. Putting an unclear price online makes it unclear in more places.
My decision rule: if your negotiated prices live in your ERP, choose a store that reads them from the ERP and applies them per account and per quantity, and walk away from any setup that asks you to upload a second price list. If your ERP cannot express a rule you sell on, the store has to hold that one rule itself, and only that one.

FAQ

What is customer-specific pricing?

Customer-specific pricing is when the price a buyer sees depends on who is logged in: their account's price level, a negotiated contract price, a group discount or a quantity break. In B2B, the store resolves the price only after it knows which company is buying.

Is contract pricing the same as customer-specific pricing?

Contract pricing is one kind of customer-specific pricing: a negotiated price for a named account on named items. Customer-specific pricing also covers price levels for groups of accounts and quantity breaks.

How does customer-specific pricing work on Shopify?

On Shopify, customer-specific pricing runs through B2B catalogs. Basic, Grow and Advanced allow up to 3 active catalogs across all B2B markets; unlimited catalogs and direct assignment to a company or location need Plus, with a maximum of 25 catalogs per company location. When catalogs overlap, the customer sees the lowest price.

How does customer-specific pricing work on WooCommerce?

WooCommerce core has no customer-specific pricing; it comes from plugins. B2BKing offers per-customer price lists with regular, sale and quantity-tier prices, managed per product or per customer, with CSV import and export. B2BKing lists its plans at US$199, US$299 and US$449 for the first year, introductory prices that renew at full price; its docs do not say which plan includes customer price lists.

How do you set customer-specific pricing in NetSuite?

In NetSuite, turn on Multiple Prices, then set a default Price Level on the customer record's Financial tab, add item-level prices on the Item Pricing subtab, and use pricing groups for sets of items. Item pricing overrides both the customer's price level and pricing group levels.
---
If you want to see your own contractor price levels running in a portal and app, book a demo.

Related in ToolSwift

Connected to the systems you already run

Sixteen ERP and accounting connections, and our team does the setup.

See integrations

Stay Updated on B2B Trends

Book a Demo