Targeting
The API offers a variety of Targeting options to allow an advertiser to find the right user at the right time.
There are a variety of endpoints offered that expose the available targeting options.
Targeting Spec
The targeting spec should be constructed based on the possible dimensions outlined below.
| Attribute | Description | Required | Note |
|---|---|---|---|
| app_install_states | Defines whether targeted user has App installed or not | O | For usage see App Install states |
| demographics | List of Demographic Targets | O | Required when using Multi-country targeting |
| devices | List of Device Targets | O | |
| geos | List of Geo/Location Targets | R | Multi-country targeting is allowed from 1st April 2020, each country needs to be placed in a geos entry, a targeting spec that uses multi-country targeting needs to also include a demographics entry that incorporates a single languages entry |
| interests | List of Interest Targets | O | |
| locations | List of Location categories/Circles | O | |
| regulated_content | Flag to mark content within the Ad Squad as Regulated Content | O | FALSE (default), TRUE |
| segments | List of Customer List segment targets | O | |
| auto_expansion_options | This option allows Snapchat to expand the targeting based on a number of different factors. | O | For usage see Targeting auto-expansion |
General Guidance
In general, dimensions that are grouped within the same JSON object is in AND relation. JSON objects within a JSON array are in OR relation. The exception to this is EXCLUDE, which is always AND and applied last.
Targeting Inclusion / Exclusion
| Category | Type | Support | Description |
|---|---|---|---|
| app_install_states | app installation state | See App Install states | Defines whether targeted user has App installed or not |
| demographics | gender, languages, age_group, min_age, max_age, DLXD | INCLUDE | Gender, Language, Age Groups, Age Range, Advanced Demographics |
| devices | connection_type, os_type, os_version, carrier, marketing_name | INCLUDE | Connection type, OS Type, OS Version, Carrier, Make |
| geos | country | INCLUDE/EXCLUDE | Multi-country targeting is allowed from 1st April 2020, each country needs to be placed in a geos entry, a targeting spec that uses multi-country targeting needs to also include a demographics entry that incorporates a single languages entry |
| geos | region | INCLUDE/EXCLUDE | Region/State |
| geos | metro | INCLUDE/EXCLUDE | Metro/DMA |
| geos | postal_code | INCLUDE/EXCLUDE | Zipcode/Post code |
| interests | SLC | INCLUDE/EXCLUDE | Snap Lifestyle Categories |
| interests | DLX, DLXS, DLXC, NLN, PLC, VAC | INCLUDE | Oracle Datalogix DLX/DLXS/DLXC Interest Targeting, Nielsen Interest Targeting NLN, Placed Visitation PLC, Snap Visitation VAC |
| locations | categories_loi, circles | INCLUDE | Location Categories, Location Point Radius |
| segments | segment_id | INCLUDE/EXCLUDE | Customer List, Pixel Custom Audiences, Mobile Audiences, Engagement Audiences |
Targeting changes in Snap Ads Manager
Our targeting spec is flexible and allows targeting to be formulated in two different styles, expanded, compact or a mixture of the two.
In an effort to normalize our targeting spec Snap Ads Manager is now going to default to only define targeting in the compact style, in a change that will take place on 23 September 2025.
Both Snap Ads Manager and the Marketing API will continue to support both styles of targeting but on the 23 September 2025 Snap Ads Manager will default to save the targeting of any Ad Squad and Targeting Spec into the compact format.
Timeline - Targeting Changes
| Time | Phase | Description |
|---|---|---|
| March 2025 | Expanded targeting style is used by Snap Ads Manager | Snap Ads Manager returns targeting in the expanded style3rd parties can build to adopt the compact targeting style. Introduction of targeting_v2 parameter |
| 23 September 2025 | Compact targeting style is used by Snap Ads Manager by default | Snap Ads Manager uses the compact targeting style when Creating and Updating Ad Squads.3rd party applications risk breaking unless they are able to read, display and save targeting in the compact targeting style. |
Targeting styles - Expanded and Compact
The below example provides a definition and uses an example of the same targeting spec to explain how the different styles differ.
Targeting - Expanded
Each targeting criteria is defined in an independent node.
Example;
"targeting": {
"geos": [
{
"country_code": "US",
"region_id": ["5"],
"operation": "INCLUDE"
},
{
"country_code": "US",
"region_id": ["8"],
"operation": "INCLUDE"
}
],
"segments": [
{
"segment_id": [
"5052756160240353"
]
},
{
"segment_id": [
"6642356568874716"
]
},
{
"segment_id": [
"5029744549138135"
]
},
{
"segment_id": [
"5893433172550124"
],
"operation": "EXCLUDE"
}
]
}
Targeting - Compact
Each targeting criteria is defined in an array.
The only exception is country_code which should be defined in independent nodes, this is because country_code nodes can have geo specific factors tied to them in sub-nodes such as postal_code, region and metro.
Example;
"targeting": {
"geos": [
{
"country_code": "US",
"region_id": ["5", "8"],
"operation": "INCLUDE"
}
],
"segments": [
{
"segment_id": [
"5052756160240353",
"6642356568874716",
"5029744549138135"
],
"operation": "INCLUDE"
},
{
"segment_id": [
"5893433172550124"
],
"operation": "EXCLUDE"
}
]
}
New parameter - targeting_v2
To aid in the adoption of the compact style of defining targeting we are providing a new parameter named targeting_v2 this parameter allows you to test and develop support for the compact targeting style.
When you add this parameter to an API request for fetching an Ad Squad/Targeting Spec it will format the targeting into the compact style, even if it was saved in the expanded or mixed format.
The targeting_v2 parameter works with the following endpoints
| API Method | URL |
|---|---|
| Get a specific Ad Squad by ID | https://developers.snap.com/marketing-api/Ads-API/ad-squads#get-a-specific-ad-squad |
| Get all Ad Squads under a Campaign | https://developers.snap.com/marketing-api/Ads-API/ad-squads#get-all-ad-squads-under-a-campaign |
| Get a specific Targeting Spec by ID | https://developers.snap.com/marketing-api/Ads-API/targeting#get-a-specific-targeting-spec |
| Get all Targeting Specs under an Ad Squad | https://developers.snap.com/marketing-api/Ads-API/targeting#get-all-targeting-specs-under-an-ad-squad |
Example 1 - Expanded targeting
This request fetches an Ad Squad that uses the expanded style of targeting with interest and regional targeting.
curl "https://adsapi.snapchat.com/v1/adsquads/b145b58d-151e-4e04-b43b-6d9b351f732f?return_placement_v2=true" \
-H "Authorization: Bearer meowmeowmeow"
The above command returns JSON structured like this:
{
"request_status": "SUCCESS",
"request_id": "45648fe1-122e-4e34-af1b-76a0b34d80fb",
"adsquads": [
{
"sub_request_status": "SUCCESS",
"adsquad": {
"id": "b145b58d-151e-4e04-b43b-6d9b351f732f",
"updated_at": "2025-03-24T22:29:27.999Z",
"created_at": "2025-03-24T22:29:27.999Z",
"name": "Targeting - Interest and Region",
"status": "ACTIVE",
"campaign_id": "0f8a976d-531b-49cc-bc2e-0261026f37dc",
"type": "SNAP_ADS",
"targeting": {
"regulated_content": false,
"demographics": [
{
"min_age": "18",
"operation": "INCLUDE"
}
],
"interests": [
{
"category_id": ["SLC_1"],
"operation": "INCLUDE"
},
{
"category_id": ["SLC_124"],
"operation": "INCLUDE"
},
{
"category_id": ["SLC_2"],
"operation": "INCLUDE"
},
{
"category_id": ["SLC_155"],
"operation": "INCLUDE"
},
{
"category_id": ["SLC_241"],
"operation": "INCLUDE"
},
{
"category_id": ["SLC_242"],
"operation": "INCLUDE"
},
{
"category_id": ["SLC_243"],
"operation": "INCLUDE"
}
],
"geos": [
{
"country_code": "uk",
"region_id": ["25336"],
"operation": "INCLUDE"
},
{
"country_code": "uk",
"region_id": ["25335"],
"operation": "INCLUDE"
},
{
"country_code": "uk",
"region_id": ["25339"],
"operation": "INCLUDE"
},
{
"country_code": "uk",
"region_id": ["34999"],
"operation": "INCLUDE"
},
{
"country_code": "uk",
"region_id": ["35000"],
"operation": "INCLUDE"
}
],
"devices": [{}],
"product_audiences": [],
"enable_targeting_expansion": true,
"auto_expansion_options": {
"interest_expansion_option": {
"enabled": true
},
"custom_audience_expansion_option": {
"enabled": true
}
}
},
"targeting_reach_status": "VALID",
"placement_v2": {
"config": "AUTOMATIC"
},
"billing_event": "IMPRESSION",
"auto_bid": true,
"target_bid": false,
"bid_strategy": "AUTO_BID",
"daily_budget_micro": 50000000,
"start_time": "2021-09-16T11:22:31.894Z",
"optimization_goal": "SWIPES"
}
}
]
}
Example 1 - Compact targeting
This request fetches the same Ad Squad but uses the targeting_v2 parameter which returns the targeting in the compact style
curl "https://adsapi.snapchat.com/v1/adsquads/b145b58d-151e-4e04-b43b-6d9b351f732f?return_placement_v2=true&targeting_v2=ENABLED" \
-H "Authorization: Bearer meowmeowmeow"
The above command returns JSON structured like this:
{
"request_status": "SUCCESS",
"request_id": "d19d11ee-3fdb-476e-b9ab-63aeed42da63",
"adsquads": [
{
"sub_request_status": "SUCCESS",
"adsquad": {
"id": "b145b58d-151e-4e04-b43b-6d9b351f732f",
"updated_at": "2025-03-24T22:29:27.999Z",
"created_at": "2025-03-24T22:29:27.999Z",
"name": "Targeting - Interest and Region",
"status": "ACTIVE",
"campaign_id": "0f8a976d-531b-49cc-bc2e-0261026f37dc",
"type": "SNAP_ADS",
"targeting": {
"regulated_content": false,
"demographics": [
{
"min_age": "18",
"operation": "INCLUDE"
}
],
"interests": [
{
"category_id": [
"SLC_1",
"SLC_124",
"SLC_2",
"SLC_155",
"SLC_241",
"SLC_242",
"SLC_243"
],
"operation": "INCLUDE"
}
],
"geos": [
{
"country_code": "uk",
"region_id": [
"25336",
"25335",
"25339",
"34999",
"35000"
],
"operation": "INCLUDE"
}
],
"devices": [
{
"operation": "INCLUDE"
}
],
"product_audiences": [],
"enable_targeting_expansion": true,
"auto_expansion_options": {
"interest_expansion_option": {
"enabled": true
},
"custom_audience_expansion_option": {
"enabled": true
}
}
},
"targeting_reach_status": "VALID",
"placement_v2": {
"config": "AUTOMATIC"
},
},
"billing_event": "IMPRESSION",
"auto_bid": true,
"target_bid": false,
"bid_strategy": "AUTO_BID",
"daily_budget_micro": 50000000,
"start_time": "2021-09-16T11:22:31.894Z",
"optimization_goal": "SWIPES"
}
}
]
}
Example 2 - Expanded targeting
This request fetches an Ad Squad that uses the expanded style of targeting for age groups and post codes.
curl "https://adsapi.snapchat.com/v1/adsquads/7e740766-9ea0-4487-ae4d-acb04cc4246c?return_placement_v2=true" \
-H "Authorization: Bearer meowmeowmeow"
The above command returns JSON structured like this:
{
"request_status": "SUCCESS",
"request_id": "5c3281c1-f5c7-4e32-9913-37784bfc6d07",
"adsquads": [
{
"sub_request_status": "SUCCESS",
"adsquad": {
"id": "7e740766-9ea0-4487-ae4d-acb04cc4246c",
"updated_at": "2025-03-24T22:08:25.487Z",
"created_at": "2025-03-24T22:08:25.487Z",
"name": "Targeting - Age Group and Postal Code",
"status": "ACTIVE",
"campaign_id": "0f8a976d-531b-49cc-bc2e-0261026f37dc",
"type": "SNAP_ADS",
"targeting": {
"regulated_content": false,
"demographics": [
{
"age_groups": ["18-20"],
"operation": "INCLUDE"
},
{
"age_groups": ["21-24"],
"operation": "INCLUDE"
},
{
"age_groups": ["25-34"],
"operation": "INCLUDE"
}
],
"geos": [
{
"country_code": "us",
"postal_code": ["20622"],
"operation": "INCLUDE"
},
{
"country_code": "us",
"postal_code": ["20629"],
"operation": "INCLUDE"
},
{
"country_code": "us",
"postal_code": ["20632"],
"operation": "INCLUDE"
},
{
"country_code": "us",
"postal_code": ["20639"],
"operation": "INCLUDE"
},
{
"country_code": "us",
"postal_code": ["20646"],
"operation": "INCLUDE"
},
{
"country_code": "us",
"postal_code": ["20650"],
"operation": "INCLUDE"
}
],
"devices": [{}],
"product_audiences": [],
"enable_targeting_expansion": true,
"auto_expansion_options": {
"interest_expansion_option": {
"enabled": true
},
"custom_audience_expansion_option": {
"enabled": true
}
}
},
"targeting_reach_status": "VALID",
"placement_v2": {
"config": "AUTOMATIC"
},
"billing_event": "IMPRESSION",
"auto_bid": true,
"target_bid": false,
"bid_strategy": "AUTO_BID",
"daily_budget_micro": 50000000,
"start_time": "2021-09-16T11:22:31.894Z",
"optimization_goal": "SWIPES"
}
}
]
}