Auction and Pricing Model
Overview
Whenever a shopper loads a page on your site, MCM runs a real-time auction to decide which ads appear and how they are priced. This page explains that process at a high level: how campaigns bid for each opportunity, how competing bids are ranked against each other, and how winning campaigns are billed.
Bid and value prices
MCM tracks a few prices for each auction:
- valuePrice — how much a billing event is worth.
- For campaigns on manual bidding, the advertiser sets this directly at campaign creation.
- For campaigns on smart bidding, it represents how much a billing event is worth to the campaign, and it is adjusted dynamically by the bidding system to achieve campaign goals such as target ROAS.
- bidPrice — a normalized value used to rank bids across cost types.
- winningPrice (also called the clearing price) — how much a winning ad is charged. It is derived from the winner's valuePrice and the auction rules.
Cost types
Cost type is configured per platform and ad type. It determines both the billing event and how prices are calculated.
| Cost type | Billing event |
|---|---|
| CPM — cost per mille (1,000 impressions) | Impressions |
| CPC — cost per click | Click |
| CPP — cost per purchase | Attributed purchase |
CPM
valuePrice = CPM bid / 1,000
bidPrice = valuePrice
No probability conversion is required, because both ranking and billing are impression-based.
CPC
valuePrice = CPC bid
bidPrice ~= pCTR x valuePrice
Including the predicted click-through rate (pCTR) allows a more relevant ad to outrank an ad with a higher CPC bid but lower expected engagement. In practice, variations of this core formula may be used to further improve overall auction quality.
CPP
bidPrice ~= pCTR x pCVR x commission rate x item value
CPP pricing is finalized later, when purchase events are attributed.
CPT (cost per time) is only defined for the Reserved Display ad type and is outside the scope of this auction model.
Auction types
After candidates are ranked by bidPrice, the auction type determines what each winner pays.
First-price auction
Each winner pays its full value price:
winningPrice = valuePrice
Second-price auction
MCM uses a generalized second-price auction. Each winner pays a price informed by the next-highest bid. Because ranking happens in bidPrice space while charging happens in valuePrice space, the winning price is:
winningPrice = valuePrice(winner) x secondPriceDiscount
secondPriceDiscount = bidPrice(runner-up) / bidPrice(winner)
This means the amount charged depends on both bids and their quality scores, so it can be slightly below or above the runner-up's raw bid depending on relative quality. This is different from a simple second-price auction that would just charge the second-highest bid.
Platform pricing controls
Platforms can enforce price range controls at two stages:
- Bidding-stage price range — applied to valuePrice. Manual bids outside the range are rejected; smart-bidding values are clipped to the minimum or maximum.
- Auction-stage floor — applied to winningPrice. A calculated price below the minimum CPC or CPM is raised to that floor.
Today, MCM exposes a single platform price range, which is used for both controls.
End-to-end flow
- Bidding — Calculate valuePrice and bidPrice, enforcing the platform pricing control.
- Auction (ranking and pricing) — Sort candidates by bidPrice, highest first, apply first- or second-price rules, then enforce the minimum CPC or CPM.
- Billing — Charge the winning price when the billing event occurs. CPP is priced later during attribution.
- Reporting — Report the charged amount through effective average rates:
- Effective CPM = total spend / impressions x 1,000
- Effective CPC = total spend / clicks
Worked examples
CPM example
Platform minimum CPM: 100, equivalent to a per-impression minimum price of 0.10.
| Bidder | valuePrice | bidPrice | Rank | winningPrice (first-price) | winningPrice (second-price) |
|---|---|---|---|---|---|
| 1 | 0.20 | 0.20 | 3 | 0.20 | 0.10 |
| 2 | 0.30 | 0.30 | 2 | 0.30 | 0.20 |
| 3 | 0.40 | 0.40 | 1 | 0.40 | 0.30 |
Under a first-price auction, each bidder pays its full valuePrice: Bidder 3 pays 0.40, Bidder 2 pays 0.30, Bidder 1 pays 0.20.
Under a second-price auction:
- Bidder 3: winningPrice = 0.30
- Bidder 2: winningPrice = 0.20
- Bidder 1: no lower-ranked bid, so it is charged the minimum CPM (per-impression minimum price of 0.10) when last-bid discounting is enabled.
CPC example
Platform minimum CPC: 2. Here bidPrice = valuePrice x pCTR.
| Bidder | valuePrice | pCTR | bidPrice | Rank | winningPrice (first-price) | winningPrice (second-price) |
|---|---|---|---|---|---|---|
| 1 | 10 | 0.2% | 0.02 | 3 | 10 | 2 |
| 2 | 8 | 2.0% | 0.16 | 2 | 8 | 2 |
| 3 | 8 | 3.0% | 0.24 | 1 | 8 | 5.33 |
Under a first-price auction, each bidder pays its full valuePrice: Bidder 3 pays 8, Bidder 2 pays 8, Bidder 1 pays 10.
Under a second-price auction:
- Bidder 3: 8 x 0.16 / 0.24 = 5.33
- Bidder 2: 8 x 0.02 / 0.16 = 1, raised to the minimum CPC of 2
- Bidder 1: no lower-ranked bid, so it is charged the minimum CPC of 2 when last-bid discounting is enabled.
Updated 3 days ago
