Here is the trap most PrestaShop merchants fall into with B2B: they assume it's a feature they switch on. It isn't. B2B is a different shape of customer running through the same store — someone who buys by the case, reconciles against an invoice 30 days later, expects to see prices without VAT, and references a PO number their accounts department gave them. None of that is exotic; it's just commerce the way businesses have always done it. PrestaShop can run it well, but the platform was built B2C-first, and the B2B pieces are scattered across half a dozen settings screens and a few jobs the core simply doesn't do. This guide is the map: what genuinely differs between B2C and B2B, what PrestaShop handles natively, and where each gap gets closed — with a link to the deep dive for every piece so you can go as far down as you need.

B2C vs B2B on PrestaShop: what actually changes

Before any configuration, it helps to see the two customer types side by side. The same catalogue, the same checkout, the same admin — but almost every assumption flips:

DimensionB2C (default PrestaShop)B2BWhere it's solved
Price displayTax-included (gross)Tax-excluded (net) — VAT is reclaimable, so they price on the net figureCustomer group setting + a front-end switcher
Pricing modelOne price for everyoneTiered by volume, often negotiated per accountSpecific prices + customer groups
PaymentCard / wallet at checkoutPay on invoice, 30/60/90-day terms, credit limitA deferred-payment module (core has nothing)
Tax across bordersCharged per destinationZero-rated for valid EU VAT numbers (reverse charge)VIES validation + tax exemption
AccessInstant on registrationVetted — you confirm they're a real business firstA trade-account approval workflow
Order rhythmOne-off purchasesRepeat orders, minimum quantities, fast reorderQuantity breaks + reorder from order history

So what does that mean for you? You don't need to rebuild your store. You need to add a second mode that lives alongside the B2C one, driven almost entirely by PrestaShop's customer-group system, and plug the handful of gaps the core leaves open. The mistake that costs merchants is bolting wholesale onto a B2C store as an afterthought — one global setting flipped here, a manual price override there — until the two modes start contradicting each other. Structure it deliberately and it stays clean.

Step one: turn on PrestaShop's built-in B2B mode

Go to Shop Parameters → Customer Settings (on 1.6 it lives under Customers → Settings) and switch on Enable B2B mode. This is one toggle, and it does less than its name suggests — but it's the correct starting point. Once enabled, B2B mode exposes extra business fields such as SIRET, APE, website, and an allowed outstanding amount (a per-customer credit ceiling that other features can read). A company/address field may already exist depending on your form, version, and theme — B2B mode mainly adds the business-account fields on top.

Be clear about what this toggle does and doesn't do. It exposes fields and a credit-limit number; it does not enforce anything, validate a VAT number, change a single price, or gate access. Those are passive data slots waiting for logic you build around them. Turn it on, then treat everything below as the actual B2B setup.

Customer groups: the spine of the whole thing

If you take one architectural idea from this guide, take this: in PrestaShop, B2B is a group problem. Tax display, discount level, whether prices show at all, which payment methods appear — most of those decisions can be made per customer group (carrier access isn't a native group setting; it needs carrier configuration or a module depending on your setup). Build the groups correctly and the rest of your B2B setup hangs off them naturally.

Create your groups under Shop Parameters → Customer Settings → Groups. The three settings that matter for B2B are Price display method (set Tax excluded for trade groups), Discount (a flat group-wide percentage, though per-product tiers are usually better), and Show prices (toggle off to hide prices from a group entirely — useful for a guest group you want to force into registration). A customer can belong to several groups, with one set as their default that drives pricing.

Groups are deep enough to deserve their own treatment — how to layer them, how price priority resolves when a customer sits in two groups, and how to assign customers automatically rather than by hand. That's covered in full in customer groups in PrestaShop: showing different prices to different customers. For the hub, the rule is simple: one trade group per pricing tier, never per individual customer.

Net vs gross: the price-display problem

This is the single most visible B2C/B2B difference, and the one that generates the most "why doesn't my invoice match the website?" support calls. B2B buyers think in net prices because they reclaim the VAT; B2C buyers need to see the gross figure they'll actually be charged. The customer-group Price display method handles this per group — but there's a UX hole: a trade customer sees gross prices until they log in, with no signal that the numbers will change.

The fix is a front-end tax-display toggle so net pricing is visible before login, plus the configuration to make group-based switching behave. The full walkthrough — including how PrestaShop computes the displayed price and where the switch belongs in the theme — is in net prices vs gross prices: tax display switching for B2B customers.

Cross-border EU sales: zero-rating with a valid VAT number

Sell to a VAT-registered business in another EU country and you're generally required to zero-rate the sale under the reverse-charge mechanism — once their VAT number checks out against VIES. Done by hand this is a slow, error-prone job: take the number, look it up, manually flag the account tax-exempt, hope you didn't fat-finger it. At any real volume it collapses, and a wrong call here is a compliance problem, not a cosmetic one.

The right answer is automated validation against the VIES API at registration or checkout, with tax-exempt status applied to the account when the number is valid. That's exactly the territory of EU VAT checker: automating tax exemption for business customers — and it's a thing you want in place from day one, because retrofitting it onto a store full of mis-taxed historical orders is far more painful.

Payment terms: the gap PrestaShop won't fill on its own

This is the biggest structural difference, and the one the core genuinely cannot do. PrestaShop assumes payment at checkout. B2B routinely means goods now, payment in 30, 60, sometimes 90 days, against a credit limit and an invoice with a due date. There is no native "pay on invoice" that tracks outstanding balances — the closest the core gets is that passive allowed outstanding amount field from B2B mode, which stores a number and does nothing with it.

Closing this means a proper deferred-payment system: a "Pay on invoice" method that appears only for approved trade customers, per-customer or per-group credit limits, invoices with due dates, and balance tracking. The full mechanics — how the payment method is gated, how limits are enforced, how partial payments are handled — are in deferred payment terms: letting business customers pay on invoice. This is the feature that most cleanly separates a real B2B setup from a workaround.

Vetting trade customers before you give them access

Never grant wholesale pricing and payment terms the instant someone registers. The whole point of B2B is that the relationship is qualified: are they actually a business, is the VAT number real, are they a customer you want extending credit to? Giving instant trade access is how you end up selling at wholesale margins to a consumer who found the registration form.

The clean pattern is an extended application form, an account created in a pending group with no special pricing, a human review, and only then promotion into the right trade group. The approval workflow, the pending-state handling, and the staged emails that keep applicants informed are covered in trade account applications: verifying business customers before giving access. The hub-level principle: registration creates an applicant, not a trade customer.

Tiered pricing and minimum quantities

B2B pricing is rarely flat — the more a customer buys, the lower the unit price. PrestaShop handles this natively through specific prices with quantity breaks: edit the product, open the Pricing tab, then add a Specific price. Crucially, you can scope a specific price to a single customer group, so your volume discounts appear only to wholesale buyers and never touch the retail price.

Minimum order quantities work alongside this. Set a minimum quantity per product (or combination) so a wholesale customer can't place a single-unit order on something you only ship by the case — an order that often costs more to pick and pack than it earns. For a cart-wide minimum you'll need a small rule or module, since the per-product minimum is what the core gives you.

Catalog mode done the B2B way

Some wholesalers don't want prices public at all — either the pricing is confidential, or they want registration as the price of admission. PrestaShop's global catalog mode (under Shop Parameters → Product Settings) hides prices and the buy button from everyone, which is too blunt for a hybrid store: it kills your B2C sales too.

Do it per group instead. Set Show prices off for the guest/visitor group and on for your B2C and trade groups. Guests browse the catalogue but are prompted to register or log in to see prices; approved customers see the right figures for their tier. Same store, two experiences, ten minutes of configuration and no global blunt instrument.

A clean hybrid B2C + B2B structure

Most PrestaShop merchants doing B2B aren't pure wholesalers — they serve retail and trade from one store. Here's a group layout that keeps the two from interfering:

  • Default group (guests + new registrations): tax-included prices, standard card checkout. Your B2C layer, untouched.
  • Trade group (approved): tax-excluded prices, volume discounts, pay-on-invoice enabled, quick reorder from order history.
  • EU Trade group: as Trade, but with the VAT number validated and tax-exempt status applied automatically.
  • Pending Trade group: applied but not yet approved — can log in and browse, but sees retail prices and standard payment only.

The win of this structure is isolation: your B2C experience is completely unaffected by the B2B configuration, because every B2B behaviour is attached to a group a B2C customer never enters. One catalogue, one admin, two cleanly separated modes.

What to set up, in order

Starting from a stock store, this is the sequence that avoids rework:

Most of that is configuration, not custom development — PrestaShop has the bones for B2B, it just needs to be assembled with intent. Steps 4, 5 and 6 are where the core stops and dedicated modules begin; if you'd rather start from a coordinated set than wire those up one at a time, the modules behind those deep-dive guides are built to share one configuration so the trade group, the VAT exemption and the invoice terms agree with each other instead of fighting. Either way, the order above is the part that matters: get the group structure right first, and every other B2B decision has somewhere clean to attach.

Share this post:
David Miller

David Miller

Over a decade of hands-on PrestaShop expertise. David builds high-performance e-commerce modules focused on SEO, checkout optimization, and store management. Passionate about clean code and measurable results.

Enjoyed this article?

Get our latest tips, guides and module updates delivered to your inbox.

Comments

No comments yet. Be the first!

Be the first to ask a question or share useful feedback.

Loading...
Back to top