---
title: "First-price vs second-price auctions"
description: "What the winner actually pays under each auction model, and how Epom applies first price, second price and fixed-floor pricing to DSP banners and PMP deals — including the floor checks that decide whether a bid wins at all."
type: "concept"
audience: [network-manager, admin]
keywords: [first price, second price, auction, clearing price, bid floor, fixed price, RTB, OpenRTB, PMP deal, second price plus one cent]
---

Fetch the complete documentation index at: https://epom.com/ad-server/docs/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# First-price vs second-price auctions

When several bidders compete for one impression, the *auction type* decides what the winner
actually pays. Two models dominate programmatic advertising, and Epom exposes both — plus a
fixed-price variant — as concrete controls on DSP banners and PMP deals. This page explains the
industry concept, then pins each model to the exact Epom toggle and to the precise price the ad
server clears at.

## The two models

**First price.** The highest bidder wins and **pays their own bid**. Simple and transparent, but
it puts the pressure on the buyer to bid-shade (guess how low they can go and still win), because
overbidding costs them the full difference.

**Second price.** The highest bidder wins but **pays just above the second-highest bid**, not
their own. Classic Vickrey logic: a buyer can safely bid their true value because winning never
costs more than one increment over the runner-up. Historically the open-web default; largely
displaced by first price on SSP-to-DSP paths, but still used inside deals and single-exchange
auctions.

