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.

By Guy Alon··~12 min read

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.

WrapperTypeRoutes toBidsSchain
CriteoPrebid adapterCriteo's commerce + display demand850/85 (0%)
The Trade Desk (direct.adsrvr.org)Direct integrationThe Trade Desk DSP (buyer-side direct integration)7427/74 (36%)
Amazon TAM / UAMManaged wrapperAmazon Publisher Services full TAM bidder list (handled server-side)600/60 (0%)
Magnite Fastlane (Rubicon)Prebid adapterMagnite's exchange + Marketplace + Streaming480/48 (0%)
NativoDirect integrationNativo's native + display demand470/47 (0%)
WunderkindDirect integrationWunderkind's demand pool4747/47 (100%)
Index ExchangeDirect integrationIndex Exchange marketplace demand470/47 (0%)
TripleLiftPrebid adapterTripleLift's native + display + video demand450/45 (0%)
Media.netDirect integrationMedia.net demand (Yahoo-aligned partnership)410/41 (0%)
KargoDirect integrationKargo's contextual + mobile-first demand330/33 (0%)
PubMatic OpenWrapManaged wrapperPubMatic exchange + OpenBidding partners99/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%.

Criteo
0%
The Trade Desk (direct.adsrvr.org)
36%
Amazon TAM / UAM
0%
Magnite Fastlane (Rubicon)
0%
Nativo
0%
Wunderkind
100%
Index Exchange
0%
TripleLift
0%
Media.net
0%
Kargo
0%
PubMatic OpenWrap
100%

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.

Responses Timeouts
TripleLift
45
100%
Nativo
42
100%
OpenWeb
38
100%
Criteo
31
100%
Kargo
29
100%
Teads
12
100%
PubMatic
4
40
91%
IX
12
69
85%
Rubicon
8
42
84%
Medianet
10
38
79%
TTD
17
26
60%

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

WrappertmaxSamplesNote
criteo.com1250ms85
adsrvr.org (TTD)1250ms74
nativo.com1250ms47
wunderkind.co300ms47Wunderkind uses a non-Prebid integration path; the 300ms shelf does not cause its bids to time out.
pubmatic.com300ms9Misconfig. 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.

Responses on this slot Timeouts on this slot
IX
0 / 24
TripleLift
0 / 14
OpenWeb
0 / 14
Nativo
0 / 14
PubMatic
0 / 14
Medianet
0 / 14
Rubicon
0 / 14
Kargo
0 / 13
TTD
10 / 21
Criteo
0 / 10
Teads
0 / 6

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. 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. 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.

Chrome DevTools Network panel during a www.cnn.com page load. Ten bidder requests show status 'canceled' at ~1 second with 0 bytes returned. GAM's ad request fires later at 1.86s. Kargo's own client-side telemetry endpoint logs a timeout event back to its servers.
Chrome DevTools Network panel during a www.cnn.com page load. Ten bidder requests aborted at ~1 second by Prebid's tmax timer (all status: 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 canceled at 1.00-1.04s with 0kB returned. That cluster is the network-layer signature of Prebid's bidTimeout event firing. It is also tighter than the 1,250ms tmax shown in tmaxByWrapper, which suggests a separate failsafeTimeout at ~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/event is Kargo's client-side ping back to its own servers, and the URL parameter is literally named timeout. 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:2 as its initiator. The ant prefix 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

WrapperStatusDetail
CriteoSellers.json missing6 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 / UAMVerified16 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)Verified20 ads.txt entries verified against rubiconproject.com sellers.json.
NativoVerified4 ads.txt entries verified against nativo.com sellers.json.
WunderkindVerified2 ads.txt entries verified against wunderkind.co sellers.json. 100% schain coverage on every bid in the session.
Index ExchangeVerified20 ads.txt entries verified against indexexchange.com sellers.json.
TripleLiftVerified20 ads.txt entries verified against triplelift.com sellers.json.
Media.netVerified20 ads.txt entries verified against media.net sellers.json.
KargoVerified6 ads.txt entries verified against kargo.com sellers.json.
PubMatic OpenWrapVerified20 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.

69Health

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%

· 506 severe· 217 cleanup

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

SSPEntriesIssues
freewheel.tvNow FreeWheel113119
indexexchange.comn/a25
yahoo.comn/a24
pubmatic.comn/a23
appnexus.comn/a23

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. 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. 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. 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. 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. 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. 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. 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