Programmatic advertising, explained by following one impression
By a programmatic ad operations specialist · About the author · Updated 21 October 2026
Programmatic advertising is buying and selling ad space through software instead of by email and insertion order. When a web page or app loads, its ad slot is offered to buyers' systems, which decide on their own whether to bid and how much — usually in an auction that ends before the page has finished loading.
Most explanations stop at a diagram of boxes and arrows. This one follows a single impression through the whole chain instead, because almost every step leaves something behind that you can open and read: a public file, a field in a bid request, an encoded consent string, an ad tag. Where that is true, there is a link to a free tool on this site that reads it for you.
Who is involved
| Who | Works for | What it does |
|---|---|---|
| Advertiser or agency | The brand | Sets the budget, the audience and the price it is willing to pay. |
| DSP (demand-side platform) | The buyer | Receives offers of ad slots and decides, per impression, whether to bid and how much. |
| Curator | Either side | Optional. Packages inventory from several sellers into a deal a buyer can switch on with one deal ID. |
| SSP / ad exchange | The publisher | Offers the publisher's slots to many DSPs at once and runs the auction. |
| Publisher | Itself | Owns the website or app and the audience on it. |
Following one impression, step by step
Say someone opens a news article. There is one 300×250 slot on the page. Here is what happens to it.
1. The slot is put up for sale
The page calls the publisher's ad server, which hands the slot to one or more SSPs. Each SSP now has to describe the slot to buyers in a format every DSP understands. That format is OpenRTB, published by the IAB Tech Lab — the current version is 2.6.
2. The SSP writes a bid request
The bid request is a block of JSON sent to every DSP the SSP works with. The parts that matter most:
imp— the slot itself: its sizes, the minimum price (bidfloor, as a CPM) and the currency of that minimum (bidfloorcur).siteorapp— where the ad will appear. A request carries one or the other, never both.deviceanduser— what is known about the screen and the person in front of it.regs— which privacy laws apply.source.schain— the list of every company that has handled this impression so far.tmax— how many milliseconds the SSP will wait for an answer.
Every field is described on the OpenRTB BidRequest reference, with an example request.
3. Consent travels with it
If the person is in Europe, regs.gdpr is set to 1 and user.consent carries a TCF consent string: a compact code recording which companies the person agreed to and for what purposes. Every buyer reads it before using any personal data. You can paste one into the consent string decoder to see what it says — including the cases where a string is technically valid but buyers will still treat it as no consent.
4. The buyer checks the seller is real
Before bidding, a careful DSP checks that the SSP is actually allowed to sell this publisher's inventory. Three public pieces have to line up:
- The publisher's ads.txt file, at the root of its domain, lists every company authorised to sell its ads and the account ID each one uses. Check any site with the ads.txt checker.
- The SSP's sellers.json file says who owns that account ID — the publisher itself or a reseller. Look one up with the sellers.json lookup.
- The schain in the bid request lists the same companies and IDs in the order they handled this impression. If it is marked incomplete, many buyers stop here.
If these disagree, the impression may be resold, mislabelled or fraudulent — and a buyer that cares will simply not bid.
5. The DSP decides whether and how much to bid
The DSP compares the impression with every live campaign: does the audience, site, size and location match, is the campaign under its frequency cap, and is it spending on schedule? It then picks a price and answers within tmax. A bid that arrives late is thrown away with no error message, which is the most common reason a campaign's win rate looks low for no visible reason.
6. The auction
The SSP collects the bids, drops any under the floor, and picks a winner. The bid request's at field says which rules apply: 1 means first price, where the winner pays what it bid, and 2 means second price, where it pays just above the runner-up. The spec still defaults to 2, but most major exchanges have moved to first-price auctions, which is why buyers now shade their own bids down.
7. The ad is delivered
The winning DSP's response already contains the ad — HTML for a banner, or a VAST tag for video. VAST tags often point to another VAST tag, which points to another; each hop is a chance to fail. The VAST validator follows the chain hop by hop and names the error at each one.
8. Everyone counts it — differently
The publisher's ad server, the SSP, the DSP and often a third-party verification vendor each count the impression with their own rules and timing. Their numbers never match exactly, and a gap of a few percent is normal. Billing is usually on a CPM — the price per thousand impressions — so the CPM calculator turns a spend and an impression count into the rate you actually paid.
Each company in the chain also takes a share of the money. If you buy or resell media, the margin calculator shows how much of the price each layer keeps — and why a 30% markup is not a 30% margin.
The four ways to buy
All four use the same bid requests. What changes is who is allowed to bid and whether the price is fixed. Deals appear inside imp.pmp, each with its own deal ID — when a deal is not delivering, that is the first place to look.
| Type | Who can bid | Price | Volume guaranteed? |
|---|---|---|---|
| Open auction | Any buyer | Auction | No |
| Private marketplace (PMP) | Invited buyers, via a deal ID | Auction, usually with a higher floor | No |
| Preferred deal | One buyer, first look | Fixed | No |
| Programmatic guaranteed | One buyer | Fixed | Yes |
Where it goes wrong in practice
From the trafficking side, most “programmatic isn't delivering” problems come down to a short list:
- Bids arriving after tmax. They vanish without an error. Compare response time to
tmaxbefore touching price. - A floor in a different currency.
bidflooris inbidfloorcur, which defaults to USD. A floor of 2.00 means something very different in yen. - The seller is missing from ads.txt. The impression is offered, and buyers that check quietly decline it.
- A consent string that decodes but does not count. Buyers treat the user as non-consented and bid low or not at all.
- A broken video chain. One bad wrapper hop and the whole ad fails with a VAST error code — see the VAST error code reference.
Common questions
Is programmatic advertising the same as real-time bidding?
No. Real-time bidding is one way of buying programmatically: an auction for each impression. Programmatic guaranteed and preferred deals are also programmatic — bought through the same software and the same bid requests — but at a fixed price and without an open auction.
What is the difference between a DSP and an SSP?
A DSP (demand-side platform) works for the buyer: it receives bid requests and decides whether and how much to bid for an advertiser. An SSP (supply-side platform) works for the publisher: it offers the publisher's ad slots to many DSPs at once and runs the auction. An ad exchange is the marketplace in between, and today most SSPs run their own.
How fast does a programmatic auction happen?
Within the time limit the exchange sets in the bid request's tmax field, measured in milliseconds. A bid that arrives after it is discarded without an error, which is why slow responses show up as low win rates rather than as failures.
Is Google Ads programmatic advertising?
Search ads in Google Ads run on Google's own auction rather than on OpenRTB. When people in the industry say programmatic they usually mean display, video, audio and connected-TV ads bought through a DSP — Google's own DSP is Display & Video 360.
Check it yourself
- OpenRTB ReferenceBid request objects, fields and what they mean.
- Consent String DecoderRead a TCF v2.2 TC string, and the policy breaks inside it.
- ads.txt CheckerFetch and validate against IAB ads.txt 1.1.
- sellers.json LookupSearch an ad system's sellers by ID, name or domain.
- VAST ValidatorParse a tag, list media files, explain every error.
- CPM CalculatorSolve cost, impressions or rate from the other two.
- Margin CalculatorAny two of cost, margin, revenue and profit give the other two.
- Win Rate CalculatorBid win rate, and why a high one can be bad news.