Promotions vs. contract prices
A contract price is what a customer negotiated. A promotion is a temporary incentive. Both make a number smaller, they run at different points, and the place where they meet is the most reliable margin leak in B2B commerce.
They are not the same kind of thing
| Contract price | Promotion | |
|---|---|---|
| Is | The buyer's price | A reduction applied to whatever their price is |
| Lives in | A price list bound to the account | A rule in the promotion engine |
| Runs | During price resolution | After it |
| Applies to | One customer, by design | Everyone matching the conditions |
| Lasts | The term of the agreement | The campaign |
| Negotiated | Yes, with that customer | No |
| Ends by | Valid until on the list | The validity window on the rule |
The row that matters is the third. Resolution finishes with a number; the promotion engine then acts on that number. There is no contest between them, which is exactly the problem: the promotion does not know it is discounting a price that was already discounted.
The leak, with numbers
Ball valve 4711-A:
- List price: €19.90
- Müller Industriebedarf, framework agreement: €16.20 — already 18.6 % down, negotiated in exchange for a committed volume.
- Spring campaign: −10 % on the valve range, no exclusions.
Müller's buyer adds 200 pieces. The chain resolves €16.20 because a price list bound to their organization outranks everything else. The promotion then takes 10 % off it: €14.58.
You have now given 26.7 % off list to the one customer who already paid for a discount with a volume commitment — and you gave it to them for nothing, because the campaign was designed to attract customers who buy at list. The campaign cost you most on the account it was never aimed at.
Scale it: run four such campaigns a year across a customer base where two-thirds of revenue sits on contract prices, and the leak is not a rounding error. It is the thing the phrase keine Margenleckage durch manuelles Override is usually pointing at — except nobody overrode anything. A rule did it, quietly, every night.
The fix: scope promotions by price list
The mechanism is a condition on the promotion that tests which price list the buyer resolved on.
| Setting | Behaviour |
|---|---|
| Open and default lists only | The promotion applies only to buyers who are paying an unnegotiated price. This should be your default |
| Named lists | The promotion applies to buyers resolving on the lists you list. Use it for a campaign aimed at one segment's contract customers |
| All lists | Applies to everyone, contract customers included. Deliberate, and rare |
Set it on every promotion. Not as a review step later — as part of creating one, because the promotion that was never scoped is the one that runs for eight weeks before anybody looks at the numbers.
The other direction: a promotion that undercuts a commitment
The subtler version. A customer commits to 12,000 metres of hose at €4.80 in exchange for the volume. Two months later, a public campaign puts the same hose at €4.65 for everyone.
Nothing in the system is wrong. Every price is the price it should be. But your framework customer now pays more than a walk-up buyer for the article they committed to, they will find out, and the conversation that follows costs you more than the campaign earned. It also poisons the next framework negotiation with every customer that one talks to.
Two habits prevent it:
- Check your contract floor before pricing a campaign. If the campaign price approaches the lowest negotiated price in force, you have a problem regardless of who the campaign is aimed at.
- Give the commitment a guarantee. "Your agreement price or the campaign price, whichever is lower" is a clean promise, easy to state in the agreement, and it converts a credibility problem into a small, bounded cost.
What the buyer sees
Three presentations, and the choice is commercial, not cosmetic:
| Presentation | Shows | Right when |
|---|---|---|
| Your price only | One number | The buyer is on a contract price. Their price is the point; a strike-through against your list price advertises how much they negotiated, to anyone standing behind them |
| Strike-through | List price crossed out, promotion price beside it | The buyer pays list normally. The saving is the message |
| Your price plus the saving | Their price, then the campaign reduction as a separate line | The honest option where a promotion genuinely applies on top of a negotiated price |
The default in a logged-in B2B storefront should be the first. Anonymous visitors and unnegotiated customers get the second. See Logged in vs. not and How promotions show on the storefront.
When you actually wanted a price, not a promotion
Half the promotions that cause trouble were the wrong tool from the start. Ask one question: is this a change to what someone pays, or an incentive to behave differently?
| You want | Use |
|---|---|
| This article is cheaper for six weeks, for everyone | A time-limited price — an entry with a validity window |
| This customer pays this from now on | A contract price |
| Everyone pays less above 500 units | A scale price |
| Order more than usual and get something extra | A promotion |
| Buy the pair and the total drops | A promotion, or a bundle |
| A rep can hand a customer a one-off incentive | A promotion with a coupon |
The first three change the resolved price and are therefore visible everywhere a price is visible — in punchout catalogues, in BMEcat exports, in quotes drafted tomorrow. The last three are cart mechanics and stay in the cart. That difference decides which of your integrations sees them at all.
Next
- Promotion types that work in B2B — the mechanics worth running.
- Knowing what a promotion cost you — measuring the leak this article describes.