Available at AdCP 3.2. Every Apostra storefront advertises AdCP 3.2 beside
3.1 (and 3.0, except adapter-backed sales storefronts). Pin
adcp_version: "3.2" to send targeting_overlay.demographics
and read targeting_resolution.demographics. A request that pins 3.0 or 3.1
is served at that release, which has no demographic-targeting field. See
AdCP versioning and negotiation.Overview
AdCP 3.2 promotes demographic targeting from a platform extension to a first-class capability. Platforms that support it declaredemographic_targeting
directly on their products. Buyers express a demographic intent in
targeting_overlay.demographics when creating a media buy, and the platform
confirms the exact execution in targeting_resolution.demographics on the
response.
Demographic targeting is distinct from the exact-age-targeting brief used
during product discovery. The discovery brief filters which products match; the
targeting_overlay.demographics request writes a targeting constraint into the
resulting media buy.
At AdCP 3.2, demographic overlays are accepted on create_media_buy for every
platform in the support table below. On update_media_buy, behavior differs by
platform:
Legacy AdCP 3.0 / 3.1 update calls that send
targeting_overlay.demographics are refused with a 400
UNSUPPORTED_TARGETING_DIMENSION on every platform.
Supported platforms
The following platforms advertise demographic targeting capability via AdCP 3.2:
A product that does not carry
demographic_targeting does not support this
path — submit a targeting overlay with demographics against such a product and
the request is rejected.
How to use
1. Discover products with demographic targeting
Request products as usual. The product response will include ademographic_targeting object when the platform supports it, describing the
supported age bounds and bucket structure. Meta (age only) and Spotify
(age and gender) already accept demographic changes on update_media_buy.
Once activated, TikTok will too; Google, Snap, and Pinterest will reject
demographic updates and require a delete+recreate to change the demographic
constraint.
Spotify also accepts targeting_overlay.demographics.gender: send
values: ["female"] or ["male"] to restrict to Women or Men, on both
create_media_buy and update_media_buy. Reaching Spotify’s “All” (no
restriction) differs by call: on create_media_buy, omitting gender
entirely means All, since there is no prior restriction to preserve. On
update_media_buy, omitting gender leaves whatever gender restriction
the ad set already has unchanged — it does not clear it — so clearing an
existing restriction back to All on update requires explicitly sending
values: ["female", "male"] with include_unknown: true. non_binary is
not supported on Spotify (alone or combined with another value);
include_unknown: true is rejected once values restricts to a single
gender; and values: ["female", "male"] is rejected unless paired with
include_unknown: true — Spotify’s “All” reaches non-binary and
unknown-gender listeners too, so naming both known genders without
include_unknown: true would ask Spotify to exclude listeners it cannot
exclude. No other platform in this guide accepts demographics.gender
yet.
2. Express a demographic intent
Passtargeting_overlay.demographics in your create_media_buy request with
an age constraint:
The platform validates that the requested range maps exactly to its native
bucket structure. A range that cuts through a bucket, or a closed maximum that
the platform represents as open-ended (such as
65+ on Google or TikTok), is
rejected rather than silently broadened.
3. Confirm the resolution
The media-buy response includestargeting_resolution.demographics describing
how the intent was executed, and returns the effective
targeting_overlay.demographics applied to the package:
targeting_resolution.demographics.execution to verify the platform
execution path, and compare requested, applied, and equivalent before
treating the buy as active.
Unknown-age users
Some platforms can deliver to users whose age is unknown. Support varies:- Meta and Google: Support
include_unknown: true. Users with unknown age are included only when you setinclude_unknown: true; setinclude_unknown: falseto exclude them. - Snap, Spotify, TikTok, Pinterest: Cannot include users with unknown age
when an age constraint is active. Pass
include_unknown: falsefor these platforms.
include_unknown: true sent to a platform that cannot honor it is
rejected. The platform reports the unsupported combination in the error rather
than silently excluding unknown-age users.
Relationship to exact-age targeting in product discovery
Exact age targeting during discovery, documented in Exact Age Targeting, controls which products are returned — it is a filter, not a commitment. Storefronts on the Storefront-built or Agent-supplied path read it fromtargeting_overlay.demographics.age on an
AdCP 3.2 get_products request; built-in platform adapters still read one exact
range from the brief. The targeting_overlay.demographics field in create_media_buy is
the commitment: it writes the constraint into the media buy and is confirmed by
targeting_resolution.demographics. Both paths use the same platform support
table and the same exact-match rule — no silent broadening on either surface.
Demographic updates through update_media_buy are accepted on TikTok
and Spotify (recompiled against the product’s declared capability); Google,
Snap, and Pinterest reject demographic updates and require a delete+recreate
to change the demographic constraint. Meta accepts an age change only.
AdCP 3.2 reference
Demographic targeting as a first-class capability (not an EXT extension) is defined in the AdCP 3.2 specification. Earlier protocol versions carry age targeting through platform-specific extension fields and do not populatedemographic_targeting, targeting_overlay.demographics, or
targeting_resolution.demographics.