Skip to content

RFC: standard ad-tech targeting dimensions (os, browser, media_type, custom, key_value_pairs) #4239

@bokelley

Description

@bokelley

Background

Every major ad server (GAM, Kevel, Xandr, Triton, FreeWheel) supports five targeting dimensions that AdCP TargetingOverlay does not yet expose. Adopters carry these as local extensions on their internal targeting class, which means spec-conformant buyer agents cannot use them — defeating the point of having them.

device_type/device_type_exclude already landed as the precedent. This RFC bundles five sibling dimensions into one proposal modeled on it.

Proposed additions to TargetingOverlay

Field Shape Notes
os / os_exclude list[str] OS name (iOS, Android, Windows, …). Distinct from existing device_platform.
browser / browser_exclude list[str] Chrome, Safari, Firefox, …
media_type / media_type_exclude list[str] Display, video, audio, native, DOOH. (Distinct from format-level constraints.)
custom dict[str, list[str]] Free-form publisher-specific key-value targeting. Required for GAM customTargeting parity.
key_value_pairs dict[str, str] Managed-only injection (similar in shape to AXE-style segment annotations). Spec already defines 'key_value' as an ActivationKey.type literal in signals — concept is recognized.

Use case (real)

salesagent (Prebid AdCP reference implementation) carries all five locally. Filed as part of stale-annotation cleanup PR bokelley/salesagent#208 — the migration path is to use ext.salesagent.<field> until this lands, then move to spec.

Open questions

  • custom shape — flat dict vs. nested? The dict-of-list shape covers the common "key in (a, b, c)" predicate; richer expressions could go through a future signals path.
  • key_value_pairs access control — should it be marked managed-only on TargetingOverlay (e.g., overlay vs. server-only) or always-overlay?
  • Naming — happy to align with whatever bikeshed shape lands.

Filing as RFC. Happy to iterate.

Metadata

Metadata

Assignees

No one assigned

    Labels

    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.media-buyIssue concerns the media-buy protocol domainneeds-wg-reviewBlocked on a working-group decision — surface in WG meeting agendasrfcProtocol change — auto-adds to roadmap boardschemaJSON Schema source-of-truth: definitions, codegen artifacts, validation, hygiene

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions