Auction Lab

VCG position auction

The same slots to the same bidders, but each winner pays the externality they impose. Truthful.

Bidding your true value is a dominant strategy here: it is at least as good as anything else you could do, whatever the other bidders do.

A worked example

The same two slots, the same three bidders, the same click-through decay as the GSP page — everything is held constant except the pricing rule.

BidderWorth to themBid
A10095
B7272
C4141

What the mechanism does, step by step

  1. collect bids Each bidder submits one sealed bid; private values are never revealed.
  2. sort Bids are ranked from highest to lowest. Equal bids keep the order the bidders were listed in, so a tie goes to the first-listed bidder.
    95 >= 72 >= 41
  3. click-through rates A bid here is a price per click, and the 2 slots differ only in how often they are clicked: slot i receives 0.5^i of the clicks slot 0 gets. A slot is therefore worth its holder's value per click times that rate, so the same bidder is worth less further down the page.
    ctr_0 = 1, ctr_1 = 0.5
  4. assign slots The highest bid takes the most clicked slot, the next bid the one below it, and so on down: A takes slot 0 at ctr 1, B takes slot 1 at ctr 0.5. Both payment rules allocate exactly this way — only the bill that follows differs.
    slot 0 -> A (95/click) | slot 1 -> B (72/click)
  5. price rule Each winner pays the externality they impose on everybody else: for every slot below them, the clicks that slot's holder loses by being pushed one place down, valued at that holder's own bid. A winner's own bid never appears anywhere in their own bill — it only decides which slot they get — so raising it can never raise their price and lowering it can only cost them clicks. That is why bidding your true value per click is dominant here.
    p_i = sum over j > i of (ctr_(j-1) - ctr_j) x b_j
  6. slot price A holds slot 0. Without A: B would move up into slot 0, gaining 0.5 clicks they value at 72 each; C would move up into slot 1, gaining 0.5 clicks they value at 41 each. The total of what everybody else would have gained is exactly what A is charged.
    p_A = 0.5 x 72 + 0.5 x 41 = 56.5
  7. slot price B holds slot 1. Without B: C would move up into slot 1, gaining 0.5 clicks they value at 41 each. The total of what everybody else would have gained is exactly what B is charged.
    p_B = 0.5 x 41 = 20.5
  8. payments A tops the ladder and pays 56.5, the harm their presence does to the bidders below them; nobody is ever charged for value they did not take away from somebody else.
    revenue = 56.5 + 20.5 = 77

How it came out

WinnerA
Everyone who won somethingA -> 0, B -> 1
Price paid by the winner56.5
Seller revenue77
Value created136
Went to whoever valued it mostyes
BidderPaidEnded up with
A56.543.5
B20.515.5
C00

The slots go to the same people. What changes is the bill: each winner pays the harm they did to everybody else by being there — the welfare the others would have had in their absence, minus what they actually got. Charge that, and no bidder can improve their position by misreporting, because their report no longer moves their own price. This is the general recipe behind every truthful mechanism on this site.

Run this auction step by step

The link carries the whole setup, so you can change a bid and watch what moves — and send the result to somebody else.

Settings

SettingDefaultWhat it does
Reserve price per click0Bids below the reserve win no slot, and the lowest winner pays it.
Slots3How many positions are for sale. Slot 0 is the most clicked.
Click-through decay0.5Slot i receives ctr_decay^i of the clicks slot 0 receives.

Read next