Home » Blog » WooCommerce for B2B and Wholesale: How to Build a Store Buyers Actually Use
WooCommerce

WooCommerce for B2B and Wholesale: How to Build a Store Buyers Actually Use

WooCommerce B2B wholesale store - logged-in buyer with customer-specific prices, a quote request, NET 30 payment terms and validated EU VAT ID

WooCommerce B2B is, in my experience, the strongest single argument for choosing WooCommerce over a hosted platform. When I compared the two in my WooCommerce vs Shopify guide, the pattern was simple: for a standard B2C shop the platforms are close, but the moment a store needs accounts before prices, negotiated price lists, quote requests, pay-on-account and ERP-driven catalogues, a hosted platform starts fighting you and WooCommerce starts working for you. B2B selling is nothing but “unusual requirements”, and open code is exactly the right tool for unusual requirements.

This guide is the build manual I wish my wholesale clients had read before their first attempt: how B2B buying actually differs from B2C and why it breaks a stock storefront, the full capability checklist (gated pricing, tiered pricing, RFQ, quick order, payment terms, EU VAT handling), an honest comparison of plugin stacks versus custom development, hybrid versus separate-store setups, ERP integration, the caching trap that catches every logged-in-pricing store, and realistic costs and timelines. I have built and maintained B2B and wholesale WooCommerce stores for manufacturers, distributors and agencies across Germany, the UK, the US and Australia over 12+ years and 500+ WordPress projects, so everything here comes from builds that real buyers use every week.

Table of contents

Why B2B is where WooCommerce wins

Hosted platforms are optimised for the average store: public catalogue, list prices, card checkout, one buyer per account. B2B breaks every one of those assumptions, and on a hosted platform each broken assumption costs you either a monthly app subscription, an upgrade to an expensive B2B tier, or a workaround that half works. Shopify’s real answer to wholesale is Shopify Plus, which starts around USD 2,300 per month – a price that makes sense for enterprises and nobody else. Below that tier you are stacking apps that each own a fragment of the problem and none of the whole.

WooCommerce approaches the same problem from the opposite direction. It is open code running on your server: every price, every product query, every checkout field and every order status is a PHP filter or hook you are allowed to change. Customer-specific pricing is a function. A quote workflow is a custom order status plus an email template. A VAT-ID check is an API call during registration. None of it requires permission from a platform, and none of it carries a monthly toll per feature. The trade-off is the usual one – you (or your developer) own the responsibility for building and maintaining it – but for B2B that trade is heavily in your favour, because the workflow is the business, and owning the workflow beats renting it.

There is a second, quieter reason: B2B stores live or die on integration with the back office. Your ERP already knows the real prices, the real stock and the real customer terms. WooCommerce, being self-hosted with a full REST API and database access, can treat the ERP as the source of truth. Hosted platforms can integrate too, but always within the limits of what their API exposes – and customer-specific price lists are exactly the kind of thing those limits bite on.

How B2B buying differs from B2C – and why it breaks a stock store

A stock WooCommerce install is a B2C machine: anonymous visitors browse public prices, add to a cart, pay by card, and the relationship ends at the thank-you page. Wholesale buying differs on almost every axis, and it is worth being precise about how, because each difference maps to a feature you will need.

Accounts come before prices

In B2B the relationship starts before the first order. A buyer applies for an account, someone on your side approves them (often after a credit check or a trade-licence check), and only then do they see prices – frequently their prices, not a public list. A stock store shows everything to everyone; a wholesale store shows almost nothing to a guest.

Prices are negotiated, tiered, or both

B2C has one price per product. B2B has a list price, a discount group (“all resellers get 30% off list”), quantity breaks (“100+ units at EUR 4.20, 500+ at EUR 3.80”), and on top of that, customer-specific negotiated prices for the accounts that matter. One product can legitimately have a dozen prices depending on who is asking and how many they want.

Quotes, not just carts

For configured products, large quantities or project orders, the buyer does not want to check out – they want to request a quote, negotiate, and convert the agreed quote into an order. A cart-and-card-only store forces those buyers back to email, which is exactly where you are trying to move them away from.

Orders are bulk, repeated, and placed by employees

