EU B2B · WooCommerce
Sell to EU businesses. With the right prices and the right 0% VAT.
Cartnorm B2B adds wholesale prices, customer groups, order rules and quotes to WooCommerce and checks EU VAT IDs in VIES. Consumers keep seeing your normal prices. Business customers see theirs, net or gross.
The free plugin is not on WordPress.org yet. Write to us and we will send you one email on launch day.
Example: one product, two customers
Example shop · Germany · guest
Hand soap refill, 5 l
€29.75 incl. 19% VAT
€5.95 / 1 l
- Prices shown
- Including VAT, as set in WooCommerce
- VAT at checkout
- 19% German VAT
- Order rules
- None
Consumer rules stay on: prices including VAT, the unit price and, when a product is on sale, the Omnibus 30-day lowest price.
Example shop · Germany · Wholesale group, company in France
Hand soap refill, 5 l
€20.00 excl. VAT
€4.00 / 1 l
| Quantity | Price each | Unit price |
|---|---|---|
| from 1 | €20.00 | €4.00 / 1 l |
| from 10 | €18.50 | €3.70 / 1 l |
| from 50 | €17.00 | €3.40 / 1 l |
- Prices shown
- Net, marked "excl. VAT"
- VAT at checkout
- 0%, VAT ID valid in VIES
- Order rules
- Packs of 4, minimum order €150
Note on the order: Tax-exempt intra-Community supply (Art. 138 Directive 2006/112/EC)
Illustration with example prices. The note is stored in the language of the order.
Why B2B is harder in the EU
Selling to businesses in the EU takes more than a discount
A VAT ID has to be checked, and the check kept
0% VAT for a business in another EU country requires a valid VAT ID. VIES confirms it and returns a consultation number: your proof for the tax office.
There are two different 0% cases
Goods are a tax-exempt intra-Community supply (Art. 138). Services fall under the reverse charge (Art. 196). Each needs its own note on the invoice, not just "tax exempt".
Net prices only if consumers are really excluded
Consumers must see prices including VAT. Showing only net prices is allowed when consumers effectively cannot buy. A checkbox "I am a business" is not enough.
A page cache can leak net prices
If a cache stores a page made for a wholesale customer and shows it to a consumer, the consumer sees prices without VAT. In a shop that also sells to consumers, that is a legal problem, not just a bug.
Four jobs, done properly
1
Prices and quantity prices
Fixed group prices on products and variations, category discounts, a discount on all products and quantity prices such as "from 10 pieces €7". Your stored product prices are never changed.
2
EU VAT ID and 0% VAT
A VAT ID field in the block and classic checkout, a live VIES check with consultation number, 0% only when it is correct, and the right legal note on every order.
3
Order rules
Minimum order value and number of items per group, minimum and maximum quantities and pack sizes per product. Checked in the cart block, the classic cart and on the server.
4
Quotes and wholesale registration
Customers request a quote, you answer with prices, they accept from a signed link and pay. Businesses apply for an account, and you approve them, or VIES does.
EU compliance
What happens to VAT, case by case
Cartnorm B2B decides on the server for every cart and stores the decision with the order.
| Case | What Cartnorm B2B does | Note on the order |
|---|---|---|
| Business customer in your own country | Charges VAT as usual. Domestic sales always include VAT. | — |
| Goods to a business in another EU country, VAT ID valid in VIES | 0% VAT | Tax-exempt intra-Community supply (Art. 138 Directive 2006/112/EC) |
| Services or virtual products, same situation | 0% VAT, reverse charge | Reverse charge: VAT to be paid by the recipient (Art. 196 Directive 2006/112/EC) |
| Goods and services in one cart | 0% VAT | Both notes |
| VIES is not available | Charges VAT, accepts the order and marks it "pending verification". Checks the number again up to six times over about four days and adds an order note if VIES then confirms it. Order totals are never changed automatically. | — |
| VAT ID invalid, or from another country than the address | Charges VAT. An invalid number shows a clear message, or the order is accepted with VAT, as you choose. | — |
| Customer outside the EU | The VAT ID rules do not apply. Your WooCommerce tax settings decide. | — |
The notes are built in for all 24 official EU languages and are stored in the language of the order. Virtual products count as services; a filter lets you change that.
Evidence stored with every order that has a VAT ID
VAT ID and its country
VIES result and consultation number
Time of the check
The decision and its reason
Customer group at the time of the order
Readable by invoice plugins from the order data
Works with Cartnorm Omnibus
The Omnibus 30-day lowest price notice is a consumer rule. With both plugins active, members of a B2B group do not see the consumer notice, and the Omnibus strikethrough logic does not touch group prices. Retail customers see everything as before.
About Cartnorm Omnibus →Not tax advice. Cartnorm B2B applies the general EU rules for business-to-business sales (Articles 138 and 196 of Directive 2006/112/EC). Special cases such as triangular trade, goods that are not dispatched to another member state, special schemes or national rules are not covered. Please confirm with your tax adviser how these rules apply to your business.
What you can rely on
Customers never choose their own group
Only shop staff can put a customer into a group. A group is never taken from a registration, checkout or account form.
Hidden prices stay hidden
When prices are hidden from a visitor, they are also removed from the Store API product data and the structured data (JSON-LD), so they cannot be read from the page source.
Safe with page caches
Pages for B2B customers are never stored by page caches. Built-in support for WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super Cache and FlyingPress, plus a self-test.
Fast with large carts
No database queries per cart line. In our test, a 300-line cart in a B2B group was calculated in about 30–40 ms.
Clean uninstall
Deleting the plugin removes its settings, groups, prices, quotes and applications. Orders and their VAT evidence stay, because they belong to your records.
Only VIES is contacted
VAT IDs are checked with the European Commission's VIES service. No other data leaves your shop, and the plugin does not contact cartnorm.com.
Set up in four steps
1
Install and enter your VAT ID
In WooCommerce › Settings › B2B. Your VAT ID is sent to VIES as the requester, so every check returns a consultation number.
2
Create a group
For example "Wholesale": prices net or gross, a discount on all products, category discounts and a minimum order.
3
Add prices and rules to products
Group prices and quantity prices in the product editor, minimum quantities and pack sizes in the Inventory tab.
4
Decide how customers join
Assign customers in Users › Edit user, or let them apply on the registration page, with manual or automatic approval.
Version 0.3.0 WordPress 6.4+ PHP 7.4+ WooCommerce 8.0+ Tested up to WordPress 7.1 and WooCommerce 11.2 Read the documentation →
Everything in the free plugin
Open a topic to see the details.
Customer groups and prices
- Retail is built in: guests and customers without a group see your normal prices
- Up to 2 B2B groups, each shown prices including or excluding VAT
- Fixed group price per product and per variation
- Category discounts (subcategories included) and a discount on all products
- Quantity prices per product and group, shown as a table on the product page
- A group price is never higher than the current normal or sale price
- Orders you create in wp-admin get the customer's group prices
Net, gross and unit prices
- "excl. VAT" after prices for net groups; VAT is still calculated as usual
- With Germanized: the unit price follows the group price, and the VAT notice follows the net or gross display
- Without Germanized or German Market: an optional simple unit price such as "€7.00 / 1 kg"
- Retail customers always see your WooCommerce settings
EU VAT ID and VIES
- VAT ID field in the block checkout, the classic checkout, My Account and the user profile
- Format check for all 27 member states and Northern Ireland (XI)
- Live VIES check with consultation number; results cached (7 days for valid numbers)
- 0% only for a valid VAT ID from an EU country other than your shop's
- Billing or shipping address decides, as you choose
- VIES down: VAT is charged, the order is accepted, the number is checked again automatically
Legal notes and evidence
- Separate notes for goods (Art. 138) and services (Art. 196); mixed carts get both
- Built in for all 24 official EU languages
- Stored in the language of the order (WPML, Polylang or the shop language)
- Shown on the thank-you page, in My Account, in order emails and on the admin order screen
- VAT evidence box on every order
Order rules
- Minimum order value per group, compared the way the group sees prices
- Minimum number of items per group
- Minimum, maximum and pack size per product and variation, per group
- Quantity fields only offer valid quantities, in the classic cart and the cart block
- Clear messages such as "add €23.50 more"; checkout is blocked on the server until the rules are met
Request a quote
- "Add to quote" next to or instead of "Add to cart", per group, for retail customers and for guests
- Optionally hide prices ("Log in to see prices", "Price on request")
- Quote page with quantities, company, VAT ID and message, with spam protection
- Answer in WooCommerce › Quotes with a price per line and a validity date
- Signed accept link that expires; accepting creates a "pending payment" order with the same VAT rules as the checkout
- Emails for new, answered and expired quotes
Wholesale registration
- Registration page with company, contact, country, VAT ID and consent
- The VAT ID is checked in VIES
- Manual approval, or automatic when VIES confirms the VAT ID
- Applicants stay retail customers until they are approved
- Existing customers can apply from My Account
- Nonce, honeypot field and rate limit against spam
Store modes and caching
- Hybrid (default): consumers see your normal prices, groups see theirs
- B2B only: only approved business customers see prices and can buy
- Optionally show the whole catalog only to approved customers
- Hidden prices are removed from the Store API and the JSON-LD
- Private, no-store pages for B2B customers and a signed group cookie for caches
- Status panel and self-test
Compatibility
- WooCommerce cart and checkout blocks, HPOS
- Cartnorm Omnibus
- Germanized (unit prices and VAT notices)
- German Market: best effort, not yet tested
- WPML and WooCommerce Multilingual
- WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super Cache, FlyingPress
Data, translations and developers
- The full VAT decision is stored as order meta for invoice plugins
- Filters and actions for prices, VAT, order rules, quotes, registration and caching
- Translations: German (Germany, Austria), Polish, French (France, Belgium), Italian, Spanish, Dutch (Netherlands, Belgium)
- Clean uninstall; orders and VAT evidence are kept
A fair comparison
What we found in the public documentation, product pages and support threads of leading WooCommerce wholesale plugins. Where they do more, we say so.
| What to check | Cartnorm B2B (free) | Typical wholesale plugins |
|---|---|---|
| Group prices, quantity prices, quotes, wholesale registration | Yes | Yes, usually |
| Range of B2B extras (sales agents, sub-accounts, ERP connectors …) | Focused on the essentials | Wider |
| VIES check with consultation number in the free version | Yes | Varies, check before you buy |
| Separate invoice notes for goods (Art. 138) and services (Art. 196) | Yes, in 24 languages | Varies, check before you buy |
| Unit price recalculated from the group price | Yes (Germanized or built in) | Missing in at least one leading plugin |
| Page caching for logged-in B2B customers | Kept safe automatically | Some vendors advise turning caching off |
| Hidden prices also removed from the Store API and JSON-LD | Yes | Varies, check before you buy |
| Pricing page | EUR, excl. VAT, no crossed-out prices | Often USD; some show crossed-out "was" prices |
Checked in October 2026. "Typical" sums up what we saw for several leading plugins; it is not a statement about any single product. Plugins change, so please check the current version before you decide. Found a mistake? Write to us and we will correct it.
Free and Pro
Everything that makes a shop correct and safe is free. Pro is for shops that need more scale and less manual work.
| What you get | Free | Pro Coming soon |
|---|---|---|
| Customer groups | 2 + Retail | Unlimited |
| Group, category, product and quantity prices | Yes | Yes |
| Customer-specific prices and CSV price lists | — | Yes |
| Net or gross display per group, unit prices | Yes | Yes |
| VAT ID field, VIES check, 0% VAT, legal notes in 24 languages, evidence on orders | Yes | Yes |
| Automatic re-checks of the VAT IDs of approved customers | — | Yes |
| Order rules: minimum order value, minimum and maximum quantities, pack sizes | Yes | Yes |
| Request a quote, accept link, order created from the quote | Yes | Yes |
| PDF quotes with payment link and reminders | — | Yes |
| Wholesale registration with manual or automatic approval | Yes | Yes |
| Payment by invoice with payment terms and credit limit | — | Yes |
| EU sales report (EC Sales List) as CSV and DATEV export | — | Yes |
| Store modes, cache safety, hidden prices in the Store API and JSON-LD | Yes | Yes |
| Import from Wholesale Suite and B2BKing | — | Yes |
Pro pricing
Every plan has every Pro feature. You only choose how many sites. Prices excl. VAT, billed yearly.
Cartnorm B2B Pro is in development and not on sale yet. These are the prices it will have. Want to know when it is ready? We will send one email.
Single shop
1 site
€99 / year
About €8.25 a month, billed yearly
Coming soon — get notifiedNo payment now. We email you once at launch.
Small agency
5 sites
€179 / year
€35.80 per site
Coming soon — get notifiedNo payment now. We email you once at launch.
Agency
20 sites
€299 / year
€14.95 per site
Coming soon — get notifiedNo payment now. We email you once at launch.
Every plan includes
Everything in the free plugin
Unlimited customer groups
Customer-specific prices and CSV price lists
Automatic VAT ID re-checks
PDF quotes with payment link and reminders
Payment by invoice with terms and credit limit
EU sales report (CSV, DATEV)
Import from Wholesale Suite and B2BKing
Prices excl. VAT. 14-day trial (card or PayPal required), 30-day money-back guarantee. Cartnorm B2B Pro is sold to businesses only. Payments are handled by Freemius as Merchant of Record.
Trial and refund
The 14-day trial needs a card or PayPal and costs nothing if you cancel before it ends. After a payment you have 30 days to ask for 100% of your money back, no questions asked.
Renewal
Pro renews once a year at the same price until you cancel, and you can cancel at any time in the customer portal. If you do not renew, the free plugin keeps working with everything in the Free column; Pro features and updates stop.
VAT and invoices
Freemius, Inc. sells Cartnorm B2B Pro in its own name as reseller and Merchant of Record. It adds VAT for your country at checkout and sends you an invoice.
Questions
Do my retail customers see any difference?
No. Guests and customers without a group are "Retail" and see exactly the prices WooCommerce shows without the plugin.
Can a customer put themselves into a wholesale group?
No. Only shop staff who can manage WooCommerce or edit users can change a customer's group. The plugin never takes a group from a registration, checkout or account form.
When is VAT 0%?
Only when the VAT ID is valid in VIES and the customer is in an EU country other than your shop's. Customers from your own country always pay VAT. Goods get the intra-Community supply note, services the reverse charge note.
What happens if VIES is not available?
The customer can still order. VAT is charged, the order is marked "pending verification" and the number is checked again automatically. If VIES then confirms it, you get an order note so you can issue a corrected invoice.
Can I sell to consumers and businesses in one shop?
Yes, that is the Hybrid mode, and it is the default. Consumers and guests see your normal prices including VAT; approved B2B groups see their own prices, net if you choose.
When may I show only net prices ("B2B only")?
Only when consumers are effectively excluded from buying: every customer registers as a business and you check the account (VAT ID, company details) before you approve it. A notice or a checkbox "I am a business customer" is not enough, and consumers who can still order must see prices including VAT. Use the B2B only mode with manual approval, or automatic approval by VIES. This is not legal advice; please ask your lawyer or tax adviser.
Can a consumer see a cached page with net prices?
Not from WordPress page caches: pages for B2B customers are sent as private and no-store, and WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super Cache and FlyingPress are told not to cache them. Caches outside WordPress (your host, Varnish, nginx, Cloudflare) cannot be configured by a plugin; the documentation shows the rules to add. Run the self-test after changing your caching.
Does it work with Cartnorm Omnibus?
Yes. Consumers keep seeing the Omnibus 30-day lowest price; members of B2B groups do not, because it is a consumer rule, and their group prices are not rewritten by Omnibus.
Does it work with Germanized and German Market?
With Germanized, unit prices and VAT notices follow the group price and display. German Market has not been tested yet because its source code was not available to us: group prices work as usual, and unit prices calculated automatically by German Market follow the group price.
What happens when I deactivate or delete the plugin?
Deactivated: everyone sees your normal product prices again; your product data is not changed. Deleted: settings, groups, group prices, quantity rules, quotes, applications and cached VIES results are removed. Orders and their VAT evidence are kept.
Is the free version limited in time?
No. Everything in the Free column is free, without time limits. The plugin mentions Pro only in one dismissible line at the relevant place and on its own Pro tab. No banners.
Is this tax advice?
No. Cartnorm B2B applies the general EU rules for business-to-business sales (Articles 138 and 196 of Directive 2006/112/EC). Special cases such as triangular trade or special schemes are not covered, and you remain responsible for your invoices and tax returns. Please confirm with your tax adviser how these rules apply to your business.
When can I get it?
The free plugin comes to WordPress.org first, Pro later. We do not give dates we cannot keep. Write to us and we will send one email per launch.
Ready for your first business customer?
The free plugin is coming to WordPress.org. Write to us and we will tell you on launch day. Until then, the documentation shows exactly how it works.