Run campaigns

How promotions show on the storefront

Badges, strike-throughs, the cart summary — and the channels where none of it may appear.

A promotion the buyer cannot see does not change behaviour, and one shown the wrong way tells a customer how much they negotiated. This article covers where promotions surface, and where they must not.

Before you begin: the presentation decision depends on whether the buyer is logged in and which price list they resolve on. Read Logged in vs. not and Promotions vs. contract prices.

Product tiles and detail pages

A promotion that depends only on the product can be shown before the cart exists: a badge on the tile, and the reduced price on the detail page.

A promotion that depends on the cart — "−5 % above €2,500 net" — cannot be shown as a price, because at that point there is no cart to evaluate. It is shown as a statement of the offer: "From €2,500 net order value: 5 % discount". That is not a lesser presentation. For a professional buyer, the condition is the message, because it tells them what to do.

Promotion depends onShow on the tileShow on the detail page
The product aloneBadge and reduced priceReduced price with the reason named
Cart value or quantityBadge with the conditionThe condition, and the tier ladder where one exists
Free goods"12 + 1" badgeThe rule, stated in full
A coupon codeNothingNothing. A code is not a public offer
Customer segmentOnly to buyers in the segmentOnly to buyers in the segment

The last row matters. A badge visible to everyone for a discount only some customers receive generates support calls from precisely the customers you did not target.

Strike-through, or the buyer's price

The single most consequential presentation decision in B2B, and it depends on the buyer:

  • A buyer on an open or default price list sees a strike-through: your list price crossed out, the promotion price beside it. The saving is the message.
  • A buyer on a contract price list should see their price, without a strike-through against your list price. Their negotiated price is not something to advertise on their screen, where a colleague, a visitor, or a screenshot in a group email can read exactly how much that account gets off.
  • Where a promotion genuinely applies on top of a contract price, show both: their price, then the campaign reduction as a separate, named amount.

Never display a "was" price the buyer never paid. In Germany this is also a Preisangaben question, and a reference price you cannot substantiate is a legal risk, not just a credibility one.

The cart

The cart is where promotions become real, and it must be readable line by line.

For each affected line:

  • The resolved unit price — the buyer's price.
  • The discount, as its own amount, with the promotion named.
  • The line total after it.

For the cart:

  • Cart-level discounts as their own rows, named.
  • Free-goods lines shown with their quantity and their value, with the reduction stated — never at €0.00.
  • The next threshold, where one is close: "€180 more for 5 % off". This single element does more for order value than any badge on a tile.
Never fold a discount into the unit price. A line showing €14.58 with no explanation cannot be reconciled against the buyer's expected €16.20, cannot be explained by your Innendienst on the phone, and cannot be partially returned correctly. Both numbers, always.

Order confirmation and invoice

Whatever the cart showed must survive into the documents, in the same shape:

  • The confirmation repeats the lines, the discounts and the promotion names.
  • The invoice carries the discount per line, because VAT is per line and a partial return has to know what one unit was worth.
  • A cart-level discount is distributed across the lines on the invoice, even though it was presented as one row in the cart.

If your reporting shows a discount that the invoice does not, the discount is not real to your accounting and you will find out at month end.

Punchout: where promotions must not appear

A punchout session hands your catalogue into the customer's procurement system — SAP Ariba, Coupa, JAGGAER. The buyer builds a basket in your shop, returns it to their system, and their system raises a purchase order from the prices your catalogue transmitted.

Everything after that is machine-to-machine. Their goods receipt matches the PO; their accounts payable matches your invoice against both. A promotion that applies at your checkout but was never in the transmitted price produces an invoice that does not match the purchase order — and it is blocked automatically, without a human reading it, sometimes for weeks. Your money sits still and somebody eventually phones about a payment run.

The rules:

  • Exclude punchout channels from promotion scope. Every promotion, by default.
  • Where a punchout customer must get a lower price, put it in their price list, not in a promotion. It is then part of the transmitted catalogue and their purchase order carries it.
  • Cart-level and free-goods effects are worst of all here: the OCI and cXML basket formats carry line prices, and a cart-level discount has nowhere to go.

See Punchout explained, Set up punchout and Serve punchout customers.

The same logic applies to catalogue exports. A BMEcat or Datanorm file carries prices into a customer's system. Promotions are not in it, and should not be — see Export a catalog.

What to check

  • As an anonymous visitor, a logged-in open-list buyer, and a contract customer: the same product page, three correct presentations.
  • A cart just below a threshold shows the next-threshold hint.
  • The invoice PDF carries every discount the cart showed, per line.
  • A punchout session shows no promotional price anywhere, and the basket transmitted back matches what the buyer saw.

Next