LINKWARERichiedi una demo

Blog · Gestionale

B2B Price Lists in WooCommerce: Setup, Rules and VAT

2026 · Claudio Ventre · 14 min di lettura
Business owner configuring B2B prices in WooCommerce

You build a B2B price list in l'integrazione con WooCommerce by grouping business customers (by role or customer group), attaching pricing rules to each group, and showing prices with or without VAT depending on who is logged in. WooCommerce alone offers one regular price and one sale price per product, the same for every visitor, so you need an extension or custom code to go further. This guide explains the rule types, the order in which they apply, how to give a single customer their own price, how to hide prices from guests, and what Italian companies must check on VAT. It also covers the point where a plugin is no longer enough and the price list belongs in your ERP.

Linkware
Connect WooCommerce and ERP
Link WooCommerce price lists with your ERP to unify sales and management data in one business ecosystem.

TL;DR

  • WooCommerce natively has one regular and one sale price for everyone. B2B price lists need a pricing extension or custom code.
  • Build the structure in this order: customer groups, a store-wide rule per group, product or category exceptions, then customer-specific prices.
  • Decide how prices resolve when several rules match (priority, fixed price versus percentage) before you load any data.
  • For Italian B2B, configure net price display, VAT number validation through VIES and the fiscal fields (P.IVA, SDI code, PEC) in the same project.
  • With hundreds of customers or an ERP as the price master, synchronize the price lists instead of typing them twice.

Table of Contents

What a B2B price list means in WooCommerce

A B2B price list is a set of prices that applies to a defined group of buyers, or to one buyer, instead of to every visitor. Typical cases are a distributor who pays 30% less than retail, a reseller who gets better prices from 50 pieces, or a long-standing customer with a negotiated price on ten specific items.

Standard WooCommerce cannot do this. The B2BKing guide on per-customer pricing notes that the platform supports a single regular price and a single sale price per product, so differentiated prices need either a plugin or custom code. In practice, almost every store uses a plugin, and the choice should depend on which of these layers you need.

Layer Who it applies to Typical use
Role or group price Everyone with a role such as Wholesale or Distributor A standard discount for resellers
Quantity tiers Anyone in the group buying above a threshold Better unit price from 50 or 100 pieces
Category or catalog rule A group, across many products “All products minus 15%” without editing each item
Customer-specific price One named account A negotiated contract price

Most stores need the first three. The fourth matters when your sales team negotiates terms account by account.

Step 1: Create customer groups and approve business buyers

Start with who your buyers are, not with prices. Define the groups that actually differ commercially: for example Resellers, Distributors, and Key Accounts. Keep the number low at the start. Extensions generally let you create as many groups as you like. The Cartnorm B2B documentation states there is no limit on the number of groups, but every group is a table you must maintain.

Then decide how a buyer gets into a group:

  1. Manual assignment. Your sales team sets the role on the account. This is the safest option when each customer has a contract.
  2. Registration form with approval. The business registers with company data and VAT number, and you approve the account and assign the group. This suits open wholesale channels.
  3. Import from your management system. If the ERP already holds customer price tiers, the group can be written to the web account by an integration.

Whichever you use, a B2B customer should not see wholesale prices before you have verified the account.

Step 2: Set store-wide rules for each group

The fastest way to cover a whole catalog is a global rule per group. In the price list rules documentation on WooCommerce.com, rules are created under WooCommerce > Price List Rules. You define the criteria (customers, user roles or geo-location), pick a method (reduce the price by a percentage or set a new price), define the product list manually or by CSV, set a priority and publish.

A few details from that documentation are worth planning around:

  • Priority runs in ascending order. A rule with priority 0 is applied first, so number your rules deliberately and leave gaps (0, 10, 20) for future exceptions.
  • CSV bulk upload supports volume pricing. Quantity and price pairs are written in a Quantity|Price format, for example 5|30 and 6|50.
  • Locations can be criteria. Useful if your price list differs by country or sales area.

A sound starting point for a reseller group is a single rule: a percentage off the regular price across the catalog, with optional quantity steps. You can refine later without redoing the foundation.

Step 3: Add fixed prices, category discounts and quantity tiers

