eExtend is live: AI chatbot, translation and content in one subscription. 50% off. Code: Launch26 → Click here
Can One PrestaShop Store Serve Both Wholesale and Retail Customers?

Running wholesale and retail operations through one PrestaShop store can simplify management, but serving both audiences comes with unique challenges. Different pricing structures, order quantities, and customer expectations can make a single storefront difficult to manage.

With the right setup, however, one store can support both business buyers and individual shoppers. Let’s explore how to balance their needs while keeping your store efficient and easy to use.

Why One PrestaShop Store Beats Two For Mixed B2B and B2C

Wholesale and retail customers can share one PrestaShop installation without sharing the same experience.

Yes, a single PrestaShop store can serve wholesale and retail customers by using Customer Groups to apply separate prices, catalogue visibility, tax rules and payment terms per buyer type. You configure this with built-in features (groups, specific prices, B2B mode), optionally extended by a wholesale module, instead of running two stores. The trick is understanding that PrestaShop already separates customers by group, and almost every wholesale/retail rule you need hangs off that one setting.

Two parallel installations look simpler on paper. In practice, you maintain two catalogues, two sets of product images, two tax configurations and two sets of module updates. Every new product gets added twice, and every price change gets checked twice.

A single store also keeps your SEO equity in one place. Product pages earn links and rankings under one domain rather than splitting authority between shop.example.com and wholesale.example.com. When a retailer links to a product, that signal helps the wholesale page too, because they are the same URL.

There is a second advantage that only shows up later: order history. A customer who buys at retail first and opens a trade account later keeps one login, one address book and one order record. Staff see the whole relationship in one back office instead of matching accounts across systems.

One catalogue, one checkout and one customer record is the whole argument: a second store only duplicates the work; it never halves it.

What is A Hybrid B2B B2C PrestaShop Store?

A hybrid store is one PrestaShop installation serving two kinds of buyers at once. The split happens the moment someone registers: a retail shopper creates a standard account, while a trade buyer is placed into a wholesale customer group. From that point, PrestaShop reads the group and serves a different version of the same shop.

In practice, the store has to manage different price lists and tax rules, since many trade customers buy at ex-VAT rates that a retail shopper never sees. It also handles separate shipping methods and payment terms, such as invoice-on-account for approved businesses versus card payment at checkout.

This is fundamentally different from running two separate websites. You maintain one catalogue, one stock count and one order history. Only the rules branching off each customer group differ. PrestaShop treats customer groups as the central switch, which is why the hybrid model stays manageable as your trade list grows.

The setup leans on capabilities that ship with PrestaShop itself:

  • Customer Groups where every wholesale or retail label is applied
  • Specific Prices used to set group-level pricing on a product
  • Group Access Permissions which control which categories and products a group can see

Get those three working together, and you have a genuine hybrid store. Get them wrong and you end up with retail shoppers seeing trade rates, which is the fastest way to lose margin.

PrestaShop Wholesale vs Retail: What Actually Has to Differ

Strip away the buzzwords and a hybrid PrestaShop store comes down to six levers you configure once and then leave alone. Everything else (theme, checkout flow, order management) stays shared. The levers below are where wholesale and retail customers genuinely need to be treated differently.

  • Price: retail shoppers see the catalogue price; trade buyers see tier, contract or quantity-based rates that replace it entirely.
  • VAT Display: retail shows tax-inclusive prices, while business buyers usually need tax-exclusive figures with their VAT number validated at checkout.
  • Minimum Order Value or Quantity: trade buyers often commit to a cart minimum that retail customers never see.
  • Catalogue Visibility: some products, categories or combinations should simply be invisible to the public and visible only to a wholesale customer group.
  • Payment Terms: retail pays upfront by card; approved trade accounts may need invoice-on-account or a purchase-order reference field.
  • Delivery Rules: pallet freight, free-shipping thresholds and cut-off times rarely match the retail carrier mix.

PrestaShop already models most of this natively. Customer groups control which prices and which parts of the catalogue a logged-in trade buyer sees. Tax rules tied to a customer's address and VAT number handle the tax-exclusive display. Specific prices let you attach a discounted rate to one product, one group or one combination without touching the base retail price. The PrestaShop plugins marketplace covers the gaps when native rules are not enough, particularly around approval workflows and quote requests.

