In B2B the price is not a number, it is a calculation
Retail has one price on the product. Wholesale has an MSRP, a dealer band, a negotiated contract rate, a quantity break, a region, and a customer who has been buying since 2011 on terms nobody has written down. Every one of those lives in your ERP, and none of them lives in WooCommerce by default.
YOU ARE PROBABLY HERE BECAUSE
- dealers are quoted one price and invoiced another
- trade prices are visible to the public
- orders are re-keyed by hand despite the site taking them
What I can do for you
Most of this starts with an audit, because the pricing rules are almost never written down anywhere complete.
Pricing rules audit
I document every rule that currently decides what a customer pays — tiers, contracts, quantity breaks, regional differences, the exceptions your sales team applies by hand. Written down properly, usually for the first time. It is what a sensible quote gets built on, and you keep it either way.
Dealer portal build
Gated catalogue, account tiers, contract pricing resolved against your system of record, order submission with PO numbers and approvals, freight quoting, and a customer area your dealers will actually use instead of emailing your sales desk.
B2B and B2C on one platform
Trade and retail from the same catalogue and the same stock, with different prices, different visibility and different checkout rules depending on who is logged in. One install rather than two sites drifting apart.
Ongoing wholesale support
Reserved time for new dealer tiers, pricing changes, catalogue growth, freight rate updates and the seasonal things wholesale businesses do that nobody warns the developer about.
Forty-five minutes, no charge.
I will tell you which of these you need, including when it is the cheapest one.
How a wholesale price actually gets resolved
This is the part that breaks plugin-based B2B setups. A retail store looks up a price. A wholesale store calculates one, per customer, per line, at the moment of asking — and has to be able to explain afterwards how it got there.
What a wholesale build involves
Each of these is a decision as much as a feature, and most of them touch the ERP.
Prices that depend on who is logged in — tier discounts, negotiated contract rates for a specific customer on a specific product, and the historical exceptions that exist because somebody agreed to them in 2014.
Dealers need to see both what they pay and what they should sell it for, sometimes with the margin shown, and MSRP often has to stay visible even where the trade price is hidden from the public.
Price steps at case, pallet or container quantities, applied per line and displayed clearly enough that a buyer can see the next threshold and order up to it.
Different prices, currencies and sometimes different catalogues by territory — including hiding products a dealer is not permitted to sell in their region.
A rep searches customers, opens an account, sees exactly what that customer sees, and places the order for them — with the order attributed to both the customer and the rep so commission and history stay correct.
Wholesale buying is rarely one click. Purchase order references, approval steps before an order is released, saved carts, quote requests that become orders, and repeat ordering from history.
Destination-based rates, resale exemption certificates held against the account so exempt dealers are not charged, and VAT handling with reverse charge where it applies.
Wholesale orders often ship on pallets. That means freight class, dimensional weight, liftgate and residential surcharges, carrier quotes at checkout, and a sensible answer when a live rate cannot be obtained.
The same store usually also ships small orders normally, so both rate engines have to coexist and the cart has to decide which applies before the buyer gets a surprise.
Trade buyers want a landed cost before they commit. A calculator on the cart or product page that quotes realistically saves your sales desk answering the same question forty times a week.
Made-to-order goods priced from components and options rather than a flat SKU, arriving downstream as a specification production can actually manufacture. More on configurators →
Products, parts, stock, customers, pricing and orders moving both ways — scheduled for the catalogue, event-driven for orders, real time only where it genuinely must be. More on ERP integration →
What tends to go wrong
Quoted one price, invoiced another
The store holds its own copy of the pricing rules, the ERP holds the real ones, and they have quietly drifted apart. The dealer notices before you do.
Trade prices visible to the public
A gated catalogue that leaks through search, feeds, structured data or an unguarded API endpoint. Your retail partners find out what you charge everyone else.
Freight quoted as if it were parcel
A pallet order rated by weight alone, and you absorb the difference on every shipment until somebody looks at the margins.
Orders re-keyed by hand anyway
The site takes the order, somebody prints it and types it into the ERP. Extremely common, and the clearest sign the integration was never finished.
Exempt dealers charged tax
Resale certificates held in a filing cabinet rather than against the account, so exempt customers get charged and somebody issues credits every month.
Nobody can explain a price
Rules layered over years across plugins, custom code and the ERP, until no single person can say why a given customer sees a given number. This is what the audit is for.
Where this has been done
Moes Home Collection
Furniture wholesaler running trade and retail side by side on one multisite — one catalogue and one stock pool rather than two sites drifting apart, with pricing resolved per account type and a customer area dealers actually use.
Multisite · B2B and B2C
custom pricing · customer area
via Jola CGI
Rennie & Rose
WooCommerce build serving trade and retail on a custom theme written from scratch, using a B2B suite plus custom code. Multiple layers of account, each seeing different pricing.
B2B Suite · custom theme
multiple account layers
via Jola CGI
Arkansas Lighting
Configurable made-to-order products priced from live catalogue data, with two-way NetSuite and Macolla sync underneath and customer accounts on top. Nine years of it.
ERP · configurator
NetSuite · Macolla
2016 — 2025
What this does not include
Setting your pricing
What you charge which dealer is a commercial decision. I build the system that applies it consistently and can explain itself afterwards.
Tax advice
I integrate the calculation engine and hold exemption certificates against accounts. Whether you have nexus somewhere is a question for your accountant.
Negotiating carrier rates
I connect to whatever carriers and rate engines you use. What those carriers charge you is your commercial relationship.
Other platforms
My depth is WordPress and WooCommerce. If your wholesale store is on something else, there are people who live in that platform and I am not one of them.
Work inside the ERP
I own the storefront side and work alongside your ERP partner rather than pretending to replace them.
Questions I get asked
Can we run B2B and B2C on the same site?
Yes, and usually you should. One catalogue, one stock pool, different prices and visibility depending on who is logged in. The alternative — two separate sites — means two catalogues drifting apart and somebody maintaining both. Multisite is worth it only when the brands genuinely need to look different, which is how Moes Home was built.
Should pricing live in WooCommerce or in the ERP?
The ERP owns it, the store caches it. Rules held in two places drift, and the version the customer sees should never be the guess. What the store keeps is a resolved copy, refreshed on a schedule, with a report showing where the two disagree.
Can a sales rep place orders for a customer?
Yes, and it is worth building properly. The rep searches accounts, switches into one, sees exactly what that customer sees including their pricing, and submits on their behalf — with the order recorded against both so history and commission stay correct. Reps also need to not see accounts that are not theirs.
How do you handle freight for pallet orders?
By treating it as a different problem from parcel. Freight class, dimensional weight, liftgate and residential surcharges, and live LTL carrier quotes where the carrier supports it. Where a live rate cannot be obtained, the cart needs a defined fallback rather than a blank space — usually a quote request that goes to your sales desk.
Our dealers still phone their orders in. Will they use a portal?
Some will not, and that is worth accepting rather than fighting. The portal earns its keep on repeat ordering, stock checking and order history — the things dealers currently phone about that nobody enjoys answering. Expect the phone to stay for exceptions, and build the rep-ordering path so those calls still end up in the same system.
We use a B2B plugin already but it cannot do our pricing.
Common, and it does not always mean replacing it. Often the plugin handles gating and account tiers perfectly well and only the price resolution needs building alongside it. The audit tells us which, and I would rather extend what you have than sell you a rebuild you do not need.
Tell me how many pricing rules you have
If the honest answer is that nobody knows any more, that is the normal answer and it is exactly what the audit is for.