NIKOLA

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
3 dealer platforms built or rebuiltB2B and B2C side by side on one installTwo-way ERP sync underneath

What I can do for you

Most of this starts with an audit, because the pricing rules are almost never written down anywhere complete.

FIXED · 3–5 DAYS

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.

FIXED · 8–16 WEEKS

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.

FIXED, AFTER THE AUDIT

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.

MONTHLY RETAINER

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.

Book a consultation

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.

RESOLVED IN ORDER, PER LINE, PER CUSTOMER List / MSRP what retail would pay 120.00 Dealer tier gold · −30% 84.00 Contract rate this customer, this SKU 79.50 Quantity break 48+ units 74.25 Region currency, geo rules 74.25 Unit price 74.25 CALCULATED SEPARATELY, NOT PART OF THE PRICE Tax nexus, exemption certificate Freight LTL, pallet, liftgate, parcel Terms net 30, credit limit, hold Every stage has to be explainable after the fact — when a dealer queries an invoice, somebody has to be able to say why.
One system owns each stage, and it is usually the ERP. Where the store keeps its own copy of pricing rules instead of resolving against the system of record, the two drift — and you find out when a dealer is invoiced differently from what they were quoted.

What a wholesale build involves

Each of these is a decision as much as a feature, and most of them touch the ERP.

Custom pricingper account, per SKU

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.

MSRP alongside dealer pricetwo numbers, one product

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.

Quantity breaksper tier, per product

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.

Geolocation pricingregion, currency, availability

Different prices, currencies and sometimes different catalogues by territory — including hiding products a dealer is not permitted to sell in their region.

Sales rep search and orderingordering on behalf

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.

Order submissionPO numbers, approvals, quotes

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.

Tax calculationnexus and exemptions

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.

Freight and LTL shippingpallets, not parcels

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.

Parcel shippingfor the smaller orders

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.

Shipping calculatorbefore checkout, not during

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.

Configurable productsbuilt to order

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 →

Two-way ERP syncthe thing underneath all of it

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

FAILURE MODE

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.

FAILURE MODE

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.

FAILURE MODE

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.

FAILURE MODE

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.

FAILURE MODE

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.

FAILURE MODE

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.

Book a consultation