Stack Teardowns · Issue 02 · Web track · Desktop
CNN.com
Eleven wrappers fire in the page lifecycle. Across the captured 5-minute session, 89% of bid attempts time out before they can compete. Six bidders return zero measurable responses. On the premium ATF banner slot, only one bidder consistently responds in time. Captured via the Beamflow Chrome extension and cross-checked against CNN's public ads.txt and each declared SSP's sellers.json.
The numbers at a glance
Bid requests captured
536
over ~5min session
Wrappers detected
11
9 SSP + 1 DSP + 1 direct
Bid timeout rate
89%
412 of 463 bid attempts
Bidders with 0 responses
6 of 11
never returned in tmax
Schain coverage
15%
83 of 536 carry chain
Authorized via ads.txt
82%
377 of 462 programmatic
›Methodology
- Capture method:
- Live wire-level capture of every bid request fired in the browser
- Tool:
- Beamflow Chrome extension v0.3.0 (install)
- Session:
- 292 seconds covering the homepage, several category pages, and several article pages
- Device:
- Desktop Chrome, US residential network
- Schain detection:
- Direct read of the schain parameter on each OpenRTB bid request
- Timing instrumentation:
- tmax per wrapper, latency p50/p95 per bidder, bidTimeout events captured per placement
- Bid attempt counting:
- A bid attempt is a per-bidder request that either returned a measurable response within tmax (counted in latencyByBidder samples, 51 in this session) or fired a bidTimeout event (counted in timeoutsByBidder, 412 in this session). Total bidder-level attempts: 463. The 536 figure above is total Prebid bid requests captured on the wire, which includes both bidder-level attempts and wrapper-level requests routed server-side.
- Wrapper attribution:
- Endpoint host pattern matching against a known-wrapper database
- Supply chain audit:
- ads.txt + sellers.json crawl via Beamflow.co (view the live scan)
1. The site at a glance
www.cnn.com is the flagship CNN news property, owned by Warner Bros. Discovery. The runtime capture covered the homepage, several category pages, and several article pages over a 292 seconds (~5 minutes) session. The site monetizes through display advertising on a prebid.js stack with eleven detected wrappers (nine SSP-side, one DSP-direct integration, one mixed direct/managed). No paywall or subscription gate was encountered during the captured session.
No video ads were observed in the captured surfaces. Video formats are likely served on dedicated video pages not covered in this session. A follow-up capture on a CNN Video URL would show whether video runs on a separate stack or shares the same wrappers seen here.
Where this stack sits in CNN's revenue
WBD's January 2026 spinoff proxy revealed CNN at roughly $1.8B in 2026 total revenue, down from $2.2B in 2021. CNN Digital ad revenue is not disclosed; estimates place it in the $150-250M range inside that total.
The cnn.com open-web display stack analyzed here is a small slice of CNN's overall revenue picture, and an even smaller slice once you factor in the rest of the demand stack outside the Prebid layer covered by this capture. Per-impression efficiency on whatever does flow through this layer matters disproportionately at smaller scale.
Sources: Hollywood Reporter on the WBD proxy filing, Variety on CNN profitability. The CNN Digital ad revenue figure is an estimate, not a disclosed number.
2. The stack at a glance
Eleven wrappers fire in the page lifecycle. Three are traditional Prebid.js adapter integrations (Criteo, Magnite Fastlane, TripleLift). Two are managed wrappers running their own server-side logic (Amazon TAM, PubMatic OpenWrap). Five are direct integrations to SSP endpoints (Index Exchange, Wunderkind, Nativo, Media.net, Kargo). One is a direct integration to a DSP endpoint (The Trade Desk).
Criteo drives the most bid volume at 85 requests over the session, roughly 16% of the total. PubMatic OpenWrap drives the least at 9 bids, which is partially explained by a tmax misconfiguration covered in the timing section below. The wrapper participation has changed materially between an earlier capture (2026-05-14, with Sharethrough and The Ozone Project active) and this one, suggesting either page-type variance or a recent wrapper config change.
3. Wrappers and adapters detected
Eleven wrappers detected at the page lifecycle level. Each wrapper is a gateway into a wider demand pool, not a single bidder. A single Prebid adapter call to Criteo can route to dozens of advertisers via Criteo's own auction. A single Amazon TAM call routes to the full TAM bidder list. The 11 here counts integration surfaces fired in the browser, not buyers competing in the auction. Rows are ordered by bid volume.
| Wrapper | Type | Routes to | Bids | Schain |
|---|---|---|---|---|
| Criteo | Prebid adapter | Criteo's commerce + display demand | 85 | 0/85 (0%) |
| The Trade Desk (direct.adsrvr.org) | Direct integration | The Trade Desk DSP (buyer-side direct integration) | 74 | 27/74 (36%) |
| Amazon TAM / UAM | Managed wrapper | Amazon Publisher Services full TAM bidder list (handled server-side) | 60 | 0/60 (0%) |
| Magnite Fastlane (Rubicon) | Prebid adapter | Magnite's exchange + Marketplace + Streaming | 48 | 0/48 (0%) |
| Nativo | Direct integration | Nativo's native + display demand | 47 | 0/47 (0%) |
| Wunderkind | Direct integration | Wunderkind's demand pool | 47 | 47/47 (100%) |
| Index Exchange | Direct integration | Index Exchange marketplace demand | 47 | 0/47 (0%) |
| TripleLift | Prebid adapter | TripleLift's native + display + video demand | 45 | 0/45 (0%) |
| Media.net | Direct integration | Media.net demand (Yahoo-aligned partnership) | 41 | 0/41 (0%) |
| Kargo | Direct integration | Kargo's contextual + mobile-first demand | 33 | 0/33 (0%) |
| PubMatic OpenWrap | Managed wrapper | PubMatic exchange + OpenBidding partners | 9 | 9/9 (100%) |
4. Supply path coverage
This is the section that only a live wire capture can produce. Static analysis can tell you which wrappers a stack uses. It cannot tell you which of them are actually passing the supply chain signal that downstream buyers verify against.
Schain coverage (wire-level)
83 / 536
15% of bid requests in the session carried the IAB SupplyChain object (schain) in the browser-side OpenRTB payload. Every chain present resolved at depth 1, meaning one declared seller between the publisher and the auction. See the wire-level caveat below the chart.
Schain coverage by wrapper
Per-wrapper share of bids that included the schain parameter. Green: 100% coverage. Amber: partial. Red: 0%.
Where schain is and is not passing (wire-level). Two wrappers pass schain on 100% of their bids in the browser payload (Wunderkind 47 of 47, PubMatic OpenWrap 9 of 9). One passes it on a meaningful fraction (The Trade Desk direct, 27 of 74). Eight show zero in the wire (Criteo, Magnite, Amazon TAM, Index Exchange, TripleLift, Media.net, Nativo, Kargo).
Two wrappers passing schain perfectly demonstrate that the Prebid layer itself is not the bottleneck. When the global schain config is correct, adapters auto-include it on their bid requests. The fix for the others typically lives in the per-wrapper config: Prebid.js setConfig for the adapter wrappers, the Index Exchange wrapper script in IX's Library Settings, each managed wrapper's own admin UI.
Important caveat: wire-level zero is not the same as end-to-end zero. This capture reads schain as it appears in the OpenRTB request fired from the browser. Some wrappers add schain server-side before forwarding the bid request to demand partners, in which case the chain still reaches buyers even when the wire-level shows 0%.
Amazon TAM is the clearest case: TAM is documented to handle schain server-side, so the wire-level zero here is expected behavior, not a real coverage gap.
For the other seven wrappers showing 0% wire-level (Criteo, Magnite, Index Exchange, TripleLift, Media.net, Nativo, Kargo), server-side behavior is not always public. The honest read is: the wire-level zero is what the buyer-facing browser request shows, but the publisher should confirm with each SSP rep what happens server-side before assuming end-to-end coverage matches the wire. The publisher's lever is per-wrapper schain config; the action only matters where the SSP is not already adding it downstream.
5. Auction timing analysis
Two configuration patterns show up clearly in the timing capture. The first is a wrapper-level tmax misconfiguration on PubMatic OpenWrap. The second is a stack-wide pattern of bidder responses arriving after the auction has already closed. Combined, the result is a bid timeout rate of 89% across the captured session. Eight of every ten bidder attempts never make it back in time to compete.
Session-level timeout rate
89%
412 of 463 bidder attempts timed out before a response could land. Six bidders (TripleLift, Nativo, OpenWeb, Criteo, Kargo, Teads) returned zero measurable responses across the entire 5-minute window. An attempt is counted as one (bidder, ad unit) pairing in the Prebid auction, summed across the session. Sources: latencyByBidder samples (51) + timeoutsByBidder count (412).
Wrappers (Section 3) and bidders (below) are both 11, but the membership is not identical. The bidders below are Prebid-side participants pulled from pbjs.bidTimeout and bidResponse events. OpenWeb and Teads appear as Prebid bidder names without a separately-detected wrapper endpoint; Amazon TAM and Wunderkind run outside Prebid's auction so they appear as wrappers above but not as Prebid bidders here.
Responses vs timeouts per bidder
Green = response landed inside tmax. Red = timed out. Sorted by timeout rate descending. tmax for most wrappers is 1,250ms.
For the five bidders with p95 over 3,000ms, even the bids that responded fall outside the 1,250ms tmax on their slow tail. With p95 above tmax, roughly half of the bids you see logged arrive after the auction has been decided.
The PubMatic paradox
PubMatic OpenWrap is the only wrapper in the stack passing schain on 100% of bids in this session. The schain config is correct. But the tmax shelf is set to 300ms, against PubMatic's own measured p50 of 1,236ms. The result: 91% of PubMatic bids time out before they can land.
A 300ms shelf is reasonable for very-fast in-page banner adapters. PubMatic OpenWrap is a managed wrapper that orchestrates a server-side auction with multiple downstream demand sources; its real-world latency budget is closer to 800-1500ms. The right schain config does nothing when no bid lands in time. Fix is one line: move pubmatic.com to the 1,250ms shelf, or set pbjs.bidderSettings.pubmatic.bidderTimeout = 1250 per the Prebid docs on bidder-level timeouts.
Configured tmax shelves
| Wrapper | tmax | Samples | Note |
|---|---|---|---|
| criteo.com | 1250ms | 85 | |
| adsrvr.org (TTD) | 1250ms | 74 | |
| nativo.com | 1250ms | 47 | |
| wunderkind.co | 300ms | 47 | Wunderkind uses a non-Prebid integration path; the 300ms shelf does not cause its bids to time out. |
| pubmatic.com | 300ms | 9 | Misconfig. PubMatic OpenWrap p50 is 1,236ms; the 300ms shelf produces a 91% timeout rate. |
The premium ATF banner is decided by one bidder
The headline above-the-fold banner (ad_bnr_atf_01) was attempted by all eleven bidders during the session. The breakdown of responses vs timeouts on this single slot is the cleanest illustration of the structural problem.
158
Total attempts
10
Responses (all TTD)
94%
Timeout rate
With one bidder consistently responding and ten consistently absent, the slot is not generating competitive price pressure in this session. The one bidder responding is TTD via a direct DSP integration rather than an SSP forwarding multiple buyers, so the auction's competitive structure (multiple SSPs each forwarding their own demand pool) is not producing observable pressure on the clearing price on this slot in this window.
Why this happens
Two non-mutually-exclusive root causes match the data:
- 1.
Auction start timing.
Prebid's
requestBids()fires before the ad slots are fully defined in the DOM. Every bidder is racing a clock that started early. The documented Prebid pattern (see the basic example) is to call requestBids inside a googletag.cmd.push callback after slot definition, then call setTargetingForGPTAsync in the bidsBackHandler before googletag.pubads().refresh(). If the wrapper does this in a different order, every bidder sees a tmax that has been ticking since before they were given anything to bid on. This is the most likely cause of the six bidders at 100% timeout rate. - 2.
Per-bidder tmax misconfig.
The PubMatic case above is the clearest example: a bidder whose p50 latency is 1,236ms placed on a 300ms shelf. Per the Prebid timeout-defaults docs, the default bidder timeout is 1,000ms with failsafeTimeout at 1,100ms; managed wrappers and direct integrations often need 1,250-1,500ms. Per-bidder overrides are explicitly supported via
pbjs.bidderSettings.<bidder>.bidderTimeout = N.
The TTD, IX, Medianet bidders that did respond all show p95 latencies of 3,000+ms while the wrapper tmax is 1,250ms. This means even the bidders that respond have their slow tail killed by the timer. Setting failsafeTimeout above the bidder timeout, as Prebid recommends, would let in-flight bids land after tmax expires without blocking the auction render. That is a wrapper-level config that the publisher controls directly.
Verify in your own Chrome DevTools
Everything counted above is observable in plain Chrome DevTools with no extension at all. Open DevTools, switch to the Network panel, filter by Fetch/XHR, and reload www.cnn.com. You will see the same ten bidder requests get aborted as the tmax timer expires.