Percentages are quick but imprecise. Distributors often expect round, agreed numbers. You will usually combine three mechanisms.

Fixed prices per group

A fixed price is entered on the product for a role. It is the right choice for items with a contractual price list, or where margin is thin and a percentage would produce odd cents.

Category and catalog discounts

A discount on a whole category saves hundreds of manual edits. Be aware of how overlaps resolve. According to the Cartnorm documentation, the price for a group member is resolved in this order: a fixed group price on the product, then a category discount (largest discount wins, subcategories included), then the group’s discount on all products, then the normal price. It also states that a group price is never higher than the current normal or sale price. Other extensions may use a different order, so read the resolution logic of whichever you choose before you build rules on top of it.

Quantity-based pricing

Tiered pricing sets a minimum quantity and the unit price from that quantity. The B2B for WooCommerce documentation describes product-level pricing where you select a user role or a specific customer, set a fixed price or an increase or decrease by percentage or fixed amount, and add tiered rows with minimum and maximum quantity ranges.

A worked example for a reseller group, with a regular price of €100:

Quantity Rule Unit price
1 to 9 Group discount 20% €80
10 to 49 Fixed tier price €75
50 or more Fixed tier price €70

Write tiers as non-overlapping ranges and check that each tier is lower than the previous one. Overlaps and gaps are the most common cause of wrong prices in the cart.

Customer-specific pricing for negotiated terms

When a single account has its own terms, you need a rule that targets that customer. The same documentation shows that you can select a specific customer on the product instead of a role, then set the price or discount. Dedicated customer price list features exist too: the B2BKing guide mentioned above describes a graphical interface for creating, importing and exporting per-customer price lists.

Three practical rules keep this manageable:

  • Customer rules should override group rules, and your documentation should say so. Confirm this behavior in the extension you use and test it with one real account.
  • Prices are private to the logged-in account. Each customer sees only their own price, so different terms for different accounts stay confidential.
  • Do not type hundreds of prices by hand. Import by CSV, or better, from the system where the price already lives.

Controlling who sees which prices and products

A B2B price list is only useful if the right people see it. Visibility settings usually cover three situations:

  1. Guests see no prices. Visitors who are not logged in see the product but a “log in to see prices” message.
  2. Some products are restricted to certain groups. For example, a professional line only for approved resellers.
  3. The whole store is private. Only registered accounts can browse.

The B2B Ecommerce documentation on WooCommerce.com describes visibility rules that show or hide selected products based on customers, roles or geo-location, and catalog settings that hide prices, products, the entire catalog or pages from users who are not logged in, with a redirection option.

There is a trade-off with search visibility. Hiding the whole catalog from guests also hides it from search engines. If new buyers find you through Google, keep product pages public and hide only the prices. To keep those public pages discoverable, WooCommerce SEO automation can help with keyword research and content planning for category and product pages. Our own guide on SEO for WooCommerce covers the on-page basics for Italian stores.

VAT and tax settings for Italian B2B prices

This is where many Italian B2B stores go wrong, because price lists, tax display and invoicing data are configured in different places.

Show net prices to business customers

Business buyers compare and negotiate on net prices. Most extensions let you show prices excluding VAT per group. In Cartnorm, each group has a setting for prices shown excluding or including VAT; the documentation clarifies that only the display changes and VAT is still calculated as usual. It also explains that group prices are entered the same way as normal WooCommerce prices, with or without VAT depending on what you set in WooCommerce > Settings > Tax. Decide this once, document it, and make sure whoever uploads CSV files knows whether the numbers are net or gross.

The B2B for WooCommerce documentation likewise lists a setting to display prices with or without tax by user role, and a tax exemption form with a VAT field.

Validate the VAT number

For sales to companies in other EU countries, a valid VAT number can remove VAT from the order. The Fiscalità ITA Light plugin page describes Italian fiscal fields at checkout (VAT number, Codice Fiscale, SDI code, PEC and customer type), validation through the European Commission’s VIES service, and automatic VAT removal when the number is valid, including Checkout Blocks. It lists compatibility with WooCommerce 7.0 and later, HPOS, and WPML and Polylang.

Business customer entering a VAT number

The exemption logic should be checked with your accountant, since the conditions depend on the customer’s country and the transaction. Whoever manages your invoicing should confirm the rules before you go live.

