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.

⏱️ 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
🧠 DSP Decision PipelineThe Brains of RTBexpand_more

When a DSP receives a bid request, it runs through a 4-stage decision pipeline in 40-80ms.

1

🎯 Audience Matching

Does this user match any active campaigns? Retargeting lists, audience segments, frequency caps, budget pacing.

✅ Sarah matches Nike's "Reach active lifestyle audience" campaign
2

📊 Value Prediction (pCTR & pCVR)

ML model predicts engagement: pCTR 0.12%, pCVR 0.03%, AOV $120.

Predicted Value = 0.0012 × 0.0003 × $120 = $0.0000432 → Value CPM = $0.0432
3

💰 Bid Price Calculation with Bid Shading

First-price auction bid shading avoids overpaying.

shaded_bid = value_cpm × 1.2 × 0.85 = $0.044 → final_bid = $1.80 CPM
4

🎨 Creative Selection (DCO)

Select best creative based on user data: women's running shoes, gray/white, Chicago inventory.

🎯 Final Bid: $1.80 CPM | Win Probability: 78%
⚡ Time Breakdown: Stage 1: 10-15ms, Stage 2: 15-25ms, Stage 3: 10-20ms, Stage 4: 5-10ms.
BidRequestTop-Level Object · Requiredexpand_more
id
string
Unique ID of the bid request required
imp
object array
Array of Impression objects required
site / app
object
Publisher website or app details
device
object
User's device details (UA, IP, make, model)
user
object
Human user of the device
at
integer
Auction type: 1 = First Price, 2 = Second Price
tmax
integer
Max time in milliseconds for bids
regs
object
Regulatory conditions (GDPR, CCPA)
Imp (Impression)Requiredexpand_more
id
string
Unique identifier for this impression required
banner/video/audio/native
object
Ad format specifications (width, height, etc.)
bidfloor
float
Minimum bid in CPM (default 0)
pmp
object
Private marketplace deals
⬇️ PART 3: BID RESPONSE & POST-AUCTION ⬇️
📤 OpenRTB 2.6: Bid Response & Post-Auction
The complete response structure — from bid submission to win notification
BidResponseTop-Level Responseexpand_more
id
string
ID of the bid request being responded to required
seatbid
object array
Array of SeatBid objects containing bids required
cur
string
Currency (default "USD")
SeatBid & BidNested Objectsexpand_more
bid[].id
string
Bidder-generated ID required
bid[].impid
string
Matches Imp.id 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
bid[].adm
string
Ad markup (HTML/JS or VAST XML)
bid[].adomain
string array
Advertiser domain (e.g., "nike.com")
🏆 Win Notice & Post-Auction FlowAfter the auctionexpand_more
// Win Notice HTTP GET Request GET https://dsp.com/win?auction_id=abc123&price=1.80 HTTP/1.1
📊 Post-Auction Sequence:
1. Auction completes — highest bidder wins (Nike: $1.80)
2. Win Notice (nurl) — Exchange calls DSP's win URL
3. Creative Delivery — SSP returns creative to publisher
4. Impression Tracking — Impression pixel fires
5. Billing Notice (burl) — Server-side billing recorded
📤 Complete Bid Response ExampleNike's Winning Bidexpand_more
{ "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" }

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)
📢
Announcer
(SSP)
🏛️
Town Square
(Ad Exchange)
📋
Bulletin Board
(DSP)
🧑‍🤝‍🧑
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 the entrance. Customers are coffee drinkers, mostly morning crowd. Minimum offer: $5."
📡 Digital: SSP sends OpenRTB Bid Request to Ad Exchange with impression details (size, format, floor price, user data).
4
The notice is posted on the Town Square Bulletin Board (Ad Exchange). All businesses can see it — Bakery, Bookstore, Bike Shop, Flower Shop.
🌐 Digital: Ad Exchange broadcasts bid request to all connected DSPs.
5
Each business owner decides quickly (40-80ms):
  • Bakery (Nike): "Coffee drinkers love pastries! Sarah bought croissants last week. I'll bid $15."
  • Bookstore (Adidas): "Coffee and books go together. I'll bid $12."
  • Bike Shop (Puma): "Not a great fit. I'll skip this one."
🧠 Digital: DSP Decision Pipeline — Audience Matching, Value Prediction (pCTR/pCVR), Bid Calculation (with bid shading), Creative Selection.
6
Business owners submit their sealed bids to the Town Square official. Bakery: $15, Bookstore: $12.
💰 Digital: DSPs send BidResponse with price, creative URL, win notice URL back to Ad Exchange.
7
The Town Square official runs the auction: "Highest bid is $15 from Bakery. In first-price auction, Bakery pays $15." (Second-price would be $12.01.)
🏆 Digital: Exchange runs first-price auction, selects winner, records clearing price.
8
WIN NOTICE! The official calls Bakery: "You won! Please deliver your poster to the Coffee Shop." (DSP's win URL is pinged.)
✅ Digital: Exchange sends Win Notice (nurl) to winning DSP with clearing price.
9
Bakery's poster is delivered to the Coffee Shop wall. The customer sees it while waiting for their coffee.
🖼️ Digital: Creative delivered to publisher page, user sees ad. Impression pixel fires, billing notice recorded.
10
Total time from customer walking in to poster on wall: the blink of an eye — 150ms. The customer never knew an auction happened.
⚡ Digital: Complete RTB auction in 150ms — user sees ad without any delay.
🔁 How the Coffee Shop Story Maps to RTB:
Wall SpaceAd Impression
AnnouncerSSP
Town SquareAd Exchange
Bulletin BoardOpenRTB Protocol
Bid Request NoticeBidRequest JSON
Business Owners' DecisionsDSP Decision Pipeline
Sealed BidsBidResponse
Highest Bid WinsFirst-Price Auction
Win Notice Callnurl (Win Notification)
Poster DeliveryCreative Serving
📊 The DSP Decision Pipeline (Bakery's 4-Step Process):
Step 1Bakery knows Sarah is a regular (Audience Matching)
Step 2Bakery predicts: Sarah buys pastries 80% of visits (pCTR)
Step 3Bakery calculates: Value = $20, bids $15 (Bid Shading)
Step 4Bakery chooses best poster (croissant ad for morning) (Creative Selection)
💡 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! ☕