Second Price Auctions

Overview

Second price auctions award an impression to the ad with the highest bid, but records the revenue of the impression not as the ad's bid, but as the second highest ad's bid plus one cent.

For instance:

Advertiser #1 - $5.00 CPM bid
Advertiser #2 - $4.00 CPM Bid

With 2nd price auctions, Advertiser #1 would win and pay $4.01.

This is used in situations where advertisers know that their bids are a max bid, but that actual costs may turn out to be lower. This benefits the advertiser, who will pay less for less valuable/competitive inventory.

Second price auctions are needed for building AdWords-type auction systems.

Enabling Second Price Auctions

Follow the steps outlined here, plus:

API

  1. Set IsSecondPricing to true when creating a Priority

UI

  1. Check "Enable Second Pricing" when creating a Priority

Second Price Auction Behavior

Decisions

Kevel uses the below logic when picking a winner and a revenue price:

Situation

Result

Single ad competes and is below floor price

Doesn't win

Single ad competes and is above floor price

Will win, with floor price as the winning bid

2+ ads compete and above floor

Highest value ad will win; revenue will be $0.01 more than next highest

2+ ads compete and neither above floor

Neither wins

2+ ads compete, with floor price between the 1st and 2nd highest bidders

Higher value ad wins, with floor price as the winning bid

2+ ads are tied above floor price

Winner is randomly chosen at full price

2+ ads tie at floor price

Winner is randomly chosen at floor price

Second Pricing Exclusions

By default, we will not second price an advertiser's ad against another ad from the same advertiser. Advertisers will only second price against ads from different advertisers.

In some cases, your advertisers may want their own campaigns or flights to second-price against each other. To do this:

API

Set the optional SecondPriceGroupBy on the priority to not second-price against the same campaign, flight, or ad instead of advertiser.

UI

Use the "Ads in this priority are bidding against..." dropdown in the Priority settings to select an option different than "other advertisers".

Remainder Percentage Behavior

You must set a remainder percentage on the priority between 0% and 99%. A priority with a remainder percentage of 100% will not be able to auction its ads.

📘

Remainder percentage ads will have their revenue recorded at their normal price.

There is one exception to above— an ad that is the only eligible ad in the priority for the request will not serve as part of the remainder percentage. Instead, we will serve an eligible impression from the next highest priority.

Second Pricing in adChain Optimized Priorities

You can also second price the impressions served via an adChain Optimized priority. An ad will first be ordered in the adChain by its effective CPM (eCPM) and then will be second-priced if it serves. For example:

eCPM   | Clear Price
------ | -----------
$5.00  | $4.01
$4.00  | $3.01
$3.00  | $1.01

This example uses a floor price of $1.00 CPM.

Just like with other adChains, the first ad has a chance to serve, and if it can't, the impression will be "passed back" to the next ad in the chain. The only difference is that the served impression will be priced at the second price instead of the eCPM.

CPC Floor Prices

🚧

CPC floor prices are available for the Decision API AND UI 2.0 only.

In second-priced auctions, a CPC floor price guarantees that a click from a CPC ad will be priced at a minimum cost-per-click floor that does NOT exceed the CPC price of the ad's flight.

Note that CPM floor prices must be used in addition to CPC floor prices, although the CPM floor price will default to $0.00 CPM if it isn't set on the priority.

Floor CPC values are converted into eCPM to act as an additional floor price during the auction (which uses eCPM values). Second pricing will take place using an eCPM value instead of CPC. Once the click occurs after the auction, the eCPM clear price will be converted to CPC revenue.

👍

When a CPC floor price is set, an ad will not compete in the auction if its price is less than the CPC floor, or its eCPM is less than the CPM floor.

Consider the following second price auction:

Advertiser

Ad eCPM

CPC Bid

A

$5.00

$10.00

B

$4.00

$20.00

~Advertiser A has the highest eCPM, so he wins the impression.
~The clearing CPM for this impression is $4.01 (ie. second highest eCPM + $0.01).

🚧

Note that this means the winning impression is expected to generate a CPM of $4.01, regardless of the rate type of the flight! Thus, for non-CPM flights we compute the cost per click, conversion, etc. such that the expected CPM is $4.01, taking into account the probability that the impression will result in a click, conversion, etc.

Since the winning flight is a CPC flight, we compute the CPC such that this impression is expected to generate the required $4.01 CPM, as follows:

❗️

This is a demonstration of second price auction logic using values that would not be seen in data shipping logs nor the Decision API response.

CPC_clear = CPC_bid * eCPM_clear / eCPM_ad
          = $10.00 * $4.01 / $5.00
          = $8.02

We now show that the computed CPC will, in fact, generate the correct $4.01 CPM for this impression as follows:

Definitions:

  1. eCPM_ad      = CTR_expected * CPC_bid * 1000
  2. CPM_expected = CTR_expected * CPC_clear * 1000

Solving for CTR_expected in terms of eCPM_ad and CPC_bid in [1] we get:

  3. CTR_expected = eCPM_ad / (CPC_bid * 1000)
                  = $5.00 / ($10.00 * 1000)
                  = 0.0005

Substituting the value of CTR_expected from [3] into [2] we obtain:

  4. CPM_expected = CTR_expected * CPC_clear * 1000
                  = 0.0005 * $8.02 * 1000
                  = $4.01

So we expect this impression to generate, on average, a CPM equivalent to the clearing CPM of the auction with the click priced at the computed clearing CPC.

Getting Started

To get started:

  1. Ask your account manager or Kevel support for the CPC Floor Price feature. They will enable it for your account.
  2. There are two ways to set a CPC floor: through a Decision API request, or as a setting on a second price auction Priority.

Setting a CPC Floor Price Via the Decision API

To set a CPC floor price via the Decision API, add the floorCpc (float) to the placements object in the request:

{  
   "placements":[  
      {  
         "networkId":124,
         "siteId":71727,
         "adTypes":[  
            5
         ],
         "floorCpc":0.50
      }
   ]
}

You can also override the floorPrice but this is optional.

Setting a CPC Floor Price Via an Auction Priority

To set a CPC floor price via an auction priority, create a new second price auction priority or update a priority. Add the "Floor CPC":