What Targeting Does ChatGPT Ads Offer in 2026?
Four primitives, and they do not all live at the same level. Geographic targeting, platform targeting, and audience inclusion and exclusion are all campaign-level settings. Context hints sit on the ad group. OpenAI states that these settings work together and that matching one does not override the others, so a user has to satisfy every configured dimension to be eligible.
The fourth primitive, context hints, has no direct equivalent on Meta or Google. It is how you describe what an ad is about so the platform can judge relevance to a conversation, and understanding what it is not is as important as understanding what it is. The Ads API guide covers structure and bidding; this one covers who sees the ad.
| Primitive | Level | Field | What it does |
|---|---|---|---|
| Geographic | Campaign | targeting.locations, targeting.excluded_locations | Country codes or location IDs, with exclusions |
| Platform | Campaign | targeting.platforms.included | Which ChatGPT surfaces can deliver |
| Custom audiences | Campaign | targeting.custom_audiences, targeting.excluded_custom_audiences | First-party lists for inclusion or exclusion |
| Context hints | Ad group | context_hints | Describes the offering so the platform can judge relevance |
| Audience bid multipliers | Ad group | bidding_config.custom_audience_bid_multipliers | Adjusts a fixed bid for members, without restricting eligibility |
Why Does Everything Being Campaign-Level Change Your Account Structure?
Because on Meta or Google you would express several targeting variations as several ad sets under one budget. Here, targeting changes mean new campaigns, and each campaign carries its own budget. A media buyer planning three geographies and two audience splits is planning six campaigns and six budgets, not one campaign with six children.
That has a practical consequence for testing. Budget fragmentation is real: six campaigns each learning separately will take longer to produce readable results than one campaign would. In 2026 the sensible approach on a new channel is to start with the smallest number of campaigns that still answers one clear question, then split once something works.
How Do You Set Geographic Targeting in 2026?
Two ways: ISO 3166-1 alpha-2 country codes, or location IDs returned by the geo lookup endpoint. Country codes are simple; location IDs let you reach regions and markets. OpenAI warns that a code's ISO validity does not mean it is available for advertising in your account, so use supported advertising locations rather than assuming.
curl -G "https://api.ads.openai.com/v1/geo_lookup/search" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}" --data-urlencode 'q=San Francisco' --data-urlencode 'limit=5'
The response returns the location id, display name, canonical_name, country_code, type, parent_id and parent_country, plus region_code where available. The ID identifies the target; the names are there to help you pick the right result. OpenAI also publishes the full catalogue as a downloadable CSV, which is the practical way to build a mapping table once rather than querying repeatedly.
Targeting a country while excluding a region
curl -X POST "https://api.ads.openai.com/v1/campaigns/cmpn_123" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}" -H "Content-Type: application/json" -d '{
"targeting": {
"locations": { "countries": ["US"] },
"excluded_locations": { "include": [ { "id": "2000043" } ] }
}
}'
You can include up to 2,500 IDs in geographic inclusion and exclusion lists. If you provide no location targeting at all, the campaign can target all available locations, which is rarely what anyone intends on a first test.
OpenAI documents that new product-feed campaigns support geographic targeting and exclusions only at country level. If your retail plan assumed city or region targeting on a catalogue campaign, that assumption needs revisiting before the media plan is signed off.
Which Platforms Can You Target, and What Does web Actually Mean?
Six values, and one of them is routinely misread. The broad groups are ios_app, android_app and web. A changelog entry dated 10 September 2026 added granular web values: desktop_web, ios_web and android_web. The existing web value continues to include all web platforms, so existing campaigns using it do not need to change.
| API value | Platform | Includes |
|---|---|---|
ios_app | iOS app | The native ChatGPT app on iOS |
android_app | Android app | The native ChatGPT app on Android |
desktop_web | Desktop web | ChatGPT in a desktop web browser |
ios_web | iOS web | ChatGPT in a web browser on iOS |
android_web | Android web | ChatGPT in a web browser on Android |
web | Web | All web platforms, including mobile browsers |
The misreading OpenAI explicitly corrects: selecting web does not mean desktop-only traffic. An iPhone user visiting ChatGPT in a browser belongs to web inventory rather than the iOS app group. If you want desktop only, use desktop_web without web. And at creation, omitting platform targeting defaults to all platforms.
How Do Custom Audiences Work in ChatGPT Ads in 2026?
You upload first-party identifiers, OpenAI matches them to users, and the resulting audience can be included, excluded or used to adjust a fixed bid. Uploads support email, phone, their supported SHA-256 variants, and GAID identifiers. OpenAI tells you to use the audience-specific normalisation rules before hashing and not to assume another API uses the same phone format, which is a genuine trap for teams reusing a Meta or Google pipeline.
curl -X POST "https://api.ads.openai.com/v1/uploads" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}" -F "file=@/path/to/audience.csv;type=text/csv" -F "purpose=custom_audience"
curl -X POST "https://api.ads.openai.com/v1/custom_audiences" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}" -H "Content-Type: application/json" -d '{
"name": "High-value customers",
"file_id": "oaisdmntci_123",
"identifier_resolution": "auto",
"filename": "audience.csv",
"mimetype": "text/csv",
"file_size": 123456
}'
Files are UTF-8 CSV or TXT up to 500 MB, with identifier_resolution: "auto" processing supported columns in a CSV. For a single-type TXT file, provide identifier_type with one identifier per line. Everything is asynchronous, so you wait for status: "ready" before using the audience.
The size thresholds that decide what an audience can do
This is the most commercially important table on the page, because it determines whether your CRM list is usable at all. Eligibility is per intended use and is separate from the audience being ready.
| Intended use | Size requirement | What it means in practice |
|---|---|---|
exclusion | Ready small or empty audiences can be used, with no minimum matched size | Suppression works at any list size, including an empty list you add to later |
inclusion | Must meet the matched-user minimum | Targeting your customer list needs scale |
bid_multiplier | Must meet the matched-user minimum | Bid adjustments need the same scale as inclusion |
OpenAI gives 25,000 matched users as the public planning threshold for inclusion and bid adjustments, and is careful about what that means: privacy safeguards can affect the exact boundary, and uploading 25,000 identifiers does not guarantee enough matched users. Uploaded row counts do not equal matched-user counts. For most mid-market advertisers in 2026, that makes suppression the realistic first use of custom audiences and inclusion a later one.
You can check eligibility directly rather than guessing:
curl -G "https://api.ads.openai.com/v1/custom_audiences" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}" --data-urlencode "intended_use=exclusion" --data-urlencode "custom_audience_ids[]=caud_123"
Maintaining an audience without breaking your campaigns
Add, remove and replace operations update membership while keeping the audience ID, so the campaigns and ad groups referencing it keep working. Each returns an operation rather than the updated audience, and you poll the returned operation_id for completion.
| Action | Endpoint | Input |
|---|---|---|
| Add members, keeping existing ones | POST /v1/custom_audiences/{id}/add | Inline identifiers or an uploaded file |
| Remove selected members | POST /v1/custom_audiences/{id}/remove | Inline identifiers or an uploaded file |
| Replace the complete list | POST /v1/custom_audiences/{id}/replace | An uploaded file |
| Merge existing audiences | Merge operation | 2 to 64 existing audience IDs, producing a new union audience |
Inline request bodies must not exceed 16 MiB, and each new add, remove, replace or merge needs a new Idempotency-Key, reusing the original key only when retrying the same submission.
What Is the Difference Between Inclusion and a Bid Multiplier?
Inclusion restricts eligibility to matching users. A bid multiplier adjusts a fixed bid for matching users while leaving everyone else eligible under the campaign's targeting. OpenAI states plainly that bid multipliers do not change which users are eligible to see a campaign.
For a media buyer that distinction is the difference between a prospecting campaign that quietly stopped reaching new people and one that simply pays more for known customers. Two constraints go with it: multipliers work only with fixed_bid, not with Maximize Results, and small exclusion audiences are not automatically eligible for bid adjustments.
How Do Inclusion and Exclusion Interact?
Exclusions win. OpenAI documents that you may configure both inclusion and exclusion targeting on the same campaign, that exclusions take precedence when someone belongs to both, and that the same audience ID cannot appear in both lists in one campaign. If you combine inclusion and exclusion, the remaining eligible audience must still meet the inclusion minimum, which is an easy way to accidentally make a campaign undeliverable.
curl -X POST "https://api.ads.openai.com/v1/campaigns/cmpn_123" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}" -H "Content-Type: application/json" -d '{
"targeting": {
"locations": { "countries": ["US"] },
"custom_audiences": { "ids": ["caud_123"] },
"excluded_custom_audiences": { "ids": ["caud_456"] }
}
}'
Why Must You Read a Campaign Before Changing Its Targeting?
Because a partial update can erase targeting you meant to keep. OpenAI's warning is specific: geographic and audience updates can replace existing targeting criteria, so you should retrieve the campaign first and send the complete intended configuration for those objects. The API does handle a platform-only update separately from geographic and audience changes, but if you send geographic or audience fields you must build the full object.
This is the single most dangerous operational behaviour on the platform for an agency. A script that nudges one country onto a campaign can silently drop an exclusion list that was protecting a client from advertising to existing customers. Build read-modify-write into your tooling from the start, and retrieve the campaign afterwards to confirm what saved.
What Are Context Hints, and How Should You Write Them?
Context hints are ad-group-level text that describes relevant products, use cases or needs the creative and landing page may not fully cover. OpenAI is explicit about two things they are not: they are not exact-match keywords, and they do not replace explicit geographic, platform or audience targeting. An ad group can hold up to 2,000 hints.
| Less useful | More useful |
|---|---|
| Shoes | Lightweight trail running shoes for rocky terrain |
| Outdoors | Water-resistant footwear for wet-weather hiking |
| California customers | Use geographic targeting for California; describe the product's use case in hints |
OpenAI notes these examples illustrate writing style rather than guaranteeing that a particular conversation will trigger an ad. The mental model that fits the documentation is a short, plain-language product description written for a reader who has never seen your brand, not a keyword list. The third row is the instructive one: geography belongs in targeting, not in a hint.
curl -X POST "https://api.ads.openai.com/v1/ad_groups/adgrp_123" -H "Authorization: Bearer ${OPENAI_ADS_API_KEY}" -H "Content-Type: application/json" -d '{
"context_hints": [
"Lightweight trail running shoes for rocky terrain",
"Water-resistant footwear for wet-weather hiking"
]
}'
Updating context_hints replaces the current list. To add one hint you retrieve the ad group, append to the existing list and submit the complete intended list. An empty array clears the list, and omitting the field leaves it unchanged.
What Are the Compliance Limits on Audiences in 2026?
Two that matter commercially. First, custom audiences are not supported for campaigns targeting the European Economic Area or Switzerland, where OpenAI states personalised ads are not yet available. If you run European media, audience-based targeting is simply not part of the plan there.
Second, OpenAI sets a clear data-sourcing rule: upload only first-party audience data you have the right to use for ads, and do not upload broker-sourced data. Before uploading, confirm your use complies with required rights, notices, consents, permissions and legal bases and the Ad Tools Terms, and obtain privacy or legal approval. For teams operating under the DPDP Act in India or GDPR in Europe, that is a step with a named owner, not a checkbox. This is a summary of OpenAI's published platform terms rather than legal advice; confirm your own obligations with counsel.
What Are the Common Targeting Mistakes in 2026?
- Sending a partial targeting update. Geographic and audience updates can replace existing criteria. Read first, send the complete object, verify after.
- Reading
webas desktop. It includes mobile browsers. Usedesktop_webfor desktop only. - Assuming uploaded rows equal matched users. They do not, and 25,000 identifiers does not guarantee 25,000 matches.
- Planning inclusion targeting on a small CRM list. Exclusion works at any size; inclusion and bid multipliers need the minimum.
- Confusing a bid multiplier with inclusion. Multipliers do not restrict who is eligible.
- Pairing multipliers with Maximize Results. They work only with fixed bidding.
- Expecting sub-country targeting on product-feed campaigns. New ones support country level only.
- Writing context hints as keywords. They are descriptions, not match types, and geography belongs in targeting.
- Planning audience targeting for EEA or Swiss campaigns. Custom audiences are not supported there.
Key Takeaways for 2026
ChatGPT Ads targeting is narrower than Meta's and shaped differently, and the structural consequences matter more than the option list.
- Geography, platform and audiences are campaign-level; context hints and bid multipliers are ad-group-level.
- Targeting variations mean separate campaigns, and therefore separate budgets.
- Geographic targeting takes country codes or looked-up location IDs, up to 2,500 per list, with a downloadable catalogue.
- Six platform values exist;
webincludes mobile browsers, and omitting platform targeting defaults to all platforms. - Custom audience exclusion works at any ready size; inclusion and bid multipliers need the matched-user minimum, with 25,000 as the published planning threshold.
- Add, remove, replace and merge keep the audience ID so campaigns referencing it keep working.
- Exclusions take precedence over inclusions, and an audience ID cannot be in both lists.
- Always read a campaign before updating targeting, because partial updates can replace existing criteria.
- Context hints are descriptions capped at 2,000 per ad group, not keywords, and updating replaces the list.
- Custom audiences are unavailable for EEA and Swiss campaigns, and only first-party data may be uploaded.
Distk plans and runs paid media for growth teams across India and internationally, including the account structure decisions that are expensive to undo. If you are building a ChatGPT Ads test in 2026, the structure question comes before the targeting question, and that is where we would start.
Sources
- OpenAI, Targeting, including inclusion and exclusion, geographic, platform and context hints.
- OpenAI, Custom Audiences, including eligibility thresholds, file rules and the EEA restriction.
- OpenAI, Platform Targeting.
- OpenAI, Location Targeting.
- OpenAI, Ad Tools Terms.
Every field, value and threshold in this guide is quoted from OpenAI's published Ads documentation as of 1 October 2026. This is a summary of platform documentation and terms, not legal advice.