Customer-Specific Pricing in B2B E-commerce: Groups, Tiers, Contracts
Customer-specific pricing means every wholesale buyer sees the price that was actually negotiated for them, not a public shelf price. Selldi handles this with a clear hierarchy: a base price per product, a price list per market or customer group (each market with its own currency), individual contract prices layered on top for named accounts, quantity tier breaks, and dedicated offers with either a special price or a percentage discount. Every price is resolved on the server the moment an order is placed, so a logged-in customer always sees their own number and a guest sees the list price or nothing at all. Selldi is an all-in-one sales system for wholesalers and distributors, so this pricing logic is shared across the B2B portal, the B2C store and the field-rep CRM rather than living in a spreadsheet somebody emails around. The result is that the price a rep promises, the price the portal shows and the price on the order are the same number.
Why the list price is a fiction in wholesale
In retail there is one price and everyone pays it. Wholesale does not work like that, and pretending otherwise is where most B2B web projects quietly fail. A distributor of workwear might sell the same jacket to a small regional shop at one rate, to a national chain at a lower rate tied to volume, and to an exporter in another currency entirely. None of those buyers should ever see each other's number. The public catalogue price, if it exists at all, is a starting point for negotiation, not a promise.
So the first honest thing a platform has to admit is that pricing is relational. It depends on who is asking, how much they buy, what was agreed with their account manager and which market they belong to. A system that stores a single price field per product cannot represent that, which is why so many wholesalers end up running the shiny new webshop for browsing only and doing the actual prices in a back-office spreadsheet. The catalogue becomes a brochure and the real commerce happens over email. That is the exact gap Selldi is built to close.
The hierarchy that keeps pricing sane
The way to keep customer-specific pricing manageable is to layer it, so each level only overrides the one below it. In Selldi the layers read from general to specific. At the bottom sits the base price, the reference figure for a product. Above it sits the market or customer-group price list: 'Domestic Wholesale', 'Export EU', 'Ukraine' and so on, each a shelf of prices with its own currency. Above that sit individual contract prices, set per account for the SKUs where a specific customer negotiated a specific number. And at the top sit dedicated offers, time-bound deals a rep sends to one buyer or one group, expressed as a special price or a percentage off.
When a customer opens a product, the system walks down that stack and stops at the first level that applies to them. An offer wins over a contract price, a contract price wins over the market shelf, the market shelf wins over the base. Because the rule is deterministic, nobody has to guess why a customer sees a given figure, and the account manager can look at a card and see exactly which level produced it. That transparency matters more than it sounds: the classic support call in wholesale is 'why did the portal charge me a different price than you quoted', and a clear hierarchy is what makes that call disappear.
Quantity tier breaks and unit-based discounts sit alongside this, not against it. A product can be sold by the piece, the case or the pallet, and each packaging unit can carry its own discount so that buying a full pallet is genuinely cheaper per item than buying loose. Tier breaks reward larger single-line quantities. These combine with whatever contract price the customer already has rather than replacing it, so a negotiated account still earns its volume break on top.
The failure modes this prevents
Three things go wrong repeatedly when pricing lives outside the platform, and they are worth naming because most wholesalers will recognise all three. The first is the emailed spreadsheet. A price list gets exported, sent to a customer, edited, forwarded, and three months later two people are working from two different versions and nobody knows which is current. The second is the rep-quoted price that never reaches the system: a salesperson agrees a number on the phone, the customer orders through the portal, the portal charges the old shelf price, and now there is a credit note and an awkward conversation. The third, and the most damaging, is a customer seeing another customer's price, which in wholesale is close to a breach of trust.
Keeping every price in one system removes all three. When a rep agrees a number, they record it as a contract price or an offer, and it takes effect immediately in the customer's portal. There is no second copy to fall out of sync, and because prices are only ever shown to a logged-in account, one buyer physically cannot load another buyer's rate. The portal stops being a brochure and starts being the single source of truth for what things cost.
Per-market currencies for exporters
Once a wholesaler sells across borders, currency becomes part of the price, not a display setting. A market in Selldi carries its own currency, so the Export EU shelf can be priced in euros while the domestic shelf stays in the local currency, and the two are maintained independently. An exporter does not convert on the fly at some daily rate; they set the euro price they actually want to charge and it holds until they change it. This avoids the familiar drift where a rep quotes a euro figure from a mental exchange rate, the system stores something slightly different, and the margin quietly leaks.
Because markets are just data, adding another one, say a second export region in a different currency, does not require a second store or a developer. You create the market, attach an account manager, and set its price list. The catalogue, stock and customer data stay shared; only the prices and currency differ. Selldi connects to any ERP via API, including SAP, Microsoft Dynamics 365 and NetSuite, so those market prices can still line up with whatever the finance system expects.
When simple uniform pricing is the right call
None of this is free of effort, and it is worth being honest about when you do not need it. If you sell to a small, stable set of customers who all pay the same rate card, layered pricing is overhead you will never use. A single published price list, maybe with one volume tier, is easier to maintain and easier for buyers to understand. The same is true early on: a new export line with three customers does not need a full market hierarchy yet, and forcing one just gives you more places to make a mistake.
The signal that you have outgrown uniform pricing is when the exceptions start to outnumber the rule, when reps are keeping side-notes of who pays what, or when 'send me your price list' has become a task somebody dreads. At that point the spreadsheet is already the real system and it is only a matter of time before a version goes wrong. Moving that logic into the platform is what turns customer-specific pricing from a liability back into an advantage, and it is the point at which a tool like Selldi earns its place.
Frequently asked questions
Can two customers see different prices for the same product?
Yes, and that is the core of B2B pricing. Each customer sees the price produced by their own market shelf, contract prices and any active offer, and prices are only shown after login. One buyer can never load another buyer's rate, because the price is resolved for the specific logged-in account.
How do quantity tier breaks combine with an individual contract price?
They stack rather than compete. A negotiated contract price sets the customer's baseline for that product, and unit or quantity discounts, such as a cheaper per-item rate on a full pallet, still apply on top. So a contract account continues to earn its volume break instead of losing it.
What happens if prices change while a customer's cart is open?
The order is priced at order time, on the server, using the prices that apply at the moment it is placed, not the figures captured when items went into the cart. B2B carts are often built over days or weeks, so this prevents a stale price, in either direction, from reaching the invoice. The customer sees the current price before they confirm.
Do guests and non-logged-in visitors see any prices?
By default a guest sees the public list price or no price at all, depending on how you configure the catalogue. Negotiated and market-specific prices only appear after a customer logs into their account, so sensitive commercial terms never leak to anonymous visitors or competitors browsing the site.
How are export prices in another currency kept accurate?
Each market carries its own currency and its own price list, so you set the euro price you actually want to charge rather than converting from a daily rate. It holds until you change it, which removes the drift caused by reps quoting from a mental exchange rate. Those prices can also be reconciled with your ERP through the API.