Connect checkout data to electronic invoicing

The SDI code and PEC collected at checkout only help if they reach your invoicing flow. If you issue electronic invoices from your ERP, read our guide on SdI and e-commerce ERP integration to avoid rejected invoices caused by missing or mismatched fields.

Test before you publish

Wrong prices reach real customers quickly, so test on a staging copy of the store. A short checklist:

  1. Create one test account per group and one for a single customer rule.
  2. Check a simple product, a variable product and a product with quantity tiers in each account.
  3. Confirm that rule priorities give the price you expect when two rules match.
  4. Compare the cart and checkout totals, with VAT shown and removed.
  5. Check that a guest sees what you intended: price, message or nothing.
  6. Repeat after any update to WooCommerce, the theme, the cache plugin or the tax plugin.

Pay particular attention to caching. Prices that depend on the logged-in user must not be served from a shared page cache. Our guide on WooCommerce speed optimization explains how to keep a store fast without caching the wrong thing.

When the price list should live in your ERP

A plugin is a good fit with a few groups and a few hundred products. Complexity changes the picture when:

  • you have price lists per customer, per quantity and per period in the ERP already;
  • prices change often (raw materials, exchange rates, supplier updates);
  • the same prices are used for quotes, orders and invoices outside the website;
  • several people maintain prices in different places.

In those cases the question is not which plugin to use but which system is the master. If the ERP is the master, the web store should receive the price lists by synchronization, so a change is made once. We describe the operating logic in our guide to B2B price lists and ERP, and how to turn the store into a wholesale channel in WooCommerce B2B. If you want to see how stock, orders and customers travel between the two systems, read WooCommerce ERP integration. For stores with several warehouses, availability by location is covered in WooCommerce multi-warehouse.

Our perspective

In our experience the plugin is rarely the hard part. The hard part is deciding where prices are born and who is allowed to change them. When the price list lives in a spreadsheet, a plugin and the ERP at the same time, sooner or later a customer sees a price that nobody approved.

That is why we start from the company’s processes, not from the extension. A dedicated consultant studies how you quote, who negotiates discounts, how invoices are issued, and only then configures the web store. We follow the whole path internally, from development to user assistance, and we do not route you to a call center.

With 30 years of experience in management software, and with ERP such as Passepartout Mexal as the core of the company, we integrate WooCommerce so that accounting, production, sales and the online store use the same data. Price lists, customer groups and stock are the first things worth aligning.

 

Claudio

If your business customers have different terms and you want one source of truth for prices, we can configure the integration between your ERP and WooCommerce around your real operations. You get one dedicated contact who knows your business, from analysis to training and support.

Linkware

Discover our e-commerce and integration services or read how Mexal integrates with WooCommerce.

FAQ

Can WooCommerce show different prices to different business customers without a plugin?

Not out of the box: it supports one regular price and one sale price per product, shown to every visitor. Differentiated prices need an extension or custom code that reads the logged-in user. For anything beyond a few products, an extension is easier to maintain.

What is the difference between role-based and customer-specific prices?

A role-based price applies to every account with that role, such as Reseller or Distributor. A customer-specific price applies to one named account and is meant for negotiated terms. In most setups, the customer rule takes precedence, but confirm this in the extension you use.

How do I hide prices from visitors who are not logged in?

Use the catalog or visibility settings of your B2B extension to hide prices, specific products or the whole catalog from guests, with an optional redirect to the login page. If you want products to remain findable on Google, hide only the prices and keep the product pages public.

Should B2B prices be shown with or without VAT?

Business buyers usually compare net prices, so many stores show prices excluding VAT to B2B groups and including VAT to consumers. Only the display changes: VAT is still calculated at checkout unless a valid VAT number qualifies the order for exemption. Confirm the exemption conditions with your accountant.

When should I move price lists out of WooCommerce and into the ERP?

When prices change often, are used outside the website, or are maintained by several people. Then the ERP should be the master and WooCommerce should receive the lists by synchronization, so each price is edited in one place only.

Vuoi digitalizzare la tua azienda?

Un consulente LINKWARE ti propone la soluzione su misura, senza impegno.

Richiedi una demo gratuita