Decide the order of configuration before you touch anything. Price and catalogue visibility are the foundation, because tax rules, cart minimums and shipping methods all sit on top of the customer group you have already built. Get the group right first and the rest slots into place.

Lever Retail default Wholesale variant
Price Catalogue price Group-specific or quantity-tier price
VAT Display Tax included Tax excluded, validated VAT number
Order Minimum None Cart minimum value or quantity
Catalogue Access All published products Restricted categories or hidden combinations
Payment Terms Pay now Invoice on account, PO reference
Delivery Standard carriers Freight rules and trade thresholds

How To Set Up A PrestaShop Store for Wholesale and Retail Customers Step By Step

Everything below happens inside one PrestaShop back office. Work through the steps in order, because each one depends on the group you built in the step before it.

  1. Create Your Retail & Wholesale Customer Groups

    Go to Customers, then Groups, and create a group for each audience. Most stores need three: a default Retail group everyone lands in, a Wholesale group for approved trade buyers, and optionally a Wholesale Pending group that holds new applicants on retail pricing until you approve them. Give each group a clear name and a discount percentage of zero at this stage, since you will set pricing properly in step four.

  2. Assign the Right Group At Registration

    In Customers, then Groups, open the Retail group and set it as the default so guest and retail sign-ups never see trade prices by accident. Trade buyers should not be able to select Wholesale themselves on the registration form. Keep the group assignment manual and confirm each business account before switching it over, which is the difference between a working B2B channel and a pricing leak.

  3. Set Default Group Pricing

    PrestaShop lets you apply a percentage discount or a fixed amount per group from the group settings, or use a price display method that shows tax-included, tax-excluded, or both. Set your Wholesale group to show tax-excluded prices if that is how your trade buyers expect to see quotes.

  4. Apply Specific & Tiered Prices Per Group

    Percentage discounts break down as soon as your margin varies by category. For per-product control, open a product in the catalogue, go to the Prices tab, and use the specific price tool. You can attach a price to a single group, a single customer, a quantity threshold, or a combination, and schedule it with a start and end date. This is also where tiered pricing lives: one price for lower volumes, a lower one as quantities increase, and so on.

  5. Restrict Categories or Products To Wholesale Only

    Retail and trade catalogues rarely overlap perfectly. Open a category or product, go to the Associations tab, and tick only the groups allowed to see it, for example Wholesale. Hidden items disappear for logged-out visitors and retail accounts, so your case-pack SKUs and trade-only lines stay invisible to consumers.

  6. Configure Group-specific Tax Rules & VAT Display

    Trade buyers are often VAT-registered and expect tax-excluded pricing, while consumers need tax-included. Build separate tax rules in International, then Tax Rules, then assign them per group or per country so the same product shows the correct figure to each audience without you maintaining two catalogues.

  7. Set Minimum Order Quantities and Pack Sizes

    Trade ordering usually runs in cases, pallets, or set multiples rather than single units. PrestaShop handles this through minimum quantity and pack quantity settings on the product, and dedicated features such as minimum order quantity and minimum order value can enforce the rule at product and cart level. This stops a wholesale buyer from submitting an order that costs more to pick than it earns.

  8. Enable Group-restricted Payment Terms

    Consumers pay by card at checkout. Trade accounts often expect invoice terms. Restrict payment methods by customer group in Payment then Preferences so bank transfer or invoice-on-account only appears for approved Wholesale customers, while card and wallets stay available to everyone else.

  9. Test Both Buyer Journeys End to End

    Create one test retail account and one test wholesale account, then walk each through browsing, adding to cart, and checkout. Check four things: catalogue visibility, price including tax display, payment methods offered, and whether quantity rules actually block an invalid order. A rule you have not tested as a logged-in buyer is not configured; it is just hoped for.

Best Ways To Manage Wholesale & Retail Pricing in PrestaShop

PrestaShop gives you four separate pricing mechanisms that all feed into the final price. The trick to running PrestaShop wholesale and retail smoothly is picking one primary mechanism per customer group and using the others only for narrow exceptions. Stack too many at once, and you will spend your evenings reverse-engineering why a trade customer paid more than expected.

The table below maps each tool to the job it does best.