canceled, 0 bytes returned). Kargo's own client-side telemetry endpoint logs the timeout back to its servers (the URL parameter is literally named timeout). GAM's ad request fires ~860ms after the canceled bidders, well past their kill point.Three observations from the network layer that the bidder-timing capture above does not surface directly:
- 1.
Ten bidders aborted in a 40ms window around 1,000ms.
TTD, Index Exchange, Media.net, Criteo, Magnite Fastlane, Magnite Prebid Server, TripleLift, PubMatic OpenWrap, Teads, and PubMatic all show status
canceledat 1.00-1.04s with 0kB returned. That cluster is the network-layer signature of Prebid'sbidTimeoutevent firing. It is also tighter than the 1,250ms tmax shown in tmaxByWrapper, which suggests a separatefailsafeTimeoutat ~1,000ms is overriding per-wrapper tmax stack-wide. Both ride in the same Prebid timeouts config (see the Prebid timeout-defaults doc). - 2.
Kargo's own telemetry confirms the timeout from the SSP side.
The 200 OK request to
krk2.kargo.com/api/v1/eventis Kargo's client-side ping back to its own servers, and the URL parameter is literally namedtimeout. Kargo is logging on its own side that this page killed its bid before it could respond. SSP account teams can pull these telemetry reports for any given publisher; the evidence the timeout is happening exists on both sides of the wire. - 3.
Prebid runs inside an anti-tracking iframe.
Every bidder request in the panel above shows
frame_ant.js:2as its initiator. Theantprefix is CNN's anti-tracking iframe wrapper, which means every bid request crosses an iframe boundary on its way out. This is a defensible privacy architecture but adds latency overhead to every bidder request, compounding the tmax pressure documented above.
The takeaway: the findings in this section do not rely on a proprietary capture tool. Anyone at CNN's ad ops team (or anyone evaluating this teardown) can reproduce the timeout pattern by opening Chrome DevTools on www.cnn.com. The Beamflow capture adds bidder-level attribution and the per-bidder response/timeout breakdown; the network-layer evidence stands on its own.
6. Supply chain audit
View the live scan →Two views. First, the per-wrapper authorization status as observed in the runtime session above. Second, the full ads.txt and sellers.json audit across every declared seller on the file (not just what fired in this session), run through Beamflow.co.
6a. Per-wrapper authorization (this session)
Authorization is the second half of the supply chain story. Even if a bid carries a chain, downstream buyers verify the path against the publisher's ads.txt and each declared SSP's sellers.json. A break anywhere in that path means the buyer either skips the bid or prices it lower.
377
Verified (82% of programmatic)
85
SSP sellers.json missing (chain unverifiable). All Criteo.
0
Not authorized in publisher ads.txt
0
DIRECT/RESELLER mismatches
Per-wrapper status
| Wrapper | Status | Detail |
|---|---|---|
| Criteo | Sellers.json missing | 6 ads.txt entries declared. criteo.com sellers.json was not_found at scan time, so the chain cannot be cryptographically verified end-to-end for any of those 85 bids. |
| The Trade Desk (direct.adsrvr.org) | N/A (DSP-direct) | DSP-direct integration. Endpoint owner is The Trade Desk. Verification scope is different from an SSP path; 36% of bids carry schain. |
| Amazon TAM / UAM | Verified | 16 ads.txt entries verified against aps.amazon.com sellers.json. TAM handles schain server-side so wire-level coverage is expected to read zero. |
| Magnite Fastlane (Rubicon) | Verified | 20 ads.txt entries verified against rubiconproject.com sellers.json. |
| Nativo | Verified | 4 ads.txt entries verified against nativo.com sellers.json. |
| Wunderkind | Verified | 2 ads.txt entries verified against wunderkind.co sellers.json. 100% schain coverage on every bid in the session. |
| Index Exchange | Verified | 20 ads.txt entries verified against indexexchange.com sellers.json. |
| TripleLift | Verified | 20 ads.txt entries verified against triplelift.com sellers.json. |
| Media.net | Verified | 20 ads.txt entries verified against media.net sellers.json. |
| Kargo | Verified | 6 ads.txt entries verified against kargo.com sellers.json. |
| PubMatic OpenWrap | Verified | 20 ads.txt entries verified against pubmatic.com sellers.json. 100% schain coverage. See timing section for why this wrapper produces so few bids. |
6b. Full ads.txt audit via Beamflow.co
The runtime view above only covers what fired in the 5-minute session. The full picture lives in the publisher's ads.txt file itself, which declares every seller authorized to monetize cnn.com inventory. Beamflow.co crawls that file and cross-references every entry against the corresponding SSP's sellers.json. Server response: HTTPS, 30ms response, 2 redirects, text/plain.
1,011 clean · 723 issues
1,734 total entries
sellers.json Verification50% weight
D 65%
Supply Chain Completeness5% weight
F 15%
Syntax Health10% weight
A 100%
Duplicate Detection10% weight
C 84%
File Health15% weight
A 100%
File-level warnings
- ·Missing recommended "contact" variable
- ·High duplicate rate: 278 duplicate records found
SSP verification · 1,734 ads.txt entries checked
1,138
Verified by SSP sellers.json (66%)
506
Unverified (350 not found, 156 DIRECT/RESELLER mismatches)
Buyers cannot verify 506 of 1,734 entries, so some of that supply is likely being bid lower or skipped entirely.
Top problem SSPs
| SSP | Entries | Issues |
|---|---|---|
| freewheel.tvNow FreeWheel | 113 | 119 |
| indexexchange.com | n/a | 25 |
| yahoo.com | n/a | 24 |
| pubmatic.com | n/a | 23 |
| appnexus.com | n/a | 23 |
Top 5 of 151 SSPs with issues. Full list in the live scan.
Operator read
A health score of 69 on a file this size (1,734 entries) is below the Tier-1 publisher median. The expensive number is the 506 entries unverified by SSP sellers.json (29% of the file). On a property at CNN-scale traffic, even a 2-4% bid skip on those paths is real money. The 661 duplicate records and 7 defunct-SSP entries are cosmetic by comparison, but worth deduping on the next ads.txt release. The Supply Chain Completeness F grade and sellers.json Verification D grade are the same gap viewed from two sides.
Machine-fixable categories
Of the 723 issues, the majority are machine-fixable without judgment calls: duplicate records flagged for removal, DIRECT/RESELLER mismatches identified, unverified publisher IDs flagged for review, and defunct SSPs cleared. Categories overlap at the per-entry level so component counts do not sum to a single clean total. Run the live scan for the per-entry breakdown.
7. What this site gets right
Architectural and configuration choices in the CNN.com stack worth copying or benchmarking against.
- 1.
Wunderkind and PubMatic OpenWrap pass schain on 100% of bids (wire-level)
Two wrappers in the stack pass the schain parameter on every bid request fired in the browser: Wunderkind on all 47 of its bids, PubMatic OpenWrap on all 9. That demonstrates the per-wrapper config can be set correctly. The other wrappers may or may not be adding schain server-side (we cannot tell from a wire capture), but where the wire reads zero, the fix lives in per-wrapper config. (See the timing section for a separate issue with PubMatic that makes its 100% schain coverage less useful than it should be in this session.)
- 2.
ads.txt authorization is clean at the publisher level
Of 462 programmatic bids, 377 (82%) verify cleanly against the publisher's ads.txt with zero "not authorized" entries. Earlier captures of CNN properties showed not-authorized counts in the 13-44 range; the current zero is a meaningful improvement. The 18% unverified portion is entirely SSP-side sellers.json gaps (notably Criteo's missing file), not publisher-side ads.txt issues.
8. Findings and open questions
Observations and open questions about the stack, ordered by estimated yield and risk impact.
- 1.
89% bid timeout rate across the session is the headline operational issue
Of 463 bidder-level attempts across the captured session, 412 timed out before a response could land (51 responded inside tmax). Six bidders (TripleLift, Nativo, OpenWeb, Criteo, Kargo, Teads) returned zero measurable responses across the entire 5-minute window. The headline ATF banner slot was attempted by 11 bidders, with only one (The Trade Desk) consistently responding. With one bidder consistently in the auction and ten consistently absent, the slot is not generating competitive price pressure. Per Prebid's documented auction patterns, the most common root cause is auction-start timing relative to ad slot DOM creation (the auction timer starts before slots are defined, so bidders are racing a clock they cannot see). The secondary contributor is per-bidder tmax misconfig (see Finding 2). Both are correctable in the wrapper config. Refined estimate: independent verification in Chrome DevTools (see the new subsection at the end of Section 5) shows ten bidder requests aborting in a tight 1.00-1.04s cluster, which suggests the operative tmax is closer to 1,000ms than the 1,250ms reported in tmaxByWrapper. A tighter failsafeTimeout is likely overriding per-wrapper tmax stack-wide.
- 2.
PubMatic OpenWrap is misconfigured on the wrong tmax shelf
PubMatic's measured p50 latency in this session is 1,236ms. Its configured tmax is 300ms. The result is a 91% bid timeout rate on the wrapper. The 300ms shelf is reasonable for very-fast in-page banner adapters but PubMatic OpenWrap is a managed wrapper that orchestrates a server-side auction with multiple downstream demand sources; its real-world latency budget is closer to 800-1500ms. Ironically, PubMatic is the only wrapper passing schain on 100% of bids in the session, so the schain config is correct, but the timing config makes the schain config moot because no bid lands in time. Fix: move pubmatic.com to the 1250ms shelf, or set a bidder-level override via pbjs.bidderSettings.pubmatic.bidderTimeout = 1250.
- 3.
Schain coverage gap: 9 of 11 wrappers pass it on 0% of wire-level bids
15% of bid requests in the session carry the IAB SupplyChain object (schain) in the wire-level OpenRTB payload. Two wrappers (Wunderkind, PubMatic OpenWrap) pass it on 100% of bids. One (The Trade Desk direct) passes it on 36%. Eight others (Criteo, Magnite, Amazon TAM, Index Exchange, TripleLift, Media.net, Nativo, Kargo) show 0% wire-level. Amazon TAM is a known server-side case, so its zero is expected. For the other seven, the wire-level zero is what the browser-facing bid request shows; server-side behavior is not always public, and some SSPs may add schain on their backend before forwarding to demand. The publisher's correct move is to confirm with each SSP rep what happens server-side, then act on the per-wrapper config gap where it remains. Per Prebid's schain module docs, the global config via pbjs.setConfig({schain: ...}) should be sufficient for most adapter wrappers; for managed wrappers and direct integrations, the config lives in each vendor's own admin UI.
- 4.
Criteo sellers.json was missing at scan time
Criteo fired 85 bids in the session, the highest bid volume of any wrapper. The criteo.com domain returned no sellers.json when the audit ran. That is a Criteo-side problem (the SSP is supposed to publish this file), not a publisher-side problem, but the practical effect is that buyers cannot verify the chain end-to-end for any of those 85 bids. Worth raising with the Criteo account manager and re-scanning periodically because sellers.json availability can flip without notice.
- 5.
Wrapper stack appears geo-segmented between US and international CNN properties
A separate capture on edition.cnn.com (CNN's international property, run during tool development before this issue went to draft) showed a materially different wrapper stack than the one published here. The international property had Sharethrough and The Ozone Project (a UK-focused header bidding consortium) actively participating, neither of which appears on the US property captured for this issue. The US property shows Wunderkind, Media.net, Kargo, TripleLift, Nativo, OpenWeb, and Teads instead. Geo-segmented wrapper configs are common at this publisher size and align with how Ozone in particular is documented. Worth a dedicated follow-up issue covering both properties side by side to characterize the demand-stack split.
9. What an operator should take from this
- ·A timeout rate this high is rarely a single-bidder problem. The first thing to check is whether the auction timer starts before ad slots are defined in the DOM. Prebid's documented pattern is requestBids() inside googletag.cmd.push, then setTargetingForGPTAsync in the bidsBackHandler before googletag.pubads().refresh(). Starting earlier means every bidder races a clock they cannot see.
- ·Per-bidder tmax overrides exist for a reason. If one wrapper consistently runs slower than the global tmax allows, set pbjs.bidderSettings.<bidder>.bidderTimeout = N. Or move the wrapper to a slower tmax shelf. Either way, do not leave a wrapper bidding into a closed door.
- ·Schain is configurable per wrapper. If two wrappers in the same stack pass schain on 100% of bids in the wire-level OpenRTB payload and seven show 0% wire-level, the per-wrapper config is the publisher's lever where the wire shows zero. Some SSPs add schain server-side, so wire-level zero is not the same as end-to-end zero; confirm with each SSP rep before assuming the fix is needed there. The fix when needed lives in pbjs.setConfig({schain}) for adapters and in each vendor's admin UI for managed wrappers and direct integrations.
- ·A wire-level capture counts integration surfaces fired in the browser, not buyers competing in the auction. A single wrapper call can route to dozens of demand sources. Schain coverage and bid timeout rate are the measurable things at this level.
- ·A missing sellers.json on the SSP side breaks chain verification even when the publisher's ads.txt is clean. The publisher cannot fix this directly. Raising it with the SSP rep is the path.
- ·Run the Beamflow Chrome extension on your own site as a starting point. If your bid timeout rate is over 50%, the problem is upstream of any specific bidder and the fix is in the wrapper config, not in any individual SSP integration.
Related from MonetizationGuy
Running a prebid stack on a real publisher?
If your site has a comparable wrapper setup and you want a full audit, not just a wire capture but a real walk-through of your prebid.js config, schain coverage, bid timeout rate, and supply chain health, the free 30-minute call is the starting point.
Or run the Beamflow Chrome extension on your own site as a starting point. The capture takes two minutes and the schain coverage and timeout views are the same data this teardown was built on.
Book a Free 30-Min Call