Paid Media Guide

ChatGPT Ads Targeting in 2026: Geography, Platform, Audiences and Context Hints

Targeting here is narrower than Meta's and arranged differently, and the arrangement has consequences for how you structure an account. Here is what each primitive controls, what it cannot do, and the update behaviour that quietly breaks campaigns.

Distk Editorial Oct 2026 12 min read

ChatGPT Ads offers four targeting primitives in 2026. Geography, platform and custom audiences are campaign-level settings, which means targeting variations require separate campaigns and therefore separate budgets. Context hints sit on the ad group, cap at 2,000 per group, and are descriptions rather than keywords. Geographic targeting accepts ISO country codes or location IDs from the geo lookup endpoint, up to 2,500 per list, though new product-feed campaigns support country level only. Six platform values exist after the 10 September 2026 changelog added desktop_web, ios_web and android_web, and web still includes mobile browsers rather than meaning desktop. Custom audience exclusion works at any ready size while inclusion and bid multipliers require the matched-user minimum, with 25,000 given as the public planning threshold. Exclusions take precedence over inclusions. The most dangerous behaviour is that geographic and audience updates can replace existing criteria, so you must read a campaign and send the complete intended configuration. Custom audiences are not supported for EEA or Swiss campaigns.

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.

PrimitiveLevelFieldWhat it does
GeographicCampaigntargeting.locations, targeting.excluded_locationsCountry codes or location IDs, with exclusions
PlatformCampaigntargeting.platforms.includedWhich ChatGPT surfaces can deliver
Custom audiencesCampaigntargeting.custom_audiences, targeting.excluded_custom_audiencesFirst-party lists for inclusion or exclusion
Context hintsAd groupcontext_hintsDescribes the offering so the platform can judge relevance
Audience bid multipliersAd groupbidding_config.custom_audience_bid_multipliersAdjusts 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.

The product-feed limitation to check before you plan in 2026

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 valuePlatformIncludes
ios_appiOS appThe native ChatGPT app on iOS
android_appAndroid appThe native ChatGPT app on Android
desktop_webDesktop webChatGPT in a desktop web browser
ios_webiOS webChatGPT in a web browser on iOS
android_webAndroid webChatGPT in a web browser on Android
webWebAll 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 useSize requirementWhat it means in practice
exclusionReady small or empty audiences can be used, with no minimum matched sizeSuppression works at any list size, including an empty list you add to later
inclusionMust meet the matched-user minimumTargeting your customer list needs scale
bid_multiplierMust meet the matched-user minimumBid 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.

ActionEndpointInput
Add members, keeping existing onesPOST /v1/custom_audiences/{id}/addInline identifiers or an uploaded file
Remove selected membersPOST /v1/custom_audiences/{id}/removeInline identifiers or an uploaded file
Replace the complete listPOST /v1/custom_audiences/{id}/replaceAn uploaded file
Merge existing audiencesMerge operation2 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 usefulMore useful
ShoesLightweight trail running shoes for rocky terrain
OutdoorsWater-resistant footwear for wet-weather hiking
California customersUse 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?

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.

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

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.

ChatGPT Ads Targeting in 2026: FAQs

Is targeting set on the campaign or the ad group in ChatGPT Ads?

Geographic, platform and custom audience targeting are all campaign-level. Context hints and audience bid multipliers are ad-group-level. That means a targeting variation requires a new campaign with its own budget, unlike platforms where ad sets carry targeting under a shared campaign budget.

Does the web platform value mean desktop only?

No. OpenAI states explicitly that web includes all web platforms including mobile browsers, so an iPhone user visiting ChatGPT in a browser counts as web inventory rather than the iOS app group. For desktop only, use desktop_web without web.

How large does a custom audience need to be in ChatGPT Ads?

It depends on the use. Ready small or empty audiences can be used for exclusion with no minimum matched size. Inclusion and bid multipliers require the matched-user minimum, for which OpenAI gives 25,000 matched users as the public planning threshold. Uploaded row counts do not equal matched users.

What is the difference between including an audience and using 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. Multipliers work only with fixed_bid, not with Maximize Results, and do not change who can see the campaign.

Why did my exclusion list disappear after a targeting update?

Because geographic and audience updates can replace existing targeting criteria. OpenAI advises retrieving the campaign first and sending the complete intended configuration for those objects, then retrieving it again to confirm what saved. Build read-modify-write into any script that edits targeting.

Can I use custom audiences for campaigns in Europe?

No. OpenAI states custom audiences are not supported for campaigns targeting the European Economic Area or Switzerland, where personalised ads are not yet available. OpenAI also requires that only first-party data you have the right to use is uploaded, and not broker-sourced data.

Get the account structure right before the targeting

Distk plans paid media structure for growth teams across India and internationally, including the decisions that are cheap to make early and expensive to undo once budgets are live.

Start the conversation →