A B2C store takes two weeks to build, a B2B store takes eight. That ratio is not arrogance in quoting; it reflects eight concrete WooCommerce configuration differences: per-customer pricing, VAT ID validation with reverse charge, 7-30 day payment terms with credit limits, multi-buyer per company account, pallet shipping, catalog segmentation, ERP integration, and cart logic for internal approval. Each one adds 4-12 hours of work plus tests. We walk through the difference point by point in this article, referencing real-world setups from the Hanse Studio portfolio: a B2B distributor in the chemical sector, a wholesale of components for crafts, an LED distributor for integrators.
B2B context: who buys, how, and why differently
A B2C consumer decides alone, buys impulsively, on average within 4-7 minutes of landing on a product. The decision depends on visual presentation, reviews, price, and delivery time. A B2C store optimizes the conversion of a single customer into a single cart.
A B2B customer behaves differently. A purchase manager of a construction firm buys 800 m² of tiles for a 250,000 PLN investment: the decision passes through 3-5 stakeholders (project manager, technical director, accounting, sometimes the board), takes 2-6 weeks, requires a PDF quote on letterhead, verification of delivery deadlines, the option of partial invoicing, sometimes a partial pre-payment. A B2B store optimizes the purchase cycle plus client retention over 3-7 years of cooperation.
Technical implications for WooCommerce: a required NIP field in checkout (with validation), the ability to download a PDF invoice immediately after the order, a “save cart as quote” option to share with a colleague, a customer panel with downloadable invoice history, configurable payment terms per customer, the option to contact a sales rep for orders above a threshold.
First architectural decision: B2B and B2C in one installation, or two separate ones. Hanse Studio recommends a single installation with user-role separation for 90% of clients. Two separate installations are justified only when product catalogs differ by more than 70% (for example, B2C DIY hardware vs B2B industrial CNC machines) or when branding and pricing policy cannot be reconciled.
B2B pricing: wholesale tiers plus customer-specific prices
The first and most important B2B difference: prices are not fixed. In B2C the price visible in the catalog is the final price. In B2B the price depends on the customer’s user role (Wholesale Tier 1, Tier 2, Tier 3), order volume (threshold discounts from 10 / 50 / 100 units), a long-term agreement with a specific customer (X sees -15% across the catalog), and product category (category discounts on accessories, no discount on flagship products).
Three implementation patterns, each with a concrete adoption threshold.
Pattern one: WooCommerce Wholesale Prices plugin (Standard 99 USD/year). Sets prices per user role: registered, wholesale_tier_1, wholesale_tier_2. The customer is manually approved by the admin into the right tier after registration. The catalog price displays differently per logged-in customer. Enough for a 3-5 tier structure without custom logic. A real use case: an LED distributor with 4 tiers (silver/gold/platinum/diamond) and a flat 0/5/10/15% discount per tier.
Pattern two: B2BKing Lite or Pro (89-279 USD/year). Adds on top of tier logic: customer-specific pricing (X sees 95 PLN on a product instead of the standard 100 PLN), quantity-based discounts (from 50 units -8%, from 100 units -12%), conditional product visibility (X sees product Y, Z does not), payment methods per role (X may use Vorkasse, Z only prepay). A real use case: a construction-chemistry wholesale with 3 large customers on individual price contracts plus 40 smaller customers on tier-based pricing.
Pattern three: custom code in the child theme via a WooCommerce product-price filter. Full control, zero license cost, but requires a developer retainer (2-3 hours of implementation plus 1 hour/month of maintenance). A real use case: a distributor with 12,000 SKUs importing prices from a Comarch Optima ERP twice a day, where standard plugins cannot keep up with performance at 50+ logged-in users at once.
Decision threshold: 0-3 tiers without customer-specific pricing → Wholesale Prices plugin. 4-7 tiers plus 10-100 customers with custom contracts → B2BKing. 5,000+ SKUs plus ERP integration → custom code in the child theme.
B2B payments: Rechnung, SEPA, NET-30
A B2C customer pays before shipping (Stripe, BLIK, card). A B2B customer expects 7-30 day payment terms from the invoice date, sometimes after delivery. This difference requires separate logic in WooCommerce.
Concrete configuration: add a custom payment method “Invoice with 14 days” visible only to the user role “wholesale_approved”. After the order the status is set to “Pending payment”, the system generates an invoice with a 14-day due date, sends the PDF to the customer plus accounting. The status changes to “Processing” automatically (as consent to shipping before payment), goods leave for the customer. Once payment is booked, the admin manually or through a bank integration changes the status to “Completed”.
A critical element: credit limit control. Before the “Invoice with terms” option becomes available, the admin must approve the customer and set a limit (for example 50,000 PLN of open invoices at the same time). Custom logic in the child theme runs in WooCommerce checkout validation: the sum of the customer’s unpaid invoices plus the value of the current order must stay within the limit. If exceeded, the customer sees “Credit limit exceeded, contact your sales rep” and cannot complete the order via the term method (must choose prepay).
SEPA Direct Debit as a B2B method: Mollie handles it natively. The customer authorizes the mandate once at the first order (a single form with IBAN plus consent), subsequent orders pay automatically from the company account within 3-5 working days. It eliminates the payment delays typical for manual transfers. Hanse Studio deploys SEPA for 60% of DACH B2B clients, reducing the average payment posting time from 12 days to 4 days.
Vorkasse (bank transfer before shipping) for new B2B customers without history: the first 2-3 orders are paid prepay, then the 14/30 day term is activated after a positive scoring. Standard market practice in DACH.
B2B shipping: bulk, pallet, custom rate
B2C ships parcels up to 30 kg via standard courier. B2B often ships pallets of 100-1000 kg, a container, or a delivery truck. The standard WooCommerce shipping calculator does not handle this logic.
Concrete requirements: automatic weight calculation based on product attributes, a threshold to switch to a pallet (for example above 30 kg or above 50 units of large products), pallet carrier selection (DHL Freight, DPD Classic, Geis Cargo), calculation based on weight plus pallet size plus destination country. Plus a “free shipping above threshold” option for VIP customers (orders above 5,000 PLN ship for free).
Hanse Studio pattern: WooCommerce Advanced Shipping (49 USD/year) plus a custom shipping class “pallet” assigned per product. The customer sees two shipping options at checkout: “Courier up to 30 kg” plus “Pallet delivery 30+ kg”. The system automatically suggests pallet when total weight exceeds 30 kg, but the customer can manually switch if they arrange their own pickup. Cost is computed from a per-country rate table plus per-weight category (up to 100 kg, 100-500 kg, 500-1000 kg).
DHL Freight Booking API integration is possible, but complex (a separate DHL Freight contract, own contract rates, REST endpoint at 200-500 EUR/month). Most Hanse Studio clients rely on manual booking on the admin side; the system only generates a label with address plus weight plus number of pallets to enter on the carrier’s panel.
Multi-buyer and multi-budget pattern
In a 50-person company, 5-15 people place orders (project managers, operational departments, office). Each has their own budget, their own authorizations, their own order history. WooCommerce by definition supports “1 user = 1 account”, which does not match B2B.
Solution: the B2BKing Pro plugin or WooCommerce Memberships plus custom code. Introduces the concept of a Company Account with a hierarchy of users. The company admin (typically the purchase manager) creates sub-accounts for employees, sets spending limits per user (for example Anna 5,000 PLN/mo, Mark 15,000 PLN/mo, Kowalski unlimited), defines an approval workflow (orders above 3,000 PLN require purchase-manager confirmation).
Concrete flow: an employee adds products to the cart, clicks “Place order”. The system checks the monthly limit: if it fits, the order is sent for fulfillment immediately. If it exceeds the limit or the order value crosses the approval threshold, the order status becomes “Pending approval”; the purchase manager receives an email with a link to the approval panel. Once approved, the order moves to fulfillment.
Shared cart: another pattern for team purchases. A project team can build a joint cart over 2-3 weeks, add products gradually, and finalize the order after internal discussion. WooCommerce by definition has a persistent cart per user. A multi-user shared cart requires a custom session handler in the child theme, around 8-12 hours of implementation.
Tax handling B2B vs B2C: reverse charge, OSS, ex VAT display
The price shown in the catalog for B2C: always gross, VAT included. For B2B: always net, VAT shown separately or with a note “net prices, VAT will be added on the invoice”. This difference requires WooCommerce configuration under General → Tax → Prices entered with tax and Display prices in the shop / cart / checkout.
Reverse charge for EU B2B intra-community: a PL customer buying from a DE supplier with an EU VAT ID. WooCommerce with Germanized or the WooCommerce EU VAT Number plugin validates the VAT ID through the VIES API; if valid, sets VAT at 0% and adds the clause “Steuerschuldnerschaft des Leistungsempfängers” to the invoice. Missing that clause is a tax risk for both parties (the seller may be required to pay VAT, the buyer cannot deduct it).
OSS (One-Stop-Shop) for cross-border B2C sales in the EU: since July 2021 a PL seller selling to a DE consumer must account for VAT 19% (the buyer’s country rate) instead of 23% (the PL rate). The threshold is 10,000 EUR of annual cross-border revenue; above that, OSS becomes mandatory. WooCommerce with the WooCommerce Tax plugin or Germanized Pro handles per-country rates automatically and generates the OSS report for the declaration.
All aspects of DACH compliance plus VAT ID handling are described in our article on Germanized for WooCommerce.
Catalog visibility and password-protected shop
B2C has an open catalog, indexed by Google, accessible without login. B2B often wants to hide prices from competitors: products visible only after login, prices hidden until account approval, some categories only for selected customers.
Pattern 1: full lock-down, nothing without login. WooCommerce Catalog Visibility Options or B2BKing Pro hide all prices, hide add-to-cart, force login for the whole shop. A customer without an account sees only a registration form. After registration the admin approves and the customer gets access.
Pattern 2: prices hidden, catalog visible. A customer without login sees products (photos, descriptions, attributes) but instead of a price sees “Log in to see the price” plus a “Request a quote” form. Works well for SEO (Google indexes descriptions), but conversion is worse than a fully open catalog.
Pattern 3: tier-based catalog. A logged-in customer on Tier 1 sees 80% of the catalog, Tier 2 sees 95%, Tier 3 sees 100% including contract products unavailable to Tier 1-2. Implemented via B2BKing conditional product visibility plus product category restrictions per user role.
ERP integration and bulk import
B2C has 50-500 SKUs; the admin imports once or manages manually. B2B often has 5,000-50,000 SKUs in an ERP, with WooCommerce as just a presentation frontend. Prices, stock, invoices, and customers are synced every few minutes or hours from the source system (Comarch Optima, Subiekt GT, SAP, Enova365).
The Hanse Studio pattern: a custom sync plugin through REST API. WooCommerce REST endpoints for products, prices, stock. The ERP on the client side sends an update every 30 minutes: a new product, a price change, a stock change, a new customer. The plugin on the WP side converts the payload into WooCommerce objects, runs a diff, and updates only the changed fields. A typical build: 20-40 hours of work for the first client, 8-15 hours for subsequent clients with a similar ERP.
Bulk import as a fallback: WP All Import Pro plus a dedicated workflow for the first mass CSV import. 5,000 SKUs with 30 attributes and images imported in 4-6 hours. Subsequent updates run over REST API. Bulk import is not suitable for daily sync (database locks, memory limit).
Sync error workflow: every sync plugin must keep a log with timestamp, source ID (for example the Comarch product number), target ID (post_id in WP), status (success/failed), plus an error message. The log accessible in the admin panel lets you diagnose “why is product X not showing in the shop” in 30 seconds instead of 30 minutes digging into the database. Hanse Studio adds this log to every ERP integration as a standard, plus an email alert to the admin on >10 errors in a single sync (typically a sign that the ERP schema was updated).
A concrete benchmark: a Comarch Optima integration for a construction-chemistry wholesale client, 8,400 SKUs, sync every 15 minutes. First build 32 hours of work (4,800 PLN), one year of maintenance 6 hours total (900 PLN). Average sync time 12 seconds per cycle, 96 cycles per day, no performance impact on the frontend (sync runs in cron off-peak, a 5-position queue prioritized by active products). The client saved 4 hours daily of manual price-list updates.
FAQ
Can I run both B2B and B2C on a single WooCommerce installation?
Yes, separation through user roles plus conditional logic in the child theme. 90% of Hanse Studio shops run on this pattern. Two separate installations are only justified if the catalog differs by more than 70% or branding cannot be reconciled.
Wholesale Prices plugin or custom code in the child theme?
Plugin for 80% of scenarios (3-5 tiers, up to 50 customers with individual pricing). Custom code in the child theme when 5,000+ SKUs plus ERP integration is needed, or when the pricing logic does not fit any plugin (for example a promotion “1+1 free only for customer X in March”).
Can I integrate Comarch Optima ERP with a B2B WooCommerce store?
Yes, through a custom REST endpoint in the child theme or via a ready-made Cyber Folks Comarch Sync plugin (49 EUR/month). Sync products, stock, price lists, customers, invoices in both directions. Hanse Studio deploys such an integration as part of the “WooCommerce B2B” package (from 12,000 PLN setup).
When should I build a B2B store instead of using the manufacturer’s portal?
When you want full control over UX (manufacturer portals are generic), content marketing (SEO on industry phrases), a long-term customer relationship (your own database for remarketing), plus integration with your own ERP. A manufacturer portal is a “bulletin board”; your own B2B store is a “sales and relationship platform”.
Conclusions and next step
A B2B WooCommerce store requires 8 differentiating modules versus B2C: per-customer pricing, payment terms with limits, multi-buyer accounts, pallet shipping, catalog segmentation, reverse-charge VAT, ERP integration, and internal approval workflow. Each module is 4-12 hours of work plus tests. Total build 80-160 hours (12,000-25,000 PLN setup) plus 800-1,500 PLN/month retainer.
A full comparison of WooCommerce against Shopify for B2B is in our article on WooCommerce for SMBs in 2026. If you are planning a B2B store with multi-tier pricing, ERP sync, or DACH compliance, see our e-commerce services or contact us for a quote.
