Video is the format most likely to be paid for and never watched. A “view” can mean the ad loaded, or played for two seconds, or ran to the end, depending on who is selling it. This post is about buying video by the one definition that cannot be argued with — the player reporting that the ad reached its end — and about how we hear that signal, estimate how often it will come, bid against it, and report it without inventing anything.
What a completed view is
The industry's standard video ad tag has the player send a short series of signals as an ad plays: it started, it reached a quarter, the midpoint, three quarters, and it completed — plus a skip, when the viewer skips. A completed view, for us, is exactly one of those: the player's complete signal, meaning the ad reached its end. Not a load, not a few seconds, not a quarter.
Every signal also carries the playhead as the player reports it, and the ad's length, so a complete can be checked against how long the ad actually is. If a player does not fill in the playhead, we record that the player did not tell us — never a number we made up. A skip is a skip, and silence is not a view.
Two corrections of our own belong here. In early September we found that the playhead was being stored as zero on every event, because players send it as a timecode and we were reading it as seconds; and that player-fired signals carried no playhead at all, because the player fires a plain pixel with nothing but the address. Both were fixed the same week, before completed-view buying ran on real budgets.
Hearing the player when the ad is not ours
Many advertisers serve video from their own ad server, and what reaches the exchange is only a link to it. We used to pass that link straight through. The player then reported start, quartiles and completion to the advertiser's server and to nobody else: we won the impression, paid for it, and never learned whether anyone watched. Now we wrap the advertiser's tag inside ours. Our tracking sits in the wrapper and points at theirs; a compliant player fires both, so we hear what the advertiser hears. The wrapped ad keeps its own landing page — we declare none of our own, so the player never sees two — and a no-fill stays a no-fill.
What the player tells us, and when. Our tag wraps the advertiser's, so one player reports to both.
Bidding per completed view without guessing
A campaign can be bought per completed view: the price field on the campaign form says so in those words, because a per-view price typed into a per-thousand box is the oldest mistake in video buying. From there the bidder has to decide, in a few milliseconds, how much a given impression is worth when you will pay only if the ad plays to the end. That means estimating how likely a completion is, and we do it from rates we have measured rather than from assumptions.
- Measured rates, borrowed where thin. Completion rates are kept for the campaign, each creative, and each creative on each kind of device. A level with little evidence borrows from the level above it, so a brand-new creative starts from its campaign's rate rather than from a fluke of three plays. No evidence is not a zero rate; the two are different claims.
- Every fallback underbids. No estimate, an unreadable counter, a missing price: each degrades to a conservative value or back to per-thousand buying, never upward. Underbidding loses impressions, which can be recovered. Overbidding pays for views that never happened, which cannot.
- A completion we cannot see cannot be paid for. Some players never send the complete signal. Where an exchange shows plenty of starts and no completions at all, we stop buying per completed view there and fall back to per-thousand until the signal appears. A new exchange gets the benefit of the doubt first; silence and absence of traffic look the same at the start.
- One limit, stated. The bid is calculated before the exact creative is chosen, so today the estimate uses the campaign's and the device's history, not the specific creative's. A trained model is the next step; the measured rates stay as its fallback.
How the estimate turns into a price is the product, and like the rest of our bid pricing it stays private — the architecture post says what we share and what we don't. The principles above are the part worth checking us on.
A correction
For the first two days completed-view buying ran in production, the estimator was not wired into the build that production actually runs: it had been connected in one of the three places the bidder is assembled, and not in the one that mattered. Every bid fell back to a fixed, conservative completion rate. Nothing errored, and the bids rose when the advertiser raised the price, so it looked alive. We found it by noticing that the bids moved only when the price did, and by reproducing every observed bid from the price and that one fixed rate. It underbid — the safe direction — and lost impressions it should have won. It is fixed, with a test that fails if any build leaves it out.
Why your video did not serve, in words
A video creative has to fit the slot on offer: long enough and short enough, in a format the player can play, under a tag version it understands, linear where the slot is linear, within the bitrate it accepts. When a creative fails one of those checks the bidder used to know why, build the reason, and throw it away before anyone could read it. Now each rejection is counted by its reason, so a creative that misses most of its slots shows up the same day with the reason attached.
The case that forced this is worth telling. A six-second ad was being rejected on most of the full-screen vertical slots it was meant for. The pattern pointed at the size, and a week of reading code later the answer was the length: those slots simply ask for ads of fifteen seconds or more. The size was never checked at all. With the reason counted, that is a one-line answer, and the fix is a longer cut of the same ad, not a new size. Before any of that, the upload itself is checked: the tag's address has to be reachable over a secure connection, and what comes back has to be a valid video ad tag, with the reason shown on the form when it is not.
Why a video ad was not served, in words. A real case from September 2026, anonymised.
What the report shows
| Column | What it is |
|---|---|
| Starts | Plays the player reported starting |
| Quarter, half, three quarters | How many plays the player reported reaching each mark |
| Completes | Plays the player reported reaching the end — the unit you pay for on a completed-view campaign |
| Completion rate | Completes as a share of starts |
| Cost per completed view | Spend divided by completes; a dash when there are no completes to divide by, never a zero |
| Partner-network video | The network's own quarter-by-quarter counts, exactly as reported, marked as not reported where the network gave none |
Those columns were there before, as it happens, and empty: a campaign bought per completed view showed a cost per thousand as its only cost line. Since October the video columns are filled from the player's own events, so a completed-view campaign is judged by the unit it is buying.
Buy the unit the player can report, hear the player even when the ad is not yours, estimate only from what you measured, let every fallback err on the side of paying less, and count the reasons for every no — including your own mistakes.
Run a video campaign paid per completed view
Questions we get asked
What counts as a completed view?
The player's own complete signal, sent when the ad reaches its end, under the industry's standard video ad tag. A load is not a view, a skip is not a view, and a player that sends nothing is not counted as a view either.
Why does cost per completed view show a dash on my report?
Because no completed views have been reported for that scope yet: either the campaign is not bought per completed view, or the players on that inventory have not sent complete signals. A dash is never a zero; it means there is nothing to divide by.
Can I buy video per completed view on partner networks too?
Partner networks sell video on their own terms and definitions, including skippable in-stream formats created from the same dashboard. Their quarter-by-quarter view counts arrive in the same report exactly as the network reports them, marked as not reported where the network gave none. We never estimate on top of a partner's figures.
The proportions in the diagrams are illustrative. The smoothing, the clamps and the number of starts after which an exchange is judged silent are fixed settings we do not publish, and the way an estimate becomes a price is not described here at all. The two cases told above are real and anonymised: no advertiser, campaign, creative or exchange is named, and the figures in the commit history behind them are not repeated. No completion-rate or performance figure has been published because none has run long enough; they will be, once measured. Behaviour described is how the platform works as of 13 October 2026 and may change. This describes our own platform and is not advice for yours.