Setting up a B2B store on PrestaShop is not just flipping a switch in the back office. I have configured B2B operations for wholesalers, distributors, and manufacturers across the EU, and the gap between "B2B mode enabled" and "actually functioning B2B operation" is significant. VAT handling alone involves dozens of configuration decisions that directly impact whether your invoices are legally compliant and whether your prices make sense to business buyers.
This guide covers everything: from initial customer group setup to VIES validation, reverse charge implementation, net price display, payment terms, and country-specific invoice requirements. If you are serious about selling B2B through PrestaShop, this is the reference you will keep coming back to.
The B2B E-Commerce Landscape in Europe
B2B e-commerce in Europe is growing faster than B2C. According to Statista's 2025 report, European B2B e-commerce revenue exceeded €1.8 trillion, with digital channels accounting for an increasing share of wholesale and distribution transactions. Business buyers now expect the same self-service experience they get as consumers — online catalogs, instant pricing, digital ordering — but with business-specific requirements layered on top.

Those requirements are where most e-commerce platforms struggle. Consumer-focused platforms treat VAT as a simple percentage added at checkout. B2B VAT in the EU is anything but simple. You need to handle domestic sales with standard VAT, intra-community supplies with zero-rated VAT, export sales outside the EU with no VAT, customer-specific tax exemptions, and reverse charge mechanisms — all from the same store, often for the same product.
PrestaShop can handle all of this. But only if you configure it correctly.
Step 1: Enable B2B Mode and Create Customer Groups
Enabling B2B Mode
Navigate to Shop Parameters → Customer Settings and enable B2B mode. This unlocks additional fields on customer profiles:
- Company name (required for business invoices)
- SIRET / Company registration number
- APE / Business activity code
- Website
- Allowed outstanding amount (credit limit for deferred payments)
- Maximum payment days (net 30, 60, 90)
- Risk rating (none, low, medium, high)
These fields appear on the customer edit page in the back office and on the registration form in the front office. For most B2B operations, I recommend disabling front-office self-registration and instead creating business accounts manually after verifying the company's legitimacy and VAT number.
Creating B2B Customer Groups
Navigate to Customers → Groups and create dedicated groups for your business customers. I typically set up the following structure:
| Group Name | Price Display | Discount | Use Case |
|---|---|---|---|
| B2B Domestic | Tax excluded | 0-15% | Business customers in your country (VAT charged) |
| B2B EU (VAT validated) | Tax excluded | 0-15% | EU businesses with valid VAT number (reverse charge, 0% VAT) |
| B2B Non-EU | Tax excluded | 0-15% | Businesses outside the EU (export, 0% VAT) |
| B2B Wholesale | Tax excluded | 20-40% | High-volume distributors with preferential pricing |
For each group, the critical setting is Price display method. Set this to "Tax excluded" so business buyers see net prices throughout the catalog, cart, and checkout. This is not just a convenience — it is how B2B buyers expect to see prices, and it avoids confusion during purchase decisions.
You can also set a group-wide discount percentage that applies to all products. For more granular control, use PrestaShop's Specific Prices feature to set per-product or per-category pricing for each group.
Step 2: Configure Tax Rules for B2B Scenarios
Tax configuration is where most B2B PrestaShop setups go wrong. The core challenge is applying different VAT treatment based on three variables: the customer's location, the customer's business status, and whether their VAT number has been validated.
Understanding the Three B2B Tax Scenarios
Scenario A: Domestic B2B Sale
You sell from Germany to a German business. Standard German VAT (19%) applies. The invoice shows VAT separately, and the buyer reclaims it through their VAT return. No special treatment needed — this works like a regular sale, just with net price display.
Scenario B: Intra-Community Supply (Reverse Charge)
You sell from Germany to a French business with a valid French VAT number. Under EU Directive 2006/112/EC, this is an intra-community supply. You charge 0% VAT and the French buyer accounts for VAT in France through the reverse charge mechanism. Your invoice must include specific text referencing the reverse charge and the buyer's VAT number.
Scenario C: Export Outside the EU
You sell from Germany to a business in Switzerland, the UK (post-Brexit), or the United States. No EU VAT applies. Your invoice shows 0% VAT with a reference to export exemption. Import duties and local taxes are the buyer's responsibility.
Setting Up Tax Rules in PrestaShop
Navigate to International → Taxes → Tax Rules. You need to create tax rules that match each scenario. For a German-based store:
- Create a tax rule group called "Standard VAT (Domestic + EU consumers)" — this is your default, applying each country's standard VAT rate (19% for DE, 20% for FR, 21% for NL, etc.).
- Create a tax rule group called "B2B EU Reverse Charge (0%)" — set all EU countries to 0% tax. This rule group will be applied to validated intra-community B2B customers.
- Create a tax rule group called "Export (0%)" — set all non-EU countries to 0% tax.
The key mechanism: when a customer's VAT number is validated and they are assigned to the "B2B EU" customer group, PrestaShop uses the tax rules associated with that group. By setting the group's tax rule to the reverse charge (0%) rule group, VAT is automatically removed for qualified intra-community transactions.
Practical Implementation
In PrestaShop, you can assign tax rules at the product level, but for B2B scenarios, the more effective approach is to use customer group-based tax exemption. When a customer belongs to the "B2B EU (VAT validated)" group, PrestaShop can apply zero-rate tax rules automatically.
The exact mechanism depends on your PrestaShop version:
- PrestaShop 1.7.x and 8.x: Use a module to automate the group assignment based on VIES validation result. The module checks the VAT number, confirms it is valid, and moves the customer to the tax-exempt group.
- PrestaShop 9.x: Similar approach, with improved API support for external validation services.
Step 3: Implement VIES VAT Number Validation
The VAT Information Exchange System (VIES) is the EU's official database for validating VAT registration numbers across all 27 member states. Before you zero-rate an intra-community supply, you are legally required to verify the buyer's VAT number is valid and corresponds to an active registration.
Why Manual Validation Is Not Enough
Some merchants check VAT numbers manually on the VIES website. This fails for three reasons:
- It does not scale. Checking every order manually takes time and creates bottlenecks.
- It does not create an audit trail. Tax authorities want timestamped proof that you validated the number at the time of the transaction, not a screenshot from a website.
- It does not catch changed registrations. A VAT number that was valid when the customer registered might be deactivated later. You need to revalidate periodically.
Automated VIES Validation in PrestaShop
Our Automatic EU VAT Checker module integrates VIES validation directly into PrestaShop's checkout flow:
- Customer enters their VAT number during registration or at checkout.
- The module queries the VIES SOAP API in real-time, checking the number against the EU database.
- If valid: The customer is automatically assigned to the B2B EU customer group. Tax is recalculated to 0% (reverse charge). A validation record is stored with timestamp, request ID, and the VIES response.
- If invalid: The customer is informed that their VAT number could not be validated. Standard VAT is applied. They can proceed with the order (at full VAT) or correct their number.
- If VIES is unavailable (the service has scheduled downtime): The module can be configured to either apply standard VAT (safe default) or temporarily accept the number pending re-validation.
The validation record is essential for tax audits. When a tax authority asks why you zero-rated a specific invoice, you need to produce timestamped proof showing that VIES confirmed the buyer's VAT number at the time of sale.
VIES Country Code Format
Each EU member state has a specific VAT number format. Common examples:
| Country | Prefix | Format | Example |
|---|---|---|---|
| Germany | DE | 9 digits | DE123456789 |
| France | FR | 2 chars + 9 digits | FR12345678901 |
| Netherlands | NL | 9 digits + B + 2 digits | NL123456789B01 |
| Spain | ES | 1 char + 7 digits + 1 char | ESX1234567A |
| Italy | IT | 11 digits | IT12345678901 |
| Poland | PL | 10 digits | PL1234567890 |
| Belgium | BE | 10 digits | BE0123456789 |
| Austria | AT | U + 8 digits | ATU12345678 |
| Sweden | SE | 12 digits | SE123456789012 |
| Ireland | IE | 7 digits + 1-2 chars | IE1234567A |
A proper validation module handles format checking before querying VIES, preventing unnecessary API calls for obviously invalid numbers.
Step 4: Configure Net Price Display
Business buyers think in net prices (excluding tax). Consumer prices are gross (including tax). In a hybrid B2C/B2B store, you need both displays to work simultaneously.
How PrestaShop Handles Price Display
PrestaShop's price display is controlled at the customer group level. Each group has a "Price display method" setting:
- Tax included: Shows prices with VAT (default for B2C groups, "Visitor" and "Customer")
- Tax excluded: Shows prices without VAT (used for B2B groups)
When a logged-in B2B customer browses your catalog, they see net prices everywhere: product listings, product pages, cart, and checkout. The VAT is shown as a separate line item at checkout for transparency but does not inflate the displayed prices.
The Guest Visitor Problem
Before a customer logs in, PrestaShop displays prices based on the default customer group (usually "Visitor," which shows tax-included prices). This creates a jarring experience for B2B buyers who land on your site and see gross prices until they log in.
Solutions:
- Tax Display Switcher: Our Tax Display Switcher module adds a toggle on the storefront that lets visitors switch between gross and net price views without logging in. This is particularly useful for hybrid stores serving both B2C and B2B customers.
- Separate B2B subdomain: Create a dedicated B2B storefront (e.g., wholesale.yourdomain.com) using PrestaShop's multistore feature, with the default group set to B2B (tax excluded). This gives business buyers a dedicated experience from first visit.
- Login-gated pricing: Hide prices entirely for non-logged-in visitors and require registration to see pricing. Common in wholesale operations where you want to approve accounts before revealing trade prices.
Step 5: Implement the EU Reverse Charge Mechanism
The reverse charge is not just a tax rate change — it is a legal invoicing requirement with specific documentation obligations.
What the Reverse Charge Requires
Under the EU VAT Directive (2006/112/EC, Articles 138 and 196), when you supply goods or services to a VAT-registered business in another EU member state:
- You do not charge VAT on the invoice.
- Your invoice must state that the reverse charge applies, with a reference to the relevant article (e.g., "Reverse charge — Article 138, Directive 2006/112/EC").
- Your invoice must include the buyer's VAT number.
- The buyer declares the VAT in their own country's VAT return, both as output VAT (payable) and input VAT (reclaimable). The transaction is typically VAT-neutral for the buyer.
- You report the transaction in your EC Sales List (Zusammenfassende Meldung in Germany, Déclaration Européenne de Services in France).
Configuring Reverse Charge in PrestaShop
PrestaShop does not have a built-in "reverse charge" checkbox. Instead, you achieve it through the customer group and tax rule combination described in Step 2:
- Customer's VAT number is validated via VIES (Step 3).
- Customer is assigned to the "B2B EU (VAT validated)" group.
- That group's tax rules apply 0% VAT for all EU countries.
- The invoice template is customized to include the reverse charge notice and the customer's VAT number.
For the invoice customization, you need to modify your invoice template (located in /pdf/invoice.tpl or your theme's override) to conditionally display the reverse charge notice when the customer belongs to the B2B EU group. The template should include:
- The buyer's VAT number prominently displayed
- The legal text: "Intra-community supply exempt from VAT — Article 138, Directive 2006/112/EC. VAT to be accounted for by the recipient under the reverse charge mechanism."
- Both seller and buyer company details
Step 6: Invoice Requirements by EU Country
While the EU VAT Directive provides a common framework, individual member states have specific invoice requirements that you must follow when selling to businesses in those countries.
Mandatory Invoice Fields (All EU Countries)
- Sequential invoice number
- Invoice date
- Seller name, address, and VAT number
- Buyer name, address, and VAT number
- Description of goods or services
- Quantity and unit price (net)
- VAT rate and amount (or reverse charge notice)
- Total amount due
- Payment terms and due date
Country-Specific Additions
| Country | Additional Requirement |
|---|---|
| Germany | Tax number (Steuernummer) OR VAT ID on every invoice. Sequential numbering must be continuous (no gaps). Invoices must be retained for 10 years. |
| France | SIREN/SIRET number required. Mention of penalties for late payment mandatory since 2013. Discount terms must be specified. |
| Italy | Electronic invoicing (FatturaPA) mandatory for domestic B2B since 2019. Cross-border transactions reported via SDI (Sistema di Interscambio). |
| Spain | Spanish Tax ID (NIF/CIF) required. Corrective invoices require reference to original. SII (Suministro Inmediato de Información) real-time reporting for large companies. |
| Netherlands | KvK (Chamber of Commerce) number recommended. BTW-id number required. |
| Poland | NIP (tax identification number) required. KSeF (Krajowy System e-Faktur) mandatory e-invoicing being rolled out in 2026. |
| Belgium | Enterprise number (KBO/BCE) required. Payment terms legally capped at 60 days for B2B. |
PrestaShop's invoice template can be customized to accommodate these variations, but be aware that country-specific electronic invoicing mandates (Italy's FatturaPA, Poland's KSeF) require dedicated integration modules that generate invoices in the required XML format and submit them to government portals.
Step 7: Implement Payment Terms
Traditional B2B transactions rarely involve immediate payment. Business buyers expect to receive goods, verify them, and pay according to agreed terms — typically net 30, net 60, or net 90 days. This is fundamentally different from B2C e-commerce where payment is collected at checkout.

What You Need for Deferred Payments
- Order completion without payment: The checkout process must allow approved customers to place orders without entering payment details.
- Credit limit management: Each B2B customer should have a maximum outstanding balance. When they hit their limit, new orders require prepayment until invoices are settled.
- Invoice generation with due dates: Invoices must show the payment due date calculated from the order date plus the agreed payment terms.
- Outstanding balance tracking: You need a dashboard showing who owes what, what is overdue, and what is coming due.
- Payment reminders: Automated emails at due date, 7 days overdue, and 30 days overdue.
- Credit note handling: When a partial return occurs, the credit note must reference the original invoice and adjust the outstanding balance.
PrestaShop's Built-in B2B Payment Features
PrestaShop's B2B mode provides basic infrastructure: the customer profile includes fields for "allowed outstanding amount" and "maximum payment days." However, the native implementation is minimal — it blocks orders exceeding the credit limit but does not provide proactive reminders, aging reports, or integrated payment tracking.
For a production-ready implementation, our B2B Deferred Payment Terms module extends PrestaShop with:
- Configurable payment terms per customer group (net 7, 14, 30, 60, 90)
- Automatic due date calculation on invoices
- Credit limit enforcement with configurable behavior (block order vs. require approval)
- Outstanding balance dashboard in the back office
- Automated payment reminder emails at configurable intervals
- Payment recording against specific invoices
- Aging report (current, 30 days, 60 days, 90+ days overdue)
Alternative Payment Approaches for B2B
Not every B2B operation needs full deferred payment. Consider these alternatives:
- Proforma invoice workflow: Customer places order → you generate a proforma invoice → customer pays by bank transfer → you ship upon payment receipt. This eliminates credit risk while maintaining a professional B2B workflow.
- Split payment: 50% deposit at order, 50% upon delivery. Reduces credit exposure while accommodating business purchasing processes.
- Payment gateway with B2B features: Some gateways (like Billie or Mondu) specialize in B2B buy-now-pay-later, handling credit checks and payment collection on your behalf for a fee.
Step 8: Handle Special Pricing and Quantity Discounts
B2B pricing is rarely a flat catalog price. Business buyers expect tiered pricing based on volume, negotiated rates based on relationship, and sometimes customer-specific pricing that reflects contractual agreements.
PrestaShop's Pricing Tools for B2B
Specific Prices: Navigate to a product's Pricing tab and add specific prices for each customer group. You can set:
- A fixed price (overriding the base price)
- A percentage discount from the base price
- A fixed amount reduction
- Quantity thresholds (price applies only when ordering X or more units)
Example tier structure for a product with €100 base price:
| Quantity | B2B Domestic Price | B2B Wholesale Price |
|---|---|---|
| 1-9 units | €90 (10% off) | €75 (25% off) |
| 10-49 units | €85 (15% off) | €70 (30% off) |
| 50-99 units | €80 (20% off) | €65 (35% off) |
| 100+ units | €75 (25% off) | €60 (40% off) |
Cart Rules for B2B: Use PrestaShop's cart rules to create group-specific promotions: free shipping over a certain order value, additional discount for first-time wholesale orders, or volume bonuses applied automatically.
Step 9: Restrict Access and Manage Approvals
Most B2B stores should not be fully open to the public. You typically want to:
- Require registration approval: New accounts are created in "pending" status. An admin reviews the company details, validates the VAT number, and activates the account. PrestaShop's built-in "Customer awaiting email validation" flag can be repurposed for this, or a dedicated module provides a more robust approval workflow.
- Hide prices from guests: Configure your theme to show "Login for pricing" instead of actual prices for non-authenticated visitors. This protects your trade pricing from competitors and enforces the registration requirement.
- Restrict product visibility: Some products or categories may be available only to specific customer groups. PrestaShop's category permissions (configured per group) handle this natively.
- Minimum order quantities: B2B operations often require minimum order values or quantities. This can be enforced through cart rules or dedicated modules.
Step 10: Reporting and Compliance
EC Sales List (ESL) Reporting
If you make intra-community supplies (reverse charge transactions), you are required to submit an EC Sales List to your tax authority. This report lists each EU business customer you sold to, their VAT number, and the total value of supplies in the reporting period.
PrestaShop does not generate ESL reports natively. You need to either:
- Export order data filtered by the "B2B EU" customer group and format it for your local filing system
- Use accounting software (like DATEV in Germany, Sage in France) that imports PrestaShop order data
- Have your accountant generate the report from your invoicing data
Intrastat Reporting
For businesses exceeding certain thresholds of intra-EU trade (typically €400,000-800,000 per year, varying by country), Intrastat declarations are required. These detail the goods shipped between EU countries, including commodity codes, weights, and values. This is typically handled by your logistics or accounting department, but PrestaShop's order export data provides the raw material.
Record Retention
EU VAT regulations require you to retain invoices and supporting documentation for a minimum period — typically 7-10 years depending on the member state. PrestaShop stores this data in the database, but you should also maintain offline backups of:
- All issued invoices (PDF copies)
- VIES validation records (timestamps, responses)
- Proof of dispatch for intra-community supplies
- Customer VAT number change history
The Complete B2B Setup Checklist
Here is the implementation sequence I follow for every B2B PrestaShop project:
- Enable B2B mode (Shop Parameters → Customer Settings)
- Create customer groups (B2B Domestic, B2B EU, B2B Non-EU, Wholesale)
- Configure tax rules (standard rates for domestic, 0% for reverse charge, 0% for export)
- Install VIES validation — Automatic EU VAT Checker
- Configure net price display for all B2B groups
- Set up payment terms — B2B Deferred Payment Terms
- Customize invoice template with reverse charge notices, buyer VAT number, and country-specific fields
- Configure specific prices and tier discounts per group
- Set up registration approval workflow
- Install tax display switcher for hybrid B2C/B2B stores — Tax Display Switcher
- Test every scenario: domestic B2B order, intra-community order with valid VAT, intra-community order with invalid VAT, non-EU order, order exceeding credit limit
- Brief your accountant on the setup, invoice format, and ESL reporting data export
Common Mistakes I See in B2B PrestaShop Setups
1. Applying Reverse Charge Without VIES Validation
Some merchants zero-rate all B2B orders to EU countries without actually validating VAT numbers. This creates liability: if a VAT number turns out to be invalid, you owe the VAT to your own tax authority. Always validate before zero-rating.
2. Not Storing Validation Proof
Validating the VAT number is not enough — you need to prove you validated it. Store the VIES response (including timestamp and consultation number) with each order. Tax auditors ask for this.
3. Forgetting About the UK Post-Brexit
Since January 1, 2021, the UK is not part of the EU for VAT purposes. Sales to UK businesses are exports, not intra-community supplies. The reverse charge mechanism does not apply (though the UK has its own domestic reverse charge for certain sectors). UK VAT numbers start with "GB" and are validated through HMRC's API, not VIES.
4. Using One B2B Group for Everything
A single "B2B" customer group cannot distinguish between domestic sales (VAT applies), intra-community sales (reverse charge), and export sales (no VAT). You need separate groups with different tax rule assignments.
5. Ignoring Payment Term Limits
Several EU countries have legislated maximum payment terms. Belgium caps B2B payment terms at 60 days. France limits them to 60 days from invoice date (or 45 days end-of-month). Offering "net 90" to a Belgian customer could violate local law.
6. Not Testing the Full Customer Journey
The most common failure mode: everything looks correct in the back office, but the front-end customer experience is broken. Always test by logging in as a B2B customer and going through the entire flow: browse catalog (verify net prices), add to cart, enter VAT number (verify VIES validation), complete checkout (verify 0% VAT applied), and check the generated invoice (verify reverse charge notice).
The All-in-One Option
If you need VAT validation, tax display switching, and deferred payment terms together, our B2B Essentials Pack bundles all three modules at a significant discount compared to individual purchases. It is designed specifically for the configuration workflow described in this guide, with each module designed to work together.
Final Thoughts
B2B e-commerce on PrestaShop is not complicated — it is detailed. Each individual step (create a group, set a tax rule, validate a number) is straightforward. The complexity comes from the interactions between all of these configurations and the legal requirements that vary across 27 EU member states.
The good news: once configured correctly, a B2B PrestaShop store handles tax calculations, price display, and invoicing automatically. Your B2B customers see the right prices, get the right VAT treatment, and receive compliant invoices without manual intervention. That automation is what makes e-commerce viable for B2B — without it, you are doing manual invoicing for every order, which defeats the purpose of having an online store.
Take the time to get the setup right. Test every scenario. Brief your accountant. And if you hit a configuration wall, reach out — B2B VAT setup is one of the most common support questions we handle, and we have seen every edge case there is.
Related Articles
- GDPR for Online Stores: What You Must Do (and What You Can Skip)
- Cross-Border Returns: The Legal Side of Selling to Other EU Countries
- Data Breach Response: What to Do If Your Store Gets Hacked
Comments
No comments yet. Be the first!
Be the first to ask a question or share useful feedback.
Leave a comment
Share a question, an installation detail, or feedback that could help another reader.