> ## Documentation Index
> Fetch the complete documentation index at: https://docs.interchange.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Demographic Targeting

> Preview of the AdCP 3.2 age-audience targeting surface. Not yet available on the public API.

<Warning>
  **Not yet available.** This page previews the AdCP 3.2 demographic-targeting
  surface after its future public activation. Every Scope3 storefront and buyer
  endpoint currently negotiates AdCP 3.0 or 3.1 only; a `create_media_buy`
  request that carries `targeting_overlay.demographics` today is rejected before
  any adapter is contacted. Public exposure is tracked under
  [AI-7862](https://linear.app/scope3-projects/issue/AI-7862) and will be
  announced through the release channel and this page's status header when
  it opens.
</Warning>

## Overview

AdCP 3.2 promotes demographic targeting from a platform extension to a
first-class capability. Platforms that support it declare `demographic_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.

Once the AdCP 3.2 surface is activated for public buyers, demographic
overlays will be accepted on `create_media_buy` for every platform in the
support table below. On `update_media_buy`, behavior differs by platform:

| Platform  | Update behavior once activated                                                                                                                                                                                                                       |
| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| TikTok    | Accepts demographic changes on AdCP 3.2. The age intent is recompiled against the product's declared capability, new provider intervals are layered onto the existing geo/audience state, and the platform receives the change in a single mutation. |
| Spotify   | Accepts demographic changes on AdCP 3.2. Same recompile-and-layer semantics as TikTok.                                                                                                                                                               |
| Meta      | Rejects `targeting_overlay.demographics` on `update_media_buy` regardless of protocol version. Delete-and-recreate is the only way to change the demographic constraint.                                                                             |
| Google    | Rejects `targeting_overlay.demographics` on `update_media_buy` regardless of protocol version. Delete-and-recreate is the only way to change the demographic constraint.                                                                             |
| Snap      | Rejects `targeting_overlay.demographics` on `update_media_buy` regardless of protocol version. Delete-and-recreate is the only way to change the demographic constraint.                                                                             |
| Pinterest | Rejects `targeting_overlay.demographics` on `update_media_buy` regardless of protocol version. Delete-and-recreate is the only way to change the demographic constraint.                                                                             |

Legacy AdCP 3.0 / 3.1 update calls that send
`targeting_overlay.demographics` will be refused with a 400
`UNSUPPORTED_TARGETING_DIMENSION` on every platform.

## Supported platforms

The following platforms advertise demographic targeting capability via AdCP 3.2:

| Platform  | Notes                                                                                                                                |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Meta      | Age ranges from 18 through 64. The value 65 means 65+ and is not a closed maximum.                                                   |
| Snap      | Exact unions of native 18-20, 21-24, and 25-34 buckets. Open-ended buckets are not treated as a closed maximum.                      |
| Spotify   | Age ranges from 18 through 65.                                                                                                       |
| Google    | Exact unions of native 18-24, 25-34, 35-44, 45-54, and 55-64 buckets on the supported Search products. The 65+ bucket is open-ended. |
| TikTok    | Unions of native 18-24, 25-34, 35-44, and 45-54 buckets. The 55+ bucket is open-ended.                                               |
| Pinterest | Unions of native 18-24, 25-34, 35-44, 45-54, and 55-64 buckets. The 65+ bucket is open-ended.                                        |

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 a
`demographic_targeting` object when the platform supports it, describing the
supported age bounds and bucket structure. Once activated, TikTok and Spotify
will additionally accept demographic changes on `update_media_buy`; Meta,
Google, Snap, and Pinterest will reject demographic updates and require a
delete+recreate to change the demographic constraint.

### 2. Express a demographic intent

Pass `targeting_overlay.demographics` in your `create_media_buy` request with
an `age` constraint:

```json theme={null}
{
  "targeting_overlay": {
    "demographics": {
      "age": {
        "min": 25,
        "max": 54,
        "include_unknown": false
      }
    }
  }
}
```

| Field                 | Description                                                                                                            |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `age.min`             | Minimum age (inclusive). Must be 18 or greater.                                                                        |
| `age.max`             | Maximum age (inclusive). Must be a closed bound the platform can represent exactly.                                    |
| `age.include_unknown` | Required. Whether to reach users whose age is not known to the platform. Not all platforms support `true` — see below. |

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 includes `targeting_resolution.demographics` describing
how the intent was executed, and returns the effective
`targeting_overlay.demographics` applied to the package:

```json theme={null}
{
  "targeting_overlay": {
    "demographics": {
      "age": {
        "min": 25,
        "max": 54,
        "include_unknown": false
      }
    }
  },
  "targeting_resolution": {
    "demographics": {
      "requested": {
        "age": {
          "min": 25,
          "max": 54,
          "include_unknown": false
        }
      },
      "applied": {
        "age": {
          "min": 25,
          "max": 54,
          "include_unknown": false
        }
      },
      "equivalent": true,
      "execution": {
        "type": "enumerated_intervals",
        "interval_ids": ["25-34", "35-44", "45-54"]
      }
    }
  }
}
```

Read `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 set `include_unknown: true`; set
  `include_unknown: false` to exclude them.
* **Snap, Spotify, TikTok, Pinterest**: Cannot include users with unknown age
  when an age constraint is active. Pass `include_unknown: false` for these
  platforms.

An explicit `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

The exact-age-targeting brief documented in [Exact Age Targeting](/v2/guides/age-targeting)
controls which products are returned during discovery — it is a filter, not a
commitment. 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` will be accepted on TikTok
and Spotify (recompiled against the product's declared capability); Meta,
Google, Snap, and Pinterest will reject demographic updates and require a
delete+recreate to change the demographic constraint.

## 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 populate
`demographic_targeting`, `targeting_overlay.demographics`, or
`targeting_resolution.demographics`.