A B2C order is 1-3 items chosen by browsing. A B2B order is often 40 lines, mostly identical to last month’s, placed by a purchasing clerk who knows the SKUs and has no patience for lifestyle photography. Sometimes that clerk needs a manager’s approval before the order is final. Product-page-by-product-page shopping is simply the wrong interface for this.

Payment happens on terms, and tax is different

Established B2B customers expect to order now and pay by invoice in 30 days, because that is how the rest of their purchasing works. And if you sell across EU borders to VAT-registered businesses, many of those sales should not carry VAT at all – which a stock checkout has no idea how to handle.

Every one of these differences is solvable in WooCommerce. But it should be obvious why “install Woo, add products, go” produces a store your wholesale buyers politely ignore while they keep emailing their orders.

B2C versus B2B WooCommerce store compared - price visibility, pricing model, ordering, payment terms, order size and relationship
Same WooCommerce core, different store – B2B is accounts, price rules and workflow, not just bigger carts.

The capability checklist for a B2B store

This is the feature list I scope against when a client says “we want our dealers ordering online”. Not every store needs every item – part of scoping honestly is crossing things off – but you should make a deliberate decision on each one.

  • Registration and approval flow. A wholesale application form (company name, VAT ID, trade references, expected volume), a pending state, an admin approval step, and an email on approval. Decide who sees the store at all: fully closed (login required for everything), semi-open (catalogue visible, prices hidden), or open with gated wholesale pricing.
  • Price visibility rules. Hide prices and add-to-cart buttons from guests, show a “log in to see prices” or “apply for a trade account” prompt instead. This alone kills most channel-conflict worries when your retail partners should not see dealer pricing.
  • Customer groups and price lists. Roles or groups (retailer, distributor, key account) with a percentage or fixed price list per group, and per-customer overrides for negotiated accounts. If the ERP owns pricing, this becomes a sync target rather than data you maintain by hand.
  • Tiered and quantity pricing. Quantity breaks displayed on the product page as a table, applied automatically in the cart, and combinable with group pricing in a defined order (decide explicitly whether discounts stack – ambiguity here costs real money).
  • Quote requests (RFQ). An “add to quote” flow alongside or instead of the cart, a quote basket, an admin side where you price the quote, and a one-click conversion of an accepted quote into a payable order.
  • Quick order and CSV upload. A one-page form where a buyer types or pastes SKUs and quantities, plus CSV upload for the buyers who keep their order in a spreadsheet anyway. For repeat purchasers this one screen matters more than your entire category design.
  • Minimum order quantities and values. Per product (MOQ, order in multiples of the carton size), and per order (minimum order value before checkout unlocks), with clear messages instead of silent failures.
  • Customer-specific catalogues. Some accounts should only see the ranges they carry, or private-label products no one else may see. Category- and product-level visibility per group or per customer.
  • Payment on account. Invoice / NET 30 as a gateway for approved customers, alongside cards for new or small accounts, ideally with a credit limit that blocks the terms option when exceeded.
  • VAT-ID validation and reverse charge. Collect the VAT ID at registration or checkout, validate it against VIES, and zero-rate qualifying cross-border EU B2B sales automatically (details in the VAT section below).
  • Shipping quotes and freight. Pallet and freight shipments rarely fit table rates. Options: weight/volume-based freight classes, a carrier API, or an honest “shipping quoted after order” flow where the order is confirmed with shipping added later.

When I scope a B2B build, this checklist plus the ERP question (“where do prices and stock really live?”) produces the estimate. Two stores with the same product count can differ by a factor of five in effort depending on how many of these boxes are ticked and how deep each one goes.

WooCommerce B2B capability grid - gated catalogue, tiered pricing, quotes, quick order with CSV upload, pay on account and EU VAT validation
The six capabilities B2B buyers expect – if they still email orders, one of these is missing.

Quotes, payment on terms and invoicing

Two items on the checklist deserve their own section, because they are the ones that decide whether buyers actually switch from email to the store.

Getting the RFQ flow right

The mistake I see is treating quotes as a contact form. A proper RFQ flow reuses the commerce machinery: the buyer builds a quote basket exactly like a cart (with their quantities and any product options), submits it with a note, and gets a numbered quote they can see in their account. On the admin side, sales adjusts line prices, adds freight, and sends the quote back; the buyer accepts and pays – or converts it to a pay-on-account order – without re-entering anything. Technically this is a custom order status chain (quote-requested, quoted, accepted, converted) with its own emails and account screens. B2BKing and similar plugins ship a workable version; where clients outgrow it is multi-round negotiation, quote expiry rules, and syncing quotes into the CRM – at which point it becomes custom plugin territory.