The difference only matters when **more than one bid competes**. With a single bidder there is no
runner-up to price against. Epom's answer for that case is covered under
[What Epom clears at](#what-epom-clears-at): a lone second-price bid clears at the **bid floor**
plus one cent, not at its own bid.

## What Epom clears at

Epom's auction type has three values:

| Auction type | Winner pays | When it applies |
|---|---|---|
| **First price** | Their own bid, unchanged | Default for DSP banner auctions |
| **Second price** | Two or more DSPs still have a bid after the deal and scan filters: the runner-up bid **+ $0.01**, capped at the winning bid. Only one DSP does: the **bid floor + $0.01**, capped at the bid | A DSP banner with *Always 2nd price as +$0.01* that is the only candidate; several DSP banners competing with *Force First Price Auction Type* switched off; second-price PMP deals |
| **Bid floor price** | Exactly the deal floor, whatever they bid | Fixed-price PMP deals only |

The `+ $0.01` increment (`ONE_CENT`) is Epom's clearing step for second price. It never lifts the
price above what the winner actually bid, so if the runner-up (or the floor) is within a cent of
the winning bid, the winner simply pays its own bid.

**Floors decide whether a bid can win at all.** After the winner is chosen and its second-price
price worked out, the price is compared with the bid floor sent in the request (the deal floor
when the bid belongs to a PMP deal). A price below it leaves the auction with no winner, and the
pick falls back to your direct demand. See
[The bid floor](https://epom.com/ad-server/docs/reference/openrtb-integration-reference.md#the-bid-floor) for where the floor
comes from.

## Second price on DSP banners

On an [OpenRTB (DSP) banner](https://epom.com/ad-server/docs/guides/advertising/banner-openrtb-dsp.md) the auction type is not
a free-text field. It is worked out for every DSP request from the banner's **Always 2nd price as
+$0.01** checkbox, the partner's **Force First Price Auction Type** parameter, and how many DSP
banners compete in this auction:

- **One DSP banner, *Always 2nd price* on** → **second price.** The lone candidate has no runner-up
  to under-cut, so it clears at the bid floor plus one cent (capped at its bid) — the partner pays
  the floor rather than its full bid.
- **One DSP banner, *Always 2nd price* off** → **first price.** The winner pays its bid.
- **Several DSP banners, *Force First Price Auction Type* on or not set** → **first price.** This
  is the default: the parameter's default is on, and an absent value counts as on.
- **Several DSP banners, *Force First Price Auction Type* explicitly off** → **second price.** The
  winner clears at the runner-up bid plus one cent, capped at its own bid.

*Always 2nd price* only matters when the banner is the sole candidate; with several candidates the
*Force First Price* parameter decides. The parameter has to be ticked on the DSP partner's
**Parameters** card before a banner can set it (see
[DSP partners](https://epom.com/ad-server/docs/guides/admin/dsp-partners.md)). The type applied is the one of the **winning**
bid's own banner.

> **Note:** the clearing math runs on Epom's side after bids come back — it does not change what
> the DSP is *told* to bid. The bid request still carries an `at` (auction type) value so the
> partner knows the model, but the final win price is computed from the returned bids using the
> rules above.

## First / second / fixed on PMP deals

A [PMP deal](https://epom.com/ad-server/docs/guides/advertising/pmp-deals.md) attached to a campaign carries **its own
auction type**, set per deal row in the deal's **Auction type** field. This overrides the banner's
setting for any bid that references the deal — the deal terms are the contract, so the deal's
model wins:

| Deal auction type | What the buyer pays | Use it for |
|---|---|---|
| **First price** | Their bid (any bid at or above the deal floor is accepted) | Standard preferred deals |
| **Second price** | Second-highest bid + $0.01, but **never below the deal floor + $0.01**, and never above their bid. With only one DSP answering: the deal floor + $0.01, capped at the bid | Deals where the buyer negotiated second-price billing |
| **Bid floor price** | **Exactly the deal floor**, whatever they bid | Fixed-price deals — a homepage takeover at "$X CPM" |

The fixed-price (Bid floor) case is the sharpest: the moment a bid clears the deal-floor and seat
checks, its price is **overwritten with the deal floor**. The buyer's bid amount above the floor
is irrelevant — everyone on that deal clears at the same negotiated CPM. The second-price deal
case adds the deal floor as a lower bound: with two or more bids the win clears at the runner-up
+ $0.01, but never drops below `deal floor + $0.01`, protecting the negotiated minimum. A bid
priced below the deal floor is dropped before the winner is chosen.

A valid deal bid also **skips the open-auction floor** — the deal floor replaces your
placement/site bid floors and the site CPM threshold, in both directions (a deal priced below
your open floor still clears; a generous open floor doesn't protect you from a cheaply-priced
deal). See [PMP private deals](https://epom.com/ad-server/docs/use-cases/pmp-private-deals.md) for the seat-match and
private-auction rules around this.

## Where auctions sit in ad selection

The auction is [step 8 of ad selection](https://epom.com/ad-server/docs/concepts/how-ad-selection-works.md#8-the-rtb-auction): it runs
*only if* the selection pipeline already picked a programmatic banner. Everything before it —
targeting, capping, limits, priority tiers — decides *whether* an auction even happens; the
auction type decides only *what the winner pays* once it does. If no acceptable bid arrives, the
programmatic banners are dropped and selection re-runs over your direct demand (the same priority
tier first, then the tiers below), so a lost auction still fills with your own ads when
possible.

## Corner cases

> **Corner case:** with a **private auction** on a deal-only campaign, non-deal (open-auction)
> bids are rejected — the auction runs only among bids that reference a valid deal, each priced
> by that deal's auction type. See [PMP private deals](https://epom.com/ad-server/docs/use-cases/pmp-private-deals.md).

> **Corner case:** a second-price discount needs a runner-up. With two or more answering DSPs the
> winner pays the runner-up plus a cent; with a single answering DSP the "runner-up" is your bid
> floor, so the partner pays the floor plus a cent however high it bid. On thin, single-partner
> inventory *Always 2nd price* therefore lowers the price to the floor — worth knowing before you
> tick it on a partner that bids well above it.

> **Corner case:** the one-cent increment means the reported win price on a second-price auction
> is rarely a round number. A cleared price like `$2.34` is `runner-up $2.33 + $0.01` (or
> `floor $2.33 + $0.01`), not the winner's bid — reading it as the buyer's bid overstates what
> they were willing to pay.

## Related

- [How ad selection works](https://epom.com/ad-server/docs/concepts/how-ad-selection-works.md) — where the auction sits in the pipeline
- [OpenRTB (DSP) banners](https://epom.com/ad-server/docs/guides/advertising/banner-openrtb-dsp.md) — the *Always 2nd price* control
- [Manage PMP deals on a campaign](https://epom.com/ad-server/docs/guides/advertising/pmp-deals.md) — the deal Auction type field
- [Sell premium inventory through PMP private deals](https://epom.com/ad-server/docs/use-cases/pmp-private-deals.md)
- [Glossary](https://epom.com/ad-server/docs/reference/glossary.md)