B2B and Wholesale Pricing, Built Into Your Store
A B2B ecommerce platform needs one thing above all else: the ability to show a different price to a different buyer, automatically, everywhere a price appears. On ShopsWired that's native — you define named price levels like Wholesale or Dealer, attach a level to a customer, and their pricing follows them across product pages, category grids, search results, and the cart. No second storefront, no wholesale app, no separate platform.
What B2B pricing actually requires
Most merchants who sell to both consumers and trade accounts discover the requirements in roughly this order:
- Per-account pricing — the same SKU at $40 retail, $26 for a dealer, $22 for a distributor.
- A rule for products you haven't priced individually — because you have 4,000 SKUs and you are not typing three prices for each of them.
- Different logic per product group — 40% off your own manufactured line, 15% off the brands you resell.
- Quantity breaks — buy 12 or more and the unit price drops, for everyone or for nobody.
- Consistency — the trade price shows on the product page, the search grid, the homepage product widget, and the cart. Any surface that misses it becomes a support ticket.
The last one is where bolt-on solutions fail. An app that rewrites prices on the product page but not in search means a dealer sees $40 in a listing and $26 when they click through. That looks like a bug to them because it is one.
Named price levels
You start by defining levels — call them Wholesale, Dealer, Distributor, whatever your trade actually says. Then on any product you can set a specific price per level. Optionally, you can show the standard price struck through for that level, so the buyer sees what they're saving against retail.
Hand-pricing every product across every level is the obvious problem, so each level has a fallback that decides what happens when a product carries no price for it. You choose per level:
- Require a quote — the price displays as $0 so a request-a-quote experience can take over. This is the default, and it's the right choice when unpriced means "we negotiate this one".
- Standard price — the level just pays retail for anything not explicitly discounted.
- Compare-at price — useful when your compare-at field already carries MSRP.
- Another level's price — Distributor inherits Wholesale pricing until you say otherwise.
- Percent or amount off the standard price — the blanket "dealers get 30% off" rule.
In practice most merchants run a percent-off fallback for the catalog and set explicit per-product prices only on the lines where the margin math is different.
The rule waterfall: different groups, different math
A single percentage rarely survives contact with a real catalog. Your own products carry 55 points of margin; the brands you resell carry 12. One blanket discount can't serve both.
So each level supports layered conditional rules keyed on product tag or attribute, evaluated first-match-wins. A typical Dealer level ends up looking like this:
1. tag = clearance -> standard price (no dealer discount)
2. tag = house-brand -> 40% off standard
3. Brand = Acme -> 15% off standard
4. (fallback) -> 25% off standardOrder matters, because the first matching rule wins. Put your exclusions at the top — a clearance rule that sits below a blanket discount will never fire. That's the single most common mistake when setting this up, and it's easy to catch: assign yourself to the level and load a clearance product.
Assigning levels to customers
A level does nothing until it's attached to a customer. Once it is, their pricing applies automatically everywhere the storefront loads a price — product pages, product cards, search grids, and the live product grids you drop into pages with the builder.
Defining levels also changes your customer list: it starts showing each customer's level and gains a filter for it, so you can pull up everyone on Wholesale, optionally narrowed to customers or leads. Retail customers — the ones on no level — are simply the unfiltered list.
For onboarding trade accounts, your theme's register form can ask for whatever you need beyond name and email — company, VAT number, resale certificate number, anything you name — and the answers are saved as custom fields on the customer. The practical flow is: applicant signs up through that form, you review, you assign the level. Contacts captured at guest checkout arrive as leads and are promoted to customers when they place an order, so a trade applicant who hasn't bought yet is still findable.
Quantity price breaks
Volume breaks work independently of levels: set "buy N or more for a lower unit price" tiers at the product or variant level. That covers the case-pack discount that everyone gets, without needing a named account. Use levels for who the buyer is and breaks for how much they're buying — trying to express volume pricing as a level (Wholesale-12, Wholesale-24) is a maintenance trap.
The parts of B2B that aren't the price
Wholesale pricing that doesn't reach tax and promotions is only half done. A few things worth setting up at the same time:
- Tax by customer tier. A tax rule can be limited to specific customer pricing tiers, or to "Default" for guests and untiered shoppers. This is how resale exemption is handled: leave your wholesale tier off every rule and those customers are charged no tax, while retail shoppers at the same address still pay. Where rules overlap, the closer destination wins first (a state rule beats a country-wide one), then a tier-specific rule beats the catch-all.
- Coupons targeted by tier. Restrict a coupon to specific price levels, with Regular price as its own checkbox. That stops a retail-only promotion from stacking on top of already-discounted wholesale pricing — the code is refused at entry for tiered customers and never advertised to them.
- Quotes as real orders. Build orders by hand in the admin for request-for-quote workflows: search products, pick variants, add lines, total it, record an internal note. Manually built orders only reserve stock once marked paid, so open quotes don't tie up inventory. Manual orders are flagged with the staff member who created them, which gives you sales-rep attribution for free.
- Placing orders on a buyer's behalf. With the right permission, staff can open a short storefront session as a customer straight from their admin page — building a cart at that customer's own pricing rather than guessing at it.
Be honest about the gaps
ShopsWired handles pricing, tax, and promotions for trade accounts natively. It does not currently ship native net terms, purchase-order payment, credit limits, or multi-buyer company accounts where several logins share one company's pricing and invoices. If your B2B model depends on invoicing on Net 30 against a credit line, that's either a plugin you build or a workflow you run through hand-built orders and offline payment. Tax-ID capture is a custom field, not a validated lookup. Worth knowing before you migrate, not after.
Wholesale and B2B pricing is also a Pro-plan and above feature — the Starter plan runs a full retail store on ready-made themes and plugins, but price levels start at Pro. See the full feature list for what sits where.
What it costs to run both audiences
This is where a combined store tends to win. Shopify's native B2B — company profiles, price lists, payment terms — lives on Shopify Plus, its enterprise tier; below that, merchants generally get there with a wholesale app, often one charging a monthly fee that scales with catalog or order volume. That's a real, ongoing cost layered on top of your plan and your processing.
ShopsWired charges 0% platform transaction fees on every plan — you pay only your payment processor's standard rate — and B2B pricing is part of the platform rather than a metered add-on. Pro is $99/mo, Business $249/mo, Enterprise $499/mo, with a Dedicated single-tenant option. Right now Pro is $1/month for the first three months, which is enough runway to model your real catalog against real dealer pricing before you commit. Full details on the pricing page.
A sane setup order
- Define one level first — Wholesale — with a percent-off fallback. Don't build four levels on day one.
- Tag the product groups that need different math (
house-brand,clearance), then add the rules in priority order, exclusions at the top. - Assign the level to a test customer and browse the storefront as them. Check a product page, a search result, and the cart.
- Add the tax rule for that tier — or leave the tier off every rule if they're exempt.
- Add quantity breaks only where case packs actually exist.
- Then, and only then, add the second and third levels using "another level's price" as the fallback.
Done in that order, a working wholesale channel on top of an existing retail store is an afternoon, not a migration.
← Back to Blog