Real-Time Bidding (RTB)
From Concept to Specification
First, understand how RTB works in plain language. Then, dive deep into OpenRTB 2.6 โ from bid request objects to bid response structure, win notices, and the complete DSP decision pipeline.
bolt Part 1: What is Real-Time Bidding (RTB)?
Real-Time Bidding (RTB) is the automated auction process where ad impressions are bought and sold individually in milliseconds. According to the OpenRTB specification, RTB enables "bidding for individual impressions in real-time (i.e., while a consumer is waiting)."
Unlike traditional media buying where inventory is purchased in bulk at fixed prices, RTB evaluates each impression separately, allowing advertisers to bid exactly what an impression is worth to them โ based on the user, context, and real-time data. This impression-level optimization is what makes programmatic advertising so powerful and efficient.
โฑ๏ธ 150ms
Average auction time
๐ 200B+
Daily bid requests
๐ฐ $600B+
Annual spend
๐ OpenRTB 2.6
Current specification
โฌ๏ธ The RTB Journey: 0ms โ 150ms (Vertical Flow)
0-50ms
๐ User Lands on Website
Sarah opens a cooking blog on her iPhone. The page begins loading HTML, CSS, and JavaScript.
๐ง DNS resolution + TCP/TLS handshake + DOM construction begins
50-60ms
๐ท๏ธ Ad Tag Fires โ SSP Called
The publisher's ad tag executes, calling the SSP with slot dimensions, page context, floor price.
๐ฆ Data sent: tagid, page URL, category, bidfloor, user agent, IP
60-70ms
๐ช Cookie Sync & Identity Resolution
SSP and DSPs match user IDs via cookie sync pixels.
๐ Identity signals: Universal ID (UID2), device ID, IP address
70-80ms
๐ก OpenRTB Bid Request
SSP sends structured bid request using OpenRTB protocol to Ad Exchanges.
Key fields: id, imp array, site/app, device, user, tmax, bidfloor
80-120ms
๐ง DSP Evaluation & Bid Calculation
Ad Exchange broadcasts to DSPs. Each DSP runs through a 4-stage decision pipeline.
๐ Audience match โ | pCTR 0.12% | pCVR 0.03% | bid $1.80 CPM
120-130ms
๐ Auction & Winner Determination
Exchange collects bids, runs first-price auction, selects winner.
๐ฅ Nike: $1.80 | ๐ฅ Adidas: $1.55 โ Nike wins, pays $1.80 CPM
130-150ms
๐ผ๏ธ Creative Delivery & Rendering
Creative URL sent to SSP โ returned to publisher page โ ad loads.
โ
Total: 150ms โ Win notice (nurl) and billing notice (burl) fired.
โฌ๏ธ PART 2: OPENRTB BID REQUEST โฌ๏ธ
๐ OpenRTB 2.6: Bid Request Specification
The industry-standard protocol for real-time bidding communication
When a DSP receives a bid request, it runs through a 4-stage decision pipeline in 40-80ms. Each stage uses machine learning models trained on billions of historical auctions to make optimal bidding decisions.
1
๐ฏ Audience Matching
Does this user match any active campaigns? The DSP checks retargeting lists, audience segments, frequency caps, and budget pacing.
โ
Sarah matches Nike's "Reach active lifestyle audience" campaign
2
๐ Value Prediction (pCTR & pCVR)
Machine learning models predict engagement likelihood: pCTR (click-through rate) and pCVR (conversion rate).
Predicted Value per Impression = pCTR ร pCVR ร AOV
= 0.0012 ร 0.0003 ร $120 = $0.0000432 โ Value CPM = $0.0432
3
๐ฐ Bid Price Calculation with Bid Shading
In first-price auctions, DSPs use bid shading algorithms to avoid overpaying while maximizing win rate.
shaded_bid = value_cpm ร margin ร shading_factor = $0.044
final_bid = max(value_cpm, floor_price + margin) = $1.80 CPM
4
๐จ Creative Selection (DCO)
Based on user data, the DSP selects the most relevant creative variant: women's running shoes, gray/white, Chicago inventory, morning ad copy.
๐ฏ Final Bid: $1.80 CPM | Win Probability: 78%
โก Time Breakdown: Stage 1 (audience matching): 10-15ms, Stage 2 (value prediction): 15-25ms, Stage 3 (bid calculation): 10-20ms, Stage 4 (creative selection): 5-10ms. Total: 40-80ms.
id
string
Unique ID of the bid request, provided by the exchange required
imp
object array
Array of Impression objects โ at least 1 per request required
site / app
object
Details about the publisher's website or mobile app
device
object
User's device details (UA, IP, make, model, OS)
user
object
Human user of the device; the advertising audience
at
integer
Auction type: 1 = First Price, 2 = Second Price (default 2)
tmax
integer
Maximum time in milliseconds for bids (avoids timeout)
regs
object
Regulatory conditions (GDPR, CCPA, COPPA flags)
id
string
Unique identifier for this impression required
banner/video/audio/native
object
Ad format specifications (width, height, etc.)
bidfloor
float
Minimum bid for this impression in CPM (default 0)
pmp
object
Private marketplace deals applicable to this impression
instl
integer
Interstitial or full-screen ad: 1 = yes, 0 = no
โฌ๏ธ PART 3: BID RESPONSE & POST-AUCTION โฌ๏ธ
๐ค OpenRTB 2.6: Bid Response & Post-Auction
The complete response structure โ from bid submission to win notification
id
string
ID of the bid request being responded to required
seatbid
object array
Array of SeatBid objects containing one or more bids required
cur
string
Currency of the bid using ISO-4217 (default "USD")
bid[].id
string
Bidder-generated ID for this bid required
bid[].impid
string
ID of the impression being bid on required
bid[].price
float
Bid price in CPM required
bid[].nurl
string
Win notification URL โ called if bid wins
bid[].burl
string
Billing notice URL โ used for server-side impression counting
bid[].adm
string
Ad markup (HTML/JS or VAST XML for video)
bid[].adomain
string array
Advertiser domain (e.g., "nike.com")
// Win Notice HTTP GET Request
GET https://dsp.com/win?auction_id=abc123&price=1.80 HTTP/1.1
Host: dsp.com
๐ Post-Auction Sequence:
1. Auction completes โ Exchange selects highest bidder (Nike: $1.80)
2. Win Notice (nurl) โ Exchange calls DSP's win notification URL
3. Creative Delivery โ SSP returns winning creative to publisher's page
4. Impression Tracking โ Impression pixel fires, counting the served impression
5. Billing Notice (burl) โ Server-side billing notification, final spend recorded
{
"id": "req_123",
"seatbid": [{
"seat": "the_trade_desk",
"bid": [{
"id": "nike_bid_001",
"impid": "imp_1",
"price": 1.80,
"nurl": "https://dsp.com/win?auction_id=req_123&price=1.80",
"adm": "<html><img src='https://nike.com/ad.jpg'></html>",
"adomain": ["nike.com"]
}]
}],
"cur": "USD"
}
๐ Key Response Fields: id matches bid request, price is bid CPM, nurl is win notification endpoint, adm contains creative HTML.
timeline Complete RTB Request-Response Flow
๐ก 1. Bid Request (SSP โ Exchange โ DSPs)
{ "id": "req_123", "imp": [{ "bidfloor": 1.50 }], "device": { "ua": "iPhone" }, "user": { "id": "abc123" } }
๐ค 2. Bid Response (DSP โ Exchange)
{ "id": "req_123", "seatbid": [{ "bid": [{ "price": 1.80, "nurl": "...", "adm": "..." }] }] }
๐ 3. Win Notice (Exchange โ DSP)
GET https://dsp.com/win?price=1.80
๐ผ๏ธ 4. Creative Served โ User sees ad in 150ms
โ The Coffee Shop Story: Understanding RTB in Plain Language
A simple real-world example that explains Bid Requests, DSP Decisioning, Auctions, and Win Notices
โก THE COFFEE SHOP AUCTION STORY โก
โ
Coffee Shop
(Publisher)
โ
โ
๐๏ธ
Town Square
(Ad Exchange)
โ
โ
๐งโ๐คโ๐ง
Customers
(Users)
1
Maria's Coffee Shop has empty wall space โ that's the ad slot. A customer walks in, ready to order (user visits website).
๐บ Digital: User lands on a webpage with an ad placement.
2
Maria tells the Town Announcer (SSP): "I have wall space available. Who wants to put up a poster?"
๐ท๏ธ Digital: Publisher's SSP prepares to send a bid request.
3
The Announcer writes a "Bid Request" notice: "Coffee shop wall space, 5 feet wide, near entrance. Minimum offer: $5."
๐ก Digital: SSP sends OpenRTB Bid Request to Ad Exchange.
4
The notice is posted on the Town Square Bulletin Board (Ad Exchange). All businesses can see it.
๐ Digital: Ad Exchange broadcasts bid request to all connected DSPs.
5
Each business owner decides quickly (40-80ms): Bakery (Nike) bids $15, Bookstore (Adidas) bids $12.
๐ง Digital: DSP Decision Pipeline โ Audience Matching, Value Prediction, Bid Calculation, Creative Selection.
6
Business owners submit sealed bids to the Town Square official.๐ฐ Digital: DSPs send BidResponse with price, creative URL, win notice URL.
7
The official runs the auction: "Highest bid is $15 from Bakery. Bakery pays $15." (First-price auction)
๐ Digital: Exchange runs first-price auction, selects winner.
8
WIN NOTICE! The official calls Bakery: "You won! Please deliver your poster."
โ
Digital: Exchange sends Win Notice (nurl) to winning DSP.
9
Bakery's poster is delivered to the Coffee Shop wall. The customer sees it while waiting for coffee.
๐ผ๏ธ Digital: Creative delivered, user sees ad. Impression pixel fires.
10
Total time: the blink of an eye โ 150ms. The customer never knew an auction happened.
โก Digital: Complete RTB auction in 150ms โ user sees ad without delay.
๐ How the Coffee Shop Story Maps to RTB:
Wall Space โ Ad Impression
Announcer โ SSP
Town Square โ Ad Exchange
Bulletin Board โ OpenRTB Protocol
Bid Request Notice โ BidRequest JSON
Business Owners' Decisions โ DSP Decision Pipeline
Sealed Bids โ BidResponse
Highest Bid Wins โ First-Price Auction
Win Notice Call โ nurl (Win Notification)
Poster Delivery โ Creative Serving
๐ก The Big Idea: RTB is like a lightning-fast auction for wall space. The Coffee Shop (Publisher) tells the Announcer (SSP) about available space. The Announcer posts a notice (Bid Request) at the Town Square (Ad Exchange). Businesses (Advertisers) through their representatives (DSPs) evaluate the opportunity, calculate a fair price using their own intelligence (DSP Decision Pipeline), and submit sealed bids (BidResponse). The Town Square official (Exchange) runs the auction, declares a winner, and calls them (Win Notice). The winner's poster (Creative) goes up immediately โ all before the customer finishes ordering their coffee! โ
๐ Key Takeaways
- RTB (Real-Time Bidding) is the automated auction process where ad impressions are bought and sold individually in under 150 milliseconds.
- The OpenRTB protocol standardizes communication between SSPs, Ad Exchanges, and DSPs, enabling interoperability across thousands of platforms.
- A Bid Request contains impression details (size, format, floor price), user context (device, location, user ID), and page context (URL, category).
- The DSP Decision Pipeline has 4 stages: Audience Matching, Value Prediction (pCTR/pCVR), Bid Calculation (with bid shading), and Creative Selection (DCO).
- A Bid Response includes the bid price, creative URL (adm), win notification URL (nurl), and billing notice URL (burl).
- Most exchanges use first-price auctions where the winner pays exactly what they bid. DSPs use bid shading to optimize.
- The Win Notice (nurl) is an HTTP GET request from the exchange to the winning DSP confirming the auction outcome.
- Over 200 billion bid requests are processed daily across programmatic exchanges, representing over $600 billion in annual ad spend.