Mechanism Where you find it Best for
Group Discount Customers > Groups A flat percentage or amount off for every wholesale customer
Specific Prices Product > Pricing tab Negotiated rates for one customer, or one product's trade price
Advanced Pricing by Quantity Product > Pricing tab Tiered break pricing at higher volumes
Catalogue price rules Catalogue > Discounts > Catalogue price rules Site-wide promotions, brand-level markdowns, seasonal trade offers

Start with the group discount when your wholesale terms are simple: one group, one percentage, done. It is the least fiddly option and the easiest to explain to a new trade account.

Move to specific prices when individual SKUs need their own trade value. A single "wholesale" percentage rarely suits a catalogue where some lines carry thin margins and others carry fat ones.

Advanced pricing by quantity earns its keep on fast-moving stock, such as a packaging supplier selling pallet quantities. Set your tiers carefully, because PrestaShop applies the rule that matches the quantity in the cart, not the quantity you hoped for.

Catalogue price rules suit time-limited campaigns across a whole category. Keep them short-lived and clearly dated, then disable them.

Whichever combination you choose, test it as a logged-in trade customer before launch. If you run modules that extend PrestaShop's native pricing, such as a tiered pricing or customer group module from a PrestaShop Partner like FME Modules, check that its rules and the core rules agree rather than fight.

Do You Need A PrestaShop Wholesale Plugin?

Often, no. PrestaShop already ships with the three things most mixed stores actually need: customer groups, group-specific prices, and category restrictions per group. If your wholesale terms are simple, for example, a flat percentage off list price for anyone in the "Wholesalers" group, you can build that today without installing anything.

The built-in route holds up when:

  • Trade discounts are a single percentage or a fixed amount, applied the same way to every approved account.
  • Every wholesale buyer sees the same trade catalogue, at the same prices.
  • Payment happens on the standard checkout, just with different terms attached to the group.
  • Approval is a one-time decision you make when the account registers.

Beyond that line, you start fighting the platform. A Presta Module for B2B and wholesale earns its place when the buying relationship itself needs managing, not just the price.

Look for one when you need:

  • Quote requests and negotiated pricing, where a buyer builds a cart and asks you to price it rather than checking out immediately.
  • Customer-specific price lists including per-account catalogues, contract prices, or buyer-defined tiers that do not fit a single group discount.
  • Credit limits and payment terms such as invoice-on-account, net-style terms, or a spending cap that blocks checkout once a customer exceeds it.
  • Approval workflows where a purchase over a set value needs a second signature before the order is confirmed.
  • Bulk ordering by SKU or CSV the way a shop owner reorders stock, rather than clicking through product pages.

Test your requirements against that list honestly. If three or more apply, a wholesale module is the cheaper engineering decision. If only one does, configure it with native PrestaShop features first and revisit later.

Where Mixed Wholesale & Retail Stores Go Wrong

Most hybrid PrestaShop store failures are not feature gaps. They are configuration leaks, where a setting that works perfectly for one customer group quietly breaks the other.

Tax display is the most expensive one. In the UK, showing VAT-exclusive prices to consumers breaches HMRC's price marking rules, which require displayed prices to include VAT. If you have set your store to show prices excluding tax to serve trade buyers, that same storefront is now showing the wrong figure to every retail shopper who lands on it. Set tax display per customer group and verify each group's view in a logged-in session, not just by switching the group in the back office.

The second common failure is visibility rather than pricing. A wholesale price that is correct but visible to guests is still a wholesale price on a public page, and competitors will find it. Audit Customer Groups against every product and category before launch.

Then there is the checkout mismatch. A minimum order quantity (MOQ) set to protect trade margins will block a consumer buying a single item, and the customer rarely understands why. The same applies the other way round when a bulk offer is left open to retail buyers.

Two smaller problems compound over time:

  • Overlapping carrier rules from a wholesale shipping module and your standard configuration, which produce quotes nobody can explain.
  • Duplicating each product as a separate wholesale copy, which doubles your catalogue, splits stock and inflates every future price update.

Each of these is fixable in the back office. The point is that they are configuration faults, not reasons to run two stores.

Testing Both Buyer Journeys Before You Launch

Configuration is only half the job. The other half is registering two test accounts (one retail, one wholesale) and walking the entire order path as each customer type. Treat this as a formal sign-off, not a quick glance. It is by far the cheapest place to catch a mis-scoped price rule or a catalogue that leaks to the wrong audience.