Pay on account, done safely

Payment on terms in WooCommerce is mechanically easy – a gateway that places the order as “on account” with nothing captured – and commercially dangerous if you stop there. The safe version restricts the gateway to approved roles or specific customers, checks an exposure limit before accepting (open orders plus unpaid invoices against the customer’s credit limit, ideally read from the ERP), and generates a sequential, legally compliant PDF invoice with payment terms on it. German clients in particular need proper invoice numbering and the right VAT wording; a EUR 20 invoice plugin plus an hour of configuration covers most cases.

Keep cards for the long tail

Terms for the established accounts, cards (or PayPal, or bank transfer) for new and small ones. A first-order-by-card, terms-after-approval policy is easy to implement with role-based gateway rules and mirrors how most wholesalers already run credit offline.

EU VAT for B2B in plain language

If you sell to VAT-registered businesses in other EU countries – very relevant for my DACH clients – the store must handle the reverse-charge mechanism. Plain-language version: when a German wholesaler sells to a French VAT-registered business, the sale is zero-rated in Germany; the French buyer accounts for the VAT themselves in France. Your store’s job is to charge 0% VAT only when the buyer genuinely qualifies, and to keep the evidence.

What that means concretely:

  1. Collect the VAT ID at registration (best, because approval happens once) or at checkout.
  2. Validate it against VIES, the EU’s official VAT-number service, via its free API. Store the validation result and timestamp with the customer record – that stored proof is what your accountant wants when the tax office asks.
  3. Apply the zero rate only for cross-border sales. A valid German VAT ID on a German-to-German sale still gets normal German VAT; the exemption applies when buyer and seller are in different EU countries.
  4. Put the right wording on the invoice – “VAT reverse charged” plus both VAT IDs – and report the sale in your EC Sales List. The store’s role is producing correct data; the reporting stays with your accountant.
  5. Handle VIES downtime gracefully. The service does go down. Decide the fallback: queue the validation and charge VAT until confirmed, or accept with a re-check flag. Silent failure that zero-rates unverified buyers is the one option you must not pick.

Plugins cover this reasonably well – B2BKing has VIES validation built in, and dedicated EU-VAT plugins exist for around EUR 50-100 per year – but I always test the edge cases by hand: invalid ID, valid ID same country, valid ID cross-border, VIES timeout. Getting VAT wrong is not a UX bug; it is a letter from the tax office.

Plugin stacks vs custom development – the honest comparison

You can cover most of the checklist with off-the-shelf plugins, and for many stores that is the right call. The honest version of the choice looks like this.

The plugin clusters

  • B2BKing (around USD 139 per year) is the broadest single plugin: registration approval, hiding prices, customer groups, tiered pricing, quotes, quick order, MOQs, VIES VAT validation, payment-method restrictions. One plugin, one settings surface, remarkably complete. Its weakness is the flip side of its breadth – when one workflow needs to behave differently from how B2BKing imagines it, you are customising a large plugin rather than a small one.
  • Wholesale Suite (roughly USD 150-300 per year depending on bundle) takes the modular route: Wholesale Prices for the pricing, Wholesale Order Form for quick ordering, Lead Capture for registration. Excellent if your need is really “wholesale pricing plus an order form” – lighter than B2BKing for that job – but quotes and VAT need additions.
  • WooCommerce B2B (CodeCanyon, around EUR 79 one-off) covers the core B2B set at a lower price; the trade-off is a smaller team behind it and slower movement than the subscription products. There are also strong single-purpose plugins worth knowing: YITH Request a Quote for RFQ-only needs, and the EU-VAT specialists mentioned above.

Where stacks get heavy

The failure mode is not any single plugin – it is the stack. B2B pricing plugin + quote plugin + invoice plugin + VAT plugin + shipping plugin, each hooking the price and cart calculations, each with its own idea of what a “customer group” is. I have audited stores running 12 B2B-adjacent plugins where the tiered discount and the group discount stacked when they should not have, and nobody could say which plugin to blame. Every plugin is also a settings surface an admin can quietly break, and a renewal line item: a full stack lands at EUR 300-600 per year indefinitely.

When custom wins

The reasoning from my post on when you need a custom plugin applies directly: when the workflow is the business, build the workflow. If your approval process, your discount logic or your quote negotiation is genuinely yours – and in B2B it usually is, because it evolved with your customers over years – a custom plugin that implements exactly your rules is smaller, faster and more maintainable than a big plugin bent out of shape. My usual recommendation is a hybrid: a solid base plugin for the commodity features, custom code for the two or three workflows that make your business yours, and restraint about everything else.

Approach Best for Typical cost Strengths Watch out for
Plugin stack (e.g. B2BKing + invoice + freight) Standard wholesale needs, fast launch EUR 200-600/year licences + EUR 1,500-4,000 setup Fast, cheap to start, well-trodden features Plugin interactions, settings sprawl, workflows bent to fit
Hybrid: base plugin + custom code Standard core with 2-3 business-specific workflows EUR 4,000-12,000 build + smaller licence bill Exact-fit workflows where it matters, commodity features bought not built Needs a developer relationship for changes
Fully custom B2B layer Complex negotiated pricing, deep ERP coupling, portal-like stores EUR 10,000-30,000+ Owns the whole workflow, lean and fast, no licence dependency Highest upfront cost; only justified when workflows truly demand it
Separate wholesale store (multisite or second install) Retail and wholesale with conflicting catalogues/branding Second store’s build + ongoing double maintenance Clean separation, simple caching on the B2C side, independent UX per audience Two stores to maintain; products and stock must sync

One store or two: hybrid B2C+B2B vs a separate wholesale store

If you sell to both consumers and businesses, you face a structural decision early.

The hybrid store

One WooCommerce install serves both audiences: guests and consumers see retail prices, logged-in trade accounts see their pricing, catalogue visibility and payment options via roles. This is my default recommendation because it means one product catalogue, one stock pool, one maintenance surface and one integration. The role-and-visibility machinery from the capability checklist is exactly what makes it work. The costs: every template decision serves two audiences, testing doubles (every change checked as guest, consumer and trade buyer), and caching needs the care described in the performance section.

The separate wholesale store

A second store – often a multisite subsite at wholesale.yourdomain.com, sometimes a fully separate install – that is entirely login-gated for trade. Choose this when the audiences genuinely diverge: different product ranges, different branding, retail partners who must never glimpse dealer pricing, or a retail site whose performance you want to keep trivially cacheable. The price is real: two stores to update, secure and test, and a product/stock sync between them that is effectively another integration project. I have built both; my rule of thumb is that separate stores are justified by conflicting audiences, not by technical nervousness about roles. If 80% of the catalogue is shared, stay hybrid.

Connecting the back office: ERP, pricing and inventory sync

Almost every wholesale business past a certain size already runs its truth elsewhere – an ERP or inventory system (in my DACH projects, frequently something from the SAP Business One / weclapp / Xentral / JTL world) that knows the real prices, real stock and real customer terms. The single most important architectural decision in a B2B store build is admitting that the ERP is the source of truth and the store is a sales channel, not the other way round.

The integration pattern that works, which I covered in more depth in my guide to connecting WordPress to CRM, ERP and payment systems:

  • Products and stock flow in. Scheduled or webhook-driven sync from the ERP into WooCommerce – names, SKUs, stock levels, list prices. Stock on a busy wholesale store should sync at least every few minutes, not nightly, or you will sell pallets you do not have.
  • Customer-specific prices flow in. The negotiated price lists live in the ERP; the store either imports them per customer group/account or – for the most ERP-coupled builds – asks the ERP for a price in real time with a local cache. Maintaining negotiated prices by hand in two systems is the mistake you only make once.
  • Orders flow back. A paid or approved order pushes into the ERP automatically (REST API, middleware, or a queued export), where invoicing, credit control and fulfilment already live. The moment orders re-key by hand, the store has failed at its main job.
  • Build for failure. APIs go down. Queue the pushes, retry with backoff, and alert a human when an order does not sync – a silent gap between store and ERP is how a customer’s order goes unshipped for a week.

Budget honestly for this part: a clean two-way sync with an ERP that has a decent API is typically EUR 2,000-6,000 of the project; a legacy system with CSV exports and no API can cost more than the storefront. It is the least visible part of the build and the one that determines whether the store saves your back office time or creates a parallel universe of data. This is the core of my WordPress API integration service, and it is where most of my B2B project hours actually go.

