Ad Context Protocol on the Sell Side: Turning Page Semantics Into Bid Boosters
Context has become the most reliable performance primitive in programmatic when identifiers are constrained, consent is conditional, and signal entropy is rising. Yet on the sell side, context is still mostly a loose collection of key-values, vendor tags, and free-form metadata that rarely maps cleanly into OpenRTB or buyer decisioning. This article proposes a practical framework we will call the Ad Context Protocol - a layered, sell-side-first approach to turning page, app, and CTV semantics into standardized, privacy-safe, and verifiable signals that buyers can price against. The aim is not to invent a new standard from scratch, but to align and operationalize what already exists across IAB Tech Lab taxonomies, OpenRTB, and Prebid while adding the operational glue publishers and SSPs actually need. We will unpack the business case, the data architecture, suggested schemas and examples, how to measure impact, and how to keep the system privacy-forward and future-proof for web, app, and CTV.
Why a Protocol for Context Now
Two structural shifts make a sell-side context protocol urgent:
- Privacy and platform changes keep deprecating or constraining identity signals across web and mobile. Interest-based alternatives like Topics API are broad and buyer controlled, so sellers must maximize the high-fidelity signals only they can produce. :cite[ib5,iih]
- Buyer trust and transparency expectations have tightened. Ads.txt, sellers.json, and SupplyChain object started the supply transparency era. The next wave is data transparency and provenance for the non-identity signals sellers provide. :cite[flz,dsw,ffc]
Context travels with the impression. Done right, it raises bid density, improves CPMs, and reduces brand safety friction without relying on personal data. But the sell side needs a consistent way to capture, normalize, and transmit it at auction time.
What We Mean By “Ad Context Protocol”
The Ad Context Protocol (ACP) is a pragmatic blueprint publishers and SSPs can adopt to turn raw page semantics and media context into bid-ready signals. It is not a new standard. It is an operational layer anchored to existing standards with four pillars:
- Signal Layers: Define a layered set of context signals that are maximally useful to buyers - content taxonomy, entities, tone, format and placement, quality, safety and suitability, regional compliance flags - across web, app, and CTV.
- Normalization: Map those signals to IAB Tech Lab taxonomies and OpenRTB fields consistently, with a small, well-defined extension where necessary. :cite[a41,ekx]
- Data Transparency: Attach provenance - who computed the signal, method, last updated, and confidence - following IAB Tech Lab’s Data Transparency guidance and SDA conventions where applicable. :cite[cu0,as7]
- Operational Guardrails: Enforce privacy-by-design, limit payload bloat, and support fallback behavior under consent limits and per-seller policy.
If you are an SSP, ACP gives you a repeatable ingestion and packaging pipeline that makes your inventory more explorable and more priceable. If you are a publisher, ACP tells you exactly how to annotate your inventory so demand can capitalize on your context without custom work.
The Business Case: Turning Semantics Into Bid Boosters
Buyers do not bid higher because a site has more metadata. They bid higher when metadata is:
- Consistent: Same taxonomy values across supply paths, time, and devices.
- Actionable: Easily mapped to DSP line items, contextual models, and brand safety tools.
- Trustworthy: Verifiable source and method with predictable coverage.
Done right, ACP unlocks three levers:
- Bid density: More qualified bids per impression when buyers can positively target content topics, tone, format, or show-level context in CTV with low friction.
- CPM lift: Stronger competition on inventory that matches advertiser suitability plus intent-aligned topics without having to exclude entire domains.
- Deal velocity: Faster packaging into curated deals and SDA-like constructs where sellers define and expose meaningful, privacy-safe cohorts based on context. :cite[ctt,ekh]
Standards That ACP Leans On
ACP is a translation and packaging exercise. The most relevant building blocks already exist:
- IAB Tech Lab Content Taxonomy 3.x - the common language for content categorization and suitability signals. :cite[ekx,duj]
- OpenRTB 2.6 - canonical transport with CTV-aware features and broad ext support. :cite[a41,c5u]
- Seller Defined Audiences / Curated Audiences - a path to publish seller-defined groups with Data Transparency descriptors. :cite[ctt,as7]
- Data Transparency Standards - guidance for disclosing data provenance and quality. :cite[cu0]
- GARM Brand Safety and Suitability - common risk vocabulary aligned with Tech Lab taxonomy mappings. :cite[yur,uaz]
- ads.txt, sellers.json, SupplyChain (schain) - supply transparency foundations that ACP complements at the signal level. :cite[flz,dsw,ifr]
- Prebid RTD Modules - a practical way to collect and attach context in header bidding flows. :cite[d1e,a9i]
- Google Publisher Provided Signals - a conduit for key-value mapping in GAM workflows. :cite[bfd,elq]
The Signal Layers: What To Collect And Why
Think of ACP as five layers that can be computed on-device, at the edge, or server-side depending on the app surface and latency budget.
1) Core Content Semantics
- IAB Content Taxonomy categories at two depths, with confidence scores. :cite[ekx]
- Named entities - brands, products, people, locations - normalized to a namespace your buyers understand.
- Keywords - normalized and deduplicated, limited to the top N by TF-IDF or similar.
- Tone and sentiment - when relevant to categories like news, sports, or reviews.
Example payload:
{ "content": { "cat": ["IAB1-5", "IAB8-3"], "context": 1, "keywords": "premier league, match highlights, liverpool, manchester city", "data": [{ "name": "entities", "segment": [ {"name": "Liverpool FC", "id": "ent:org:lfc", "ext": {"type": "organization", "conf": 0.92}}, {"name": "Manchester City", "id": "ent:org:mcfc", "ext": {"type": "organization", "conf": 0.90}} ] }, { "name": "tone", "segment": [{"name": "positive", "ext": {"conf": 0.76}}] }] } }OpenRTB-compatible fields used here include
site.content.cat,site.content.context,site.content.keywords, andsite.content.data[]. :cite[a41]2) Media and Placement Context
- Format - article, gallery, video, live stream, podcast, CTV show or episode metadata.
- Placement - in-article mid, sidebar, sticky, instream pre-roll, CTV pod position.
- Player attributes for video - duration, live vs VOD, sound, viewability target.
These can live in
imp.*andimp.ext, as well assite.content.videoorapp.contentanalogs in OpenRTB.{ "imp": [{ "id": "1", "banner": {"pos": 3}, "ext": { "adcontext": { "format": "article", "placement": "in-article-mid", "viewability_target": 70 } } }] }OpenRTB allows extensions on any object for exchange-specific needs. :cite[a41]
3) Quality and Safety Context
- GARM-aligned floor and suitability scores derived from content analysis. :cite[uaz,yur]
- Page quality indicators - core web vitals tiers, ad clutter score, invalid traffic risk reduction applied.
- Publisher safety allowlist context - custom classifications from editorial policy.
4) Privacy and Compliance Metadata
- Jurisdiction and consent state flags for GDPR and CPRA.
- Processing mode - on-device only vs server processed.
- Data minimization level - indicate when sensitive categories are suppressed.
This informs downstream enforcement and buyer trust, not targeting logic.
Official sources outlining the regulatory scope: GDPR legal framework and CPRA regulations. :cite[iai,mmn]
5) Provenance and Transparency
- Who computed the signal - first party, SSP, or third party provider.
- Method and model version - e.g., “taxonomy-v3.0 rule-based plus ML v0.8.”
- Timestamp and TTL - when computed and how long to consider fresh.
- Confidence and coverage - per field.
Data Transparency Standards encourage this level of meta for buyer trust. :cite[cu0]
Proposed Packaging: Minimal Schema Overlay
ACP recommends using native OpenRTB fields wherever available, and a single namespaced extension for what is not cleanly represented. For example:
{ "site": { "domain": "sportsnews.example", "page": "https://sportsnews.example/premier-league-highlights", "content": { "cat": ["IAB1-5","IAB8-3"], "context": 1, "userrating": 4, "livestream": 0, "keywords": "premier league, match highlights, liverpool, manchester city", "data": [{ "name": "entities", "ext": {"source": "publisher", "method": "nlp-v0.8", "ts": 1730697600}, "segment": [{"id":"ent:org:lfc"},{"id":"ent:org:mcfc"}] }] } }, "imp": [{ "id":"1", "banner":{"pos":3}, "ext":{ "adcontext":{ "format":"article", "placement":"in-article-mid", "suitability":{"garm_floor":"safe","adult":"excluded"}, "provenance":{"by":"publisher","conf":0.86,"ttl_ms":600000} } } }], "regs":{"coppa":0}, "source":{"ext":{"schain":{/* SupplyChain here */}}} } site.content.*holds most content semantics.imp.ext.adcontextis a compact overlay for placement and suitability specifics.source.ext.schainremains the canonical supply transparency element. :cite[dsw] For app and CTV, useapp.contentorsiteanalogs and CTV-specific OpenRTB 2.6 fields for podding and duration. :cite[c5u]CTV and Mobile: Context Without the Page
Context in app and CTV requires different anchors:
- Mobile App: screen type, section identifiers, content feed topic mix, SDK event context, and IAB Content Taxonomy classification at the view level.
- CTV: channel/app, show, season, episode, rating, genre, live vs VOD, pod position, and ad break duration. OpenRTB 2.6 includes several CTV-friendly elements for these constructs. :cite[c5u]
In both cases, the ACP overlay remains the same. Only the extraction method changes.
Where ACP Meets Seller Defined Audiences
Seller Defined Audiences were designed to let sellers package first-party audience and context in a standardized way, with transparency descriptors that help buyers evaluate quality. For many publishers, the quickest bridge between free-form context and buyer demand is to publish a small set of context-derived SDA segments alongside raw context fields. :cite[as7,ctt] Example mapping:
{ "user": { "data": [{ "name": "sda", "ext": { "dtd": { "tax": "https://iabtechlab.com/standards", "source": "publisher", "descr": "Context-derived sports enthusiasts", "audTax": "IABTL-Audience-Taxonomy-1.1" } }, "segment": [ {"id":"pub:sda:sports-enthusiast:001","ext":{"qual":0.82,"ttl":86400}} ] }] } }- These are not user profiles. They are ephemeral, context-derived audience definitions with transparency descriptors that buyers can evaluate and price. :cite[cu0]
How Publishers and SSPs Implement ACP
Option A: Publisher-led via Header Bidding and Ad Server Keys
If you control templates and header bidding, start collecting, normalizing, and attaching context signals before the auction begins. Prebid.js example using ORTB2 setConfig and a lightweight in-page semantic parser:
<script> // Minimal semantic extraction example function extractSemantics() { const ld = [...document.querySelectorAll('script[type="application/ld+json"]')] .map(s => { try { return JSON.parse(s.textContent); } catch(e) { return null; }}) .filter(Boolean); const keywords = [...new Set( (document.querySelector('meta[name="keywords"]')?.content || '') .split(',').map(k => k.trim().toLowerCase()) .filter(Boolean) )].slice(0, 10); return { content: { cat: ["IAB1-5"], // Map with your service to Content Taxonomy 3.x context: 1, keywords: keywords.join(', '), data: [{ name: "entities", segment: (ld[0]?.about || []).slice(0,5).map(a => ({ name: a.name || a })) }] } }; } window.pbjs = window.pbjs || {que: []}; pbjs.que.push(function() { const semantics = extractSemantics(); pbjs.setConfig({ ortb2: { site: { content: semantics.content } } }); }); </script> - For Google Ad Manager, map a concise subset into key-values or Publisher Provided Signals. Keep the namespace stable and limit values to keep line items tractable. :cite[elq,bfd]
GAM key-values example:
// In your ad tag integration googletag.cmd.push(function() { var slot = googletag.defineSlot('/1234/homepage', [300,250], 'div-gpt-ad') .addService(googletag.pubads()); // Context keys googletag.pubads().setTargeting('ctx_cat', ['IAB1-5','IAB8-3']); googletag.pubads().setTargeting('ctx_format', ['article']); googletag.pubads().setTargeting('ctx_suit', ['safe']); googletag.enableServices(); });Option B: SSP-led via Server Normalization
SSPs can ingest raw signals via Prebid ORTB2, ad server macros, or SDK callbacks, then normalize into consistent OpenRTB fields and a compact
imp.ext.adcontextoverlay. Node-like pseudocode for the normalization microservice:import { mapToIABv3, scoreSuitability, prune } from './context-lib.js'; export async function enrichBidRequest(raw) { const ctx = raw.site?.content || {}; const norm = { site: { ...raw.site, content: { ...ctx, cat: mapToIABv3(ctx.cat, ctx.keywords), data: prune(ctx.data, {maxSegments: 12}) } }, imp: raw.imp.map(imp => ({ ...imp, ext: { ...imp.ext, adcontext: { format: inferFormat(raw), placement: inferPlacement(imp), suitability: scoreSuitability(raw.site?.page), provenance: { by: 'ssp', conf: 0.8, ttl_ms: 600000 } } } })) }; return norm; }Keep the overlay small. Buyers should not receive an unbounded blob.
Data Architecture: Ingestion to Delivery
An ACP-aligned pipeline is straightforward:
- On-device collection: DOM parsing, JSON-LD harvesting, SDK event capture, CTV app metadata. Respect consent and suppress sensitive categories automatically.
- Edge normalization: Normalize taxonomies, compute suitability, prune to size limits, and attach provenance.
- Transport: Use OpenRTB 2.6 fields wherever possible plus the minimal `imp.ext.adcontext` overlay.
- Feedback loop: Capture bid responses and win prices tagged by signal presence to measure lift, then iterate on extraction and pruning.
Latency budget: 15 to 30 ms for enrichment at the edge is achievable with precomputed classifiers and caching. For CTV server-side ad insertion, precompute context at content ingestion time.
Privacy, Compliance, and Safety
ACP is intentionally identity-agnostic. That said, contextual data can imply sensitive categories. Treat it with the same diligence:
- GDPR scope: Context signals that cannot reasonably be linked to a person are not personal data, but avoid combining with identifiers without a lawful basis. :cite[iai]
- CPRA: Avoid creating or sharing inferences about individuals as persistent profiles unless you have a clear basis and opt-out mechanisms where required. :cite[mmn]
- Sensitive categories: Rely on IAB Content Taxonomy v3.x sensitive labels and suppress or generalize per policy. :cite[ekx]
- On-device first: Prefer on-device computation with ephemeral outputs, limiting server processing to normalized labels with short TTLs.
- Data Transparency descriptors: When you publish any audience-like constructs, include the who, what, and how of the data. :cite[cu0]
Measuring Whether ACP Works
Treat ACP like an optimization product. Build evidence:
- Design: 10 to 20 percent traffic holdout without ACP signals, balanced by placement and demand source.
- KPIs: Bid rate, unique bidder count, top quartile CPM, win rate, match rate to buyer brand suitability, and page RPM.
- Attribution: Use deal IDs or ext markers to separate ACP’s impact from other changes.
- Quality: Monitor timeouts and payload size to ensure no regression in auction latency.
Simple SQL-style analysis:
SELECT has_acp, COUNT(*) as auctions, AVG(bid_rate) as avg_bid_rate, AVG(cpm) as avg_cpm, AVG(bidders) as avg_bidders FROM auction_metrics_by_request GROUP BY has_acp;Common Pitfalls And How To Avoid Them
- Signal bloat: Sending every keyword and entity hurts latency and buyer parsing. Cap each list and stick to your top confidence signals.
- Taxonomy drift: Mixing 2.x and 3.x category IDs creates confusion. Pick one, preferably 3.x, and publish a mapping file. :cite[ekx]
- Ambiguous ownership: If multiple parties add signals, provenance becomes critical. Use `provenance.by` and avoid double enrichment.
- CTV metadata gaps: Fill in show, episode, and pod metadata at content ingest rather than during ad decisioning to prevent misses.
- Buyer education gap: Draft a one-page buyer guide showing fields, examples, and how to target in common DSPs.
How This Aligns With Topics API And Publisher Provided Signals
ACP is complementary:
- Topics API offers buyer-controlled, privacy-preserving broad interests on Chrome. ACP offers seller-controlled, surface-specific semantics that are precise and transportable across browsers and environments. :cite[ib5]
- Publisher Provided Signals help GAM buyers leverage first-party and contextual signals via key-values. ACP gives you a disciplined input set to feed PPS with confidence and consistency. :cite[bfd,elq]
Red Volcano’s Role: Intelligence That Accelerates ACP
Red Volcano specializes in supply intelligence across web, app, and CTV. Three immediate contributions stand out:
- ACP Readiness Scoring: Audit sites and apps for taxonomy usage, metadata richness, Prebid RTD usage, and latency impact. Score coverage and recommend fixes by template or SDK.
- Normalization Maps: Maintain living maps for Content Taxonomy 2.x to 3.x, entity namespaces, and placement schemas by CMS and app frameworks. :cite[a31]
- Buyer-facing Diagnostics: Surface which domains, apps, and CTV channels ship reliable ACP signals, how fresh they are, and which SSPs preserve them in OpenRTB. This creates immediate commercial leverage for sellers and exchanges.
Implementation Cookbook: A 90-Day Plan
Here is a staged approach that SSPs and publishers can adopt with finite resources.
Days 0–30: Baseline And Schema
- Inventory audit: Sample top 1000 pages or top 100 app screens for semantic extractability and latency impact.
- Schema lock: Commit to IAB Content Taxonomy 3.x and the minimal `imp.ext.adcontext` overlay. :cite[ekx]
- Prototype extractor: Build a template-aware parser for keywords, JSON-LD, and headings. Use a simple model for tone.
- Prebid and GAM wiring: Wire ORTB2 and key-values for a short list of signals. :cite[d1e,elq]
Days 31–60: Normalization And Pilot
- Edge normalization: Add pruning and mapping functions. Attach provenance and confidence.
- SDA alignment: Publish 3 to 5 context-derived SDA segments with Data Transparency descriptors where a buyer workflow needs it. :cite[as7,cu0]
- Pilot deals: With two DSP partners, set up contextual PMPs and measure bid rate and CPM lift.
- CTV templates: For at least one CTV app, instrument show, episode, and pod metadata.
Days 61–90: Scale And QA
- Coverage SLAs: Target 85 percent of impressions with non-empty Content Taxonomy and placement context attached.
- Buyer docs: Publish a one-pager mapping signals to DSP controls and brand suitability tools.
- Automated QA: Nightly checks for taxonomy validity, payload size, and stale timestamps.
- Feedback loop: Segment performance by signal group to identify the highest ROI fields to keep or expand.
Frequently Asked Technical Questions
What is the best place to put placement-level signals?
If available in native fields, use them. Otherwise, constrain them to a small namespaced extension such as
imp.ext.adcontext. This keeps buyer parsing simple while staying within OpenRTB’s extension model. :cite[a41]How big is too big?
Aim for under 2 KB incremental per impression for ACP signals. Favor short IDs over verbose strings. Prune keywords and entities aggressively.
Can ACP work without cookies or MAIDs?
Yes. ACP is identity-agnostic by design. The value is derived from content and media semantics, not individuals.
How does ACP intersect with brand safety vendors?
ACP does not replace them. It accelerates their performance by providing consistent inputs and provenance, and by adopting GARM-aligned labels that keep everyone on the same page. :cite[uaz,yur]
Example: Minimal JSON Schema For adcontext Overlay
{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "adcontext", "type": "object", "properties": { "format": {"type": "string", "enum": ["article","video","gallery","live","podcast","ctv"]}, "placement": {"type": "string", "maxLength": 64}, "suitability": { "type": "object", "properties": { "garm_floor": {"type":"string","enum":["safe","risky","excluded"]}, "adult": {"type":"string","enum":["included","excluded"]} } }, "provenance": { "type": "object", "properties": { "by": {"type":"string","enum":["publisher","ssp","thirdparty"]}, "conf": {"type":"number","minimum":0,"maximum":1}, "ttl_ms": {"type":"integer","minimum":0} }, "required": ["by","conf"] } }, "required": ["format","provenance"], "additionalProperties": false }This keeps the overlay small and predictable.
A Note On Evidence And Claims
It is easy to publish a case study that says “context drove 20 percent CPM lift.” Real effects vary by vertical, buyer mix, and how consistently signals flow across your supply paths. Design controlled experiments, expose Data Transparency descriptors, and make it easy for buyers to reason about your signals. Also keep a close eye on OpenRTB and IAB Tech Lab updates, especially around ID provenance, AdCOM updates, and contextual taxonomies. :cite[bn1,bzw,ekx]
Conclusion
Context has graduated from nice-to-have to a primary currency in advertising. The sell side has a unique responsibility and opportunity to shape that currency into consistent, verifiable, and privacy-forward signals that buyers can price without heavy lifting. The Ad Context Protocol outlined here is not a new spec. It is a disciplined way to use the specs we already have, to operationalize semantics across web, app, and CTV, and to do it in a way that improves bid density and CPMs without identity gymnastics. If you are a publisher, start with your top templates or app screens, lock a taxonomy and schema, and wire the signals into header bidding and your ad server. If you are an SSP, deploy a low-latency normalization service that preserves semantics faithfully and proves provenance. If you are a data intelligence partner like Red Volcano, shine a light on who is doing this well, where the gaps are, and what buyers can expect. The market is not waiting. The sellers who make their context signals easy to consume will win the next wave of demand.
References
- IAB Tech Lab - Content Taxonomy 3.x — https://iabtechlab.com/standards/content-taxonomy/ — accessed Nov 4, 2025 :cite[ekx]
- IAB Tech Lab - OpenRTB 2.6 Specification (PDF) — https://iabtechlab.com/wp-content/uploads/2022/04/OpenRTB-2-6_FINAL.pdf — accessed Nov 4, 2025 :cite[a41]
- IAB Tech Lab - Taxonomy and Data Transparency Standards supporting Seller Defined Audiences — https://iabtechlab.com/wp-content/uploads/2022/02/IAB-Tech-Lab-Taxonomy-and-Data-Transparency-Standards-to-Support-Seller-defined-Audience-and-Context-Signaling.pdf — accessed Nov 4, 2025 :cite[cu0]
- IAB Tech Lab - Sellers.json and SupplyChain Object — https://iabtechlab.com/sellers-json/ — accessed Nov 4, 2025 :cite[dsw]
- IAB Tech Lab - Implementation Guide for Brand Suitability with Content Taxonomy — https://iabtechlab.com/wp-content/uploads/2020/12/Implementation_Guide_for_Brand_Suitability_with_IABTechLab_Content_Taxonomy_2-2.pdf — accessed Nov 4, 2025 :cite[yur]
- WFA GARM - Brand Safety Floor and Suitability Framework — https://wfanet.org/knowledge/item/2022/06/17/GARM-Brand-Safety-Floor--Suitability-Framework-3 — accessed Nov 4, 2025 :cite[uaz]
- Google Privacy Sandbox - Topics API — https://privacysandbox.com/intl/en_us/proposals/topics/ — accessed Nov 4, 2025 :cite[ib5]
- Google Ad Manager - Publisher Provided Signals overview — https://support.google.com/admanager/answer/12451124 — accessed Nov 4, 2025 :cite[elq]
- IAB Tech Lab - OpenRTB page and CTV updates — https://iabtechlab.com/standards/openrtb/ — accessed Nov 4, 2025 :cite[c5u]
- IAB Tech Lab - ID Provenance Added to OpenRTB — https://iabtechlab.com/id-provenance-added-to-openrtb/ — accessed Nov 4, 2025 :cite[bn1]
- IAB Tech Lab - Updates to OpenRTB for Public Comment — https://iabtechlab.com/updates-to-openrtb-for-public-comment/ — accessed Nov 4, 2025 :cite[bzw]
- EUR-Lex - GDPR legal text — https://eur-lex.europa.eu/eli/reg/2016/679/oj/eng — accessed Nov 4, 2025 :cite[iai]
- CPPA - CCPA Regulations (Final) — https://cppa.ca.gov/regulations/pdf/20230329_final_regs_text.pdf — accessed Nov 4, 2025 :cite[mmn]
- IAB Tech Lab - Content 1.0 to 2.0 Mapping — https://iabtechlab.com/content-1-0-to-content-2-0-mapping-officially-released/ — accessed Nov 4, 2025 :cite[a31]