Start with the retail account, then repeat every check on the wholesale account:

  • Catalogue Visibility: confirm the retail login cannot see wholesale-only categories or products, and that hidden items return no results in search.
  • Price Accuracy: check base prices, volume discounts, and customer group reductions resolve correctly at the cart, not just the product page.
  • VAT Display: verify both tax-inclusive and tax-exclusive views match what each customer group is entitled to see.
  • Payment Options: confirm the retail account cannot select invoice terms reserved for wholesale, and vice versa.
  • Stock and Shipping: place a small order on each and confirm carriers, delivery estimates, and stock deductions behave as intended.

If you use PrestaShop modules for group-based pricing or catalogue restrictions, test them with the module enabled, not just disabled. Some rules only trigger once a customer is logged in, so a guest session will not expose the fault.

Finish by checking what search engines can actually index. Retail-facing pages should be crawlable; wholesale-only or trade-pricing pages should sit behind login or a noindex rule so shoppers never stumble onto them from Google. If your wholesale prices are visible without a login, you have already lost the negotiation.

Yes, one PrestaShop store can serve both wholesale and retail customers, but only if you fork three things by customer group: pricing, catalogue visibility, and payment terms. Running a single shop with a single price list forces you into constant compromises, and running two separate installations doubles your maintenance forever. The practical path is one back office, two customer groups, and rules that switch automatically depending on who is logged in. This guide walks through that configuration so a trade buyer and a walk-in shopper can check out on the same domain without ever seeing each other's terms.

Why Customer Groups Beat Running Two Stores

A second PrestaShop installation looks simple on day one and becomes expensive later. You maintain two sets of products, two sets of stock levels, two sets of tax rules, and two places to apply every PrestaShop module update. Stock is the killer: sell the last pallet on the retail site and the wholesale site still thinks it has one.

Customer groups solve this because they are a property of the customer, not the store. PrestaShop ships with a default group, and you can create as many additional groups as you need, such as "Trade" and "Retail". Every visitor is placed in a group, either by default or by your approval, and every price, discount, and tax rule can be attached to that group.

The trade-off is that group-based rules are global rules. If you want a wholesale buyer in Leeds to see different pricing from a wholesale buyer in Manchester, you need a module that adds per-customer pricing on top of the group layer. For most merchants, the group layer alone covers it.

One store with two groups is cheaper to run than two stores with one group each, because stock, orders and reporting stay in a single place.

Setting Up Wholesale and Retail Customer Groups in PrestaShop

Everything starts under Customers in the PrestaShop back office. Create your groups first, before you touch pricing, so the price rules have something to attach to.

  1. Go to Customers, then Groups, and select Add new group.
  2. Name the group, for example "Wholesale", and give it a short description you will recognise in reports.
  3. Leave Apply discount at zero for now. You will set real discounts once you have decided your pricing model.
  4. Repeat for a "Retail" group if you want retail prices handled by a separate rule set rather than by PrestaShop's default behaviour.

New customers land in whatever group is set as default in Shop Parameters under Customer Settings. That should normally be your retail group, so ordinary shoppers never need approval.

Wholesale buyers then join the trade group in one of two ways. You can approve applications manually, which is the safest route if you need to verify a business before revealing trade prices. Or you can let customers pick a group during account creation, which is faster but opens the door to anyone claiming trade status.

Choosing Between Manual Approval and Self-selection

Manual approval suits merchants selling to registered businesses, where you want to check a VAT number or company address before granting access. A customer registers, you review the account in Customers and you change their group. They see retail prices until you do.

Self-selection suits merchants whose trade terms are public anyway, such as a wholesaler with a published price list. The risk is that retail shoppers tick the trade box to get a discount, so combine self-selection with a minimum order value if you go this route.

Forking Catalogue Visibility So Each Group Sees the Right Products

Visibility is the part most merchants overlook. Price is obvious, but wholesale-only products (bulk packs, unbranded trade lines, minimum-quantity SKUs) should not appear in the retail catalogue at all. Showing a bulk pack at a trade price to a retail shopper just creates a support email.

PrestaShop lets you restrict a product or an entire category to selected customer groups. Edit the product, open the Options tab, and use the Customer groups field to limit availability. Leave it empty, and everyone sees the product; tick specific groups and only those groups do.

Category-level restrictions are faster when you have a whole trade range. Apply the restriction at the category, and every product beneath it inherits the rule unless you override it on the individual product. That keeps a large number of SKUs manageable instead of a hundred edits.

Restrict categories, not individual products, whenever a whole trade range is involved, because category rules cascade and product rules do not.

Building Price Rules that Apply Only to Wholesale Buyers

PrestaShop gives you two layers of pricing, and using them together is what makes group pricing workable. The first is a specific price, which overrides the base price for a group, a customer, a currency, or a date range. The second is a cart rule, which applies a discount at checkout.

For a clean trade price list, use specific prices. Go to Catalog then Discounts and add a new price rule. Set Apply to as the product you are pricing, then set the Customer group condition to Wholesale. Enter the trade price, set the minimum quantity if the trade price only kicks in above a certain volume, and save.

Volume tiers live here too. A single product can hold several specific prices, each tied to a different quantity threshold, so buying more units costs less per unit than buying one. That is the mechanism behind most wholesale price breaks, and it needs no extra module.

Where Combinations and Attributes Complicate Things

If a product has combinations, such as size or pack format, specific prices can be set against the combination rather than the whole product. Trade buyers often buy a pallet SKU that retail never sees, so restricting that combination to the Wholesale group does the job cleanly.

Check your tax rules before you publish trade prices. Wholesale customers are frequently tax-exempt or taxed differently, and PrestaShop applies tax rules by group as well as by country. Verified business buyers may be able to skip VAT, but whether it applies depends on your local rules, so confirm the treatment before you enable anything.

Shipping & Payment Terms Per Group

Wholesale orders rarely follow retail logic. A trade buyer wants a pallet delivered on a booked day, pays on account, and does not want to be charged

Conclusion

Running wholesale and retail from one PrestaShop installation is not a compromise; it is the configuration PrestaShop was built to support. The customer group is the pivot: build it once, assign it correctly at registration, and pricing, catalogue visibility, tax display, payment terms and delivery rules all hang off it. Everything else in the back office stays shared, which is exactly why your stock, orders and reporting stay in one place instead of two.

The merchants who struggle are rarely missing a feature. They are leaking a rule: a trade price visible to guests, a tax display set for the wrong audience, or a minimum order quantity blocking a retail shopper. Almost all of that gets caught by one afternoon of testing two logged-in accounts, retail and wholesale, through the whole order path.

Treat the module question as a decision you earn, not one you start with. Native groups, specific prices and category restrictions cover a flat-percentage trade channel comfortably. Step up to a wholesale module when the relationship itself needs managing, which in practice means quote requests, per-account price lists, credit limits or bulk CSV ordering.

Whichever route you take, start with the group, restrict the catalogue, then price. That order saves you from re-doing work every time the trade list grows.

Ready to add the features native PrestaShop leaves out, from quote requests to customer-specific price lists and invoice-on-account credit limits? Explore the PrestaShop B2B and wholesale modules at FME Modules and configure one that fits the way your trade customers actually buy.

Frequently Asked Questions

Can one PrestaShop store really handle both wholesale and retail pricing?+–
Yes. PrestaShop assigns every customer to a group, and prices, discounts and tax rules attach to that group rather than the store itself. A trade buyer logged into the Wholesale group sees trade rates while a retail shopper on the same URL sees the standard catalogue price. You do not need a second installation or a second domain to keep the two apart.
Will wholesale prices ever show to retail shoppers or logged-out visitors?+
Only if the rules are misconfigured. Specific prices and group discounts apply solely to their assigned group, so a guest or retail account never inherits them. The common leak is a product left visible to all groups when it should be restricted, so audit each category and product's group access before launch. Test in a private browser window rather than trusting the back office preview.
Do I need a PrestaShop module, or are the built-in features enough?+
Built-in customer groups, specific prices and category restrictions handle a straightforward trade channel, such as a flat percentage off for every approved account. A module earns its place when the buying relationship needs managing: quote requests, per-customer price lists, credit limits, invoice-on-account terms or bulk ordering by SKU or CSV. If three or more of those apply to you, a dedicated module is usually the cheaper decision.