Skip to main content
B2B pricing

B2B pricing rules configured in the dashboard, extended in code

Scope rules to any combination of customer group, channel, currency, and time window, all in the dashboard. Bulk-import customer-specific pricing as CSV. Plug your ERP or price-master database in as a live source when prices live elsewhere.

Pricing engine paths
two dead ends · one primitive
Rigid rule grammarfixed vendor shapes
% offfixedBOGO
customer groupnot in grammar
channel scopenot in grammar
time windownot in grammar
runs out fast
Bespoke pricing servicesits in front of checkout
Catalog
drifts
Custom engine
owned by your team
drifts every release
Platform primitiveinside the pricing chain
B2B pricing
rule sources · calculators
cartin chain
checkoutin chain
orderin chain
one engine, one chain

Your pricing process took a decade to build. A vendor's rule grammar wasn't built for it.

Most platforms treat B2B pricing as a one-size-fits-all problem with a fixed rule grammar bolted to the catalog. The pricing your company actually runs is a process built inside the business over years, sometimes decades. It has its own scoping dimensions, override hierarchy, and contract lifecycle. The grammar a vendor ships was never going to fit it.

The bespoke pricing service is the other dead end. A standalone engine sitting in front of checkout, owned by your team forever, drifting against the catalog every release and becoming the most expensive thing to touch.

B2B pricing makes pricing rules a first-class platform primitive. Commercial operations configures them in the dashboard. Engineering extends them in TypeScript. The engine evaluates them inside the checkout chain Vendure already runs.

What B2B pricing ships

The pricing rules a real B2B catalog needs

Five capabilities, all configurable from the dashboard, all extensible in TypeScript.

Quantity breaks and customer groups

Define per-variant quantity breaks (fixed price, fixed discount, or percentage off) scoped to a price group. Assign customers to groups in the dashboard or by code, and the engine applies the right break automatically at checkout.

Customer-specific price lists

A price negotiated in EUR for the EU channel stays in EUR on the EU channel. The scoping lives on the price-list entry itself (per customer group, per currency, per channel), built into the model, not bolted on with custom fields.

Scheduled activation

Every rule has optional start and end timestamps. Promotional windows, price-list renewal cycles, and seasonal pricing activate and expire on schedule. No CI job, no manual flip.

Bulk CSV import and export

Export the current channel's price list as CSV. Edit in your spreadsheet of choice. Import it back. Rows are validated by SKU, channel, currency, price type, and quantity before the replacement applies per variant.

Priority and exclusivity

When more than one rule matches a line item, priority decides. Lower priority numbers evaluate first, and an exclusive rule short-circuits the rest. Stacking and override behaviour is deterministic, not "the cheapest discount wins" guesswork.

Pricing chain · one engine
native to cart, checkout, order
Rule sources
Channel
Customer group
Quantity break
Time window
Order history
Product collection
B2B pricing engine
OrderItemPriceCalculationStrategy
PriceRuleSource
PriceRuleCalculator
Call sites
Cart
Checkout
Order
same engine · same code pathno parallel service

One step in the checkout chain you already have

The same pricing pass that drives the catalog also drives B2B rules. Cart, checkout, and order all resolve through one engine, not a parallel service bolted on at the edge.

For each order line the engine evaluates the configured rule sources and runs the matching calculator.

Built-in rule sources: channel, customer group, quantity break, time window, order history, and product collection.

The price the buyer sees on the storefront, the price the rep sees on a quote line, and the price a returning customer pays at reorder all flow through the same code path.

When you need a rule the defaults do not express, write a new PriceRuleSource or PriceRuleCalculator in TypeScript, register it in plugin options, and it appears in the dashboard alongside the built-in ones. No catalog fork. No proprietary pricing DSL.

Commercial models
one engine, all shapes
Wholesale distributorquarterly price-list refreshes
SKU-001
SKU-002updated
SKU-003
Manufacturerquantity breaks · group base prices
1+
10+
50+
250+
D2C with scheduled windowsVIP-tier · time-boxed
Thu 18:00Mon 00:00
offactiveoff
Enterprise B2Bpricing owned by the ERP
ERP
Vendurecache
four shapessame pricing chain

Commercial models the plugin handles directly

The shapes B2B pricing was designed against.

price-list.csv
row-by-row validation
EU channel
scoped write
#skuminQtytypevaluegroupok
1AX-1001fixed24.00dealer
2AX-10010fixed22.00dealer
3AX-10050pct15%dealer
4AX-2001fixed48.00distributor
per-variant atomic replace
Variant price listabsent SKUs untouched · row 3 reported
3 ok · 1 skip
sku, minQty, priceType, value, priceGroup, currency, channelCSV in

CSV is the source of truth procurement already trusts

The export and import flow uses a flat CSV: sku, minQuantity, priceType, value, priceGroup, currencyCode, channelCode. Rows are validated row-by-row, with the row number and a specific message returned for every rejected line so procurement can fix the spreadsheet and re-run.

Import behaviour is precise:

  • Per-variant atomic: for every SKU present in the CSV, the variant's price list is replaced with the new rows.
  • Absent SKUs untouched: variants not in the CSV keep their existing prices.
  • Row-level failure: a failed row stops the row, not the import. The response counts imports, skips, and per-row errors.

Scoping is by current channel: a user importing in the EU channel cannot rewrite US prices, and channel codes in the CSV must resolve to channels the user can already write to.

Trusted by complex B2B commerce and enterprise retail.

FAQ

What teams ask before they commit to a pricing engine

Real questions from commercial, procurement, and engineering teams evaluating B2B pricing.

B2B suiteplugins that share the chain
Quote management
negotiates against price list
B2B pricing
The pricing engine
decides the number
Store credit & gift cards
settles against order total
Pricing & promotions
extends the engine
Pricing chaincart · checkout · order · quote · reorder

Pricing is one part of Vendure Platform's B2B suite

The plugins that share the same pricing chain.

Talk to us

See your customer-specific pricing on Vendure Platform

Configure a price list in the dashboard, walk through how rules resolve in the cart, and see where your ERP or TypeScript extension plugs into the pricing chain. Bring questions about your own setup.