Skip to main content

Migrating geo targeting

AdCP 3.0 replaces implicit US-centric geo targeting with named systems that support global markets. Metro targeting values are grouped by system, and postal targeting values are grouped by country plus the country-local postal system.

What changed

Fields that didn’t change: geo_countries, geo_countries_exclude, geo_regions, geo_regions_exclude all remain simple string arrays using ISO codes.

Metro targeting

v2 — flat array of codes, assumed to be Nielsen DMAs:
v3 — codes grouped by system:
Each entry specifies a system and the codes within that system. Multiple systems can coexist:

Metro systems

Registered metro systems are nielsen_dma, uk_itl1, uk_itl2, eurostat_nuts2, and custom.

Postal targeting

v2 — flat array of codes, assumed to be US ZIP codes:
v3 — renamed to geo_postal_areas, codes grouped by country-local system:

Postal systems

Use postal_code for the normal postal code string in countries without a more specific registered local system. Deprecated country-fused aliases such as us_zip remain accepted for compatibility and SDK backfill. Registered country/system pairings are defined in postal-country-system.json; the published postal-system.json enum remains additive and also contains deprecated country-fused aliases for 3.x compatibility.

Exclusion targeting

v3 adds _exclude variants for metro and postal targeting:
This targets the entire US except the New York DMA.

Discovering seller capabilities

Before sending geo targeting, buyers should verify the seller supports the requested systems. Use get_adcp_capabilities:
The geo_metros object uses boolean properties to indicate which metro systems are supported. The geo_postal_areas object is keyed by country and lists the supported country-local postal systems; during the 3.x migration, sellers SHOULD also emit equivalent deprecated aliases such as us_zip where one exists. Buyers and SDKs should normalize both shapes. If you request a system the seller doesn’t declare, expect a validation error.

Full targeting example

A v3 targeting overlay combining geo restrictions:
Inclusion fields are combined with AND logic — delivery must match all specified constraints. Exclusion fields (_exclude variants) act as AND NOT — delivery must match inclusions and must not match any exclusion.

Migration steps

1

Identify geo targeting

Find all uses of geo_metros and geo_postal_codes.
2

Rename field

geo_postal_codes becomes geo_postal_areas.
3

Restructure values

Wrap metro arrays into { "system": "...", "values": [...] } objects and postal arrays into { "country": "...", "system": "...", "values": [...] } objects.
4

Choose systems

For US-only code, use nielsen_dma and country: "US", system: "zip". For international, add the appropriate country-local systems.
5

Verify capabilities

Call get_adcp_capabilities to check what systems each seller supports.
6

Add exclusions

If needed, use the new _exclude variants for negative targeting.

Targeting

Full targeting reference: audiences, contextual, geographic, and device targeting.

Related: Channels | Pricing | Creatives | Catalogs | Attribution | AdCP 3.0 overview