Performance when every customer sees different prices

Here is the trap: everything that makes WordPress fast for anonymous traffic assumes everyone sees the same page. Full-page caching – the single biggest lever in normal WooCommerce optimisation – serves one stored copy of each page to everyone. But your B2B buyers are all logged in, and each one sees different prices, a different catalogue and different payment options. Page cache is bypassed for logged-in users on every sane configuration, which means your most valuable customers get the slowest version of your store, with every request hitting PHP and MySQL cold.

The fixes, in the order I apply them:

  • Persistent object caching (Redis) is non-negotiable. With page cache out of the picture, Redis caching the repeated database work (options, product lookups, tax and shipping calculations) is what keeps logged-in page times reasonable. On stores I have tuned, adding Redis alone has cut logged-in page generation from 1.8s to under 600ms.
  • Cache the expensive fragments. The page cannot be cached whole, but its parts can: cache the computed price matrix per customer group (not per customer, if your pricing is really group-based) in Redis with sensible invalidation when prices sync from the ERP. Menus, category trees and product data that do not vary per user should never be recomputed per request.
  • Keep the pricing code honest. Price-per-customer logic runs inside WooCommerce’s price filters, which fire dozens of times per product per page. A plugin that queries the database inside that filter turns a 40-product category page into hundreds of queries. This is a place where lean custom code visibly beats a heavyweight plugin – and a place I check first when a client brings me a slow B2B store.
  • Right-size the server. A B2B store’s traffic is low but almost entirely uncached and heavier per request (40-line carts, big quick-order submissions). PHP workers and database capacity matter more than raw visitor numbers suggest; EUR 30-60 per month of decent VPS or managed hosting is usually enough, but the EUR 5 shared plan is not.

UX details that make buyers order online instead of emailing

A B2B store does not compete with Amazon; it competes with an email to a sales rep who knows the buyer. To win, ordering online has to be faster than writing that email. These are the details that decide it:

  • Search by SKU. Purchasing staff think in article numbers. Search must match SKUs (including partial matches) ahead of fuzzy title matches, and show SKU, pack size and the buyer’s price directly in results.
  • “Order again” in one click. Every past order reorderable in full, with a diff view when prices or availability changed since. For many wholesale buyers, 80% of orders are last month’s order with two edits.
  • Saved lists. Named, reusable lists (“monthly consumables”, “site B restock”) that dump into the cart or quote basket in one action.
  • The quick-order form front and centre. Link it in the account dashboard and main navigation, not buried three levels deep. For repeat buyers this page, not the home page, is the store.
  • PDF invoices and order history that accounting accepts. Buyers’ bookkeepers need sequential invoices, PO number fields on checkout, and downloadable history. Miss the PO number field and half your buyers must email you anyway – the exact failure you built the store to end.
  • Order approval for junior staff. A “requires approval” role whose orders wait for a manager’s sign-off inside the account area. This one feature is often what convinces a hesitant customer to let their whole team order online.
  • A checkout with nothing silly in it. No coupon-code fields shouting at negotiated-price customers, no forced account creation for people who already have accounts, saved addresses and payment terms preselected. The principles from my checkout optimisation guide apply double in B2B, because the buyer goes through it every week.

Costs, timelines and migrating buyers off email ordering

Realistic ranges

Numbers from my own quotes, at EUR 15 per hour or fixed prices per project:

  • Plugin-based B2B setup – existing WooCommerce store, B2BKing or Wholesale Suite configured properly (groups, pricing, registration, VAT validation, invoice PDFs, quick order), tested against the checklist: EUR 1,500-4,000, live in 2-4 weeks.
  • Hybrid build with custom workflows – base plugin plus custom quote negotiation, approval flows or pricing logic, plus a straightforward ERP sync: EUR 5,000-12,000, 6-10 weeks.
  • Full custom B2B platform – custom pricing engine, deep two-way ERP integration, customer portals, freight logic: EUR 12,000-30,000+, 3-6 months, usually delivered in phases so ordering goes live before every feature does.

Add ongoing reality to the budget: plugin renewals (EUR 200-600 per year for a stack), hosting (EUR 30-60 per month), and maintenance – a B2B store is business infrastructure, and “we will update it when we remember” is not a plan.

The migration plan that actually works

Most of my B2B clients are not migrating from another platform – they are migrating from email and phone. The store’s biggest competitor is the buyer’s habit, and habits are moved deliberately:

  1. Launch with pilot customers, not an announcement. Pick 3-5 friendly accounts with different ordering patterns, load their real negotiated prices, and ask them to place their next real order online while you watch. They will find the missing PO field and the confusing pack size before the other 200 customers do.
  2. Preload the buyers’ world. Import each pilot account’s order history and price list before inviting them, so their first login shows their products and prices, not an empty account. First impressions decide adoption.
  3. Fix, then widen. Two to four weeks of pilot feedback, then roll out group by group – with the sales reps introducing the store as “your portal”, because buyers adopt what their rep endorses.
  4. Give a reason and keep the door open. A small online-order incentive (faster dispatch, small first-order discount, live stock visibility) accelerates the switch. Do not force it: hard-cutting email orders punishes your best customers. Sales reps entering phoned-in orders through the same store keeps every order in one pipeline while the habit shifts.

Measured this way, a typical rollout gets 60-80% of active accounts ordering online within two quarters – and the back office feels it long before that, because every online order is one nobody re-keyed.

Need help building a WooCommerce B2B store?

I plan and build wholesale and B2B WooCommerce stores end to end – capability scoping, plugin stack or custom development, ERP integration, VAT handling and the launch plan – for EUR 15 per hour or a fixed price quoted within 24 hours. See my WooCommerce development service and portfolio, or send me a message describing how your buyers order today – I reply within 24 hours.

Frequently asked questions

Is WooCommerce good for B2B and wholesale?

Yes – it is arguably where WooCommerce beats hosted platforms hardest, because B2B needs (gated pricing, negotiated price lists, quotes, payment terms, ERP integration) are exactly the customisations open code handles well and hosted platforms charge heavily for.

What is the best B2B plugin for WooCommerce?

B2BKing is the most complete single plugin (registration approval, group pricing, quotes, quick order, VAT validation); Wholesale Suite is a strong modular alternative if you mainly need wholesale pricing plus an order form. Which is “best” depends on how standard your workflows are.

Can I run B2C and B2B in the same WooCommerce store?

Yes – roles and visibility rules let one store show retail prices to guests and trade pricing to approved accounts. A separate wholesale store is only worth its double maintenance when the two audiences genuinely conflict in catalogue or branding.

How do I hide prices from guests in WooCommerce?

Any of the main B2B plugins can hide prices and add-to-cart buttons for non-logged-in visitors and replace them with a “log in for prices” or trade-application prompt; it is also a small custom-code task on the price and add-to-cart filters.

How does WooCommerce handle VAT-exempt B2B sales in the EU?

By collecting the buyer’s VAT ID, validating it against the EU’s VIES service, and zero-rating qualifying cross-border sales under the reverse-charge mechanism – with the validation result stored as evidence and the correct wording on the invoice.

How much does a WooCommerce B2B store cost?

Roughly EUR 1,500-4,000 for a plugin-based setup on an existing store, EUR 5,000-12,000 for a hybrid build with custom workflows and ERP sync, and EUR 12,000-30,000+ for a fully custom B2B platform, plus plugin renewals and hosting.

Do B2B customers really order online instead of emailing?

They do when ordering online is faster than the email: SKU search, one-click reorder, quick-order forms, their real prices and PO fields. Launch with pilot customers, preload their prices and history, and most active accounts switch within two quarters.

Written by Vishal Bhisara

Full Stack WordPress Developer & AI Solutions Expert with 12+ years of experience and 500+ projects delivered worldwide. I help businesses and agencies build fast, secure, SEO-ready websites - custom themes, plugins, WooCommerce stores, and AI automation that actually grows revenue. Based in Bhavnagar, India, working with clients across the globe. More about me →

Need Expert WordPress Support?

Reading great content is the first step. Implementing the right strategy is what delivers results. If you need professional help with your WordPress website, WooCommerce store, AI automation, or custom development project, I'm here to help.

Have a Project in Mind? Let's Make It Happen.

Start a Project
Vishal Bhisara Your WordPress & AI partner
Get a Free QuoteGet a Free Quote