Custom audiences in ChatGPT ads: setup, exclusions, and bid multipliers
Custom audiences let you upload your own customer or prospect lists — email addresses, phone numbers or Google Advertising IDs — and use them in ChatGPT ads three ways: include them, exclude them, or bid differently on them with a 0.1x to 10x multiplier. This is the first-party-data layer the channel was missing, and it works almost exactly like Meta Custom Audiences or Google Customer Match. A September 2026 release made audiences editable, allowed mixed identifier types, let audiences under 25,000 matched users be used for exclusions, and lifted the five-million ceiling. This guide covers the full setup — file rules, the 25,000 matched-user inclusion minimum, SHA-256 hashing, add/remove/replace maintenance, inclusion and exclusion logic, and bid multipliers.
The short version
- What: upload email, phone or mobile-advertising-ID lists (plain or SHA-256 hashed) as reusable audiences in Ads Manager.
- Three uses: campaign-level inclusion, campaign-level exclusion, and ad-group bid multipliers from 0.1x to 10x.
- Minimum: 25,000 matched users to include an audience; OpenAI recommends 100,000+. Since September 2026, smaller audiences can be used for exclusions.
- File: CSV or TXT, up to 500 MB. Identifier types can be mixed in one request, audiences can be built beyond 5,000,000 members, and members can be added, removed or replaced without recreating the audience.
- They stack with context hints: hints pick the conversations; audiences pick (and price) the people.
What custom audiences are in ChatGPT ads
A custom audience is a list of your customers or prospects, uploaded to OpenAI's Ads Manager as email addresses or phone numbers, that becomes a reusable audience-level control. OpenAI's help documentation is precise about the boundaries: audiences are applied as audience-level controls only — Ads Manager never shows you individual matched users and never lets you pick specific people from a list. You are steering delivery and bids for a group, not browsing a CRM inside the ad platform.
If you have run Meta Custom Audiences or Google Customer Match, the mental model transfers directly: first-party list in, matching against logged-in users, aggregate-only reporting out. What is genuinely new is where it lands — inside a channel whose targeting was previously only conversational context.
What this changes about ChatGPT ads targeting
Until now, ChatGPT ads had exactly one targeting input: context hints describing the conversation. There were no audience layers, and the only way to "exclude" anyone was to write a tighter hint. Custom audiences change both halves of that sentence:
- Suppression exists now. You can finally stop paying to show prospecting ads to people who already bought — the most basic hygiene of paid social, previously impossible here.
- Known-customer targeting exists now. Campaigns can be limited to your list: upsells, winbacks, renewals, launches to existing users.
- Value-based bidding exists now. A 2x multiplier on high-LTV customers or a 0.5x on low-priority segments lets your bid follow customer value, not just conversation relevance.
The right frame is that audiences stack with hints rather than replace them. The relevance-weighted auction still scores your hints, landing page, title, and copy; audiences decide who the campaign may reach and how hard you bid when a match shows up. Hints pick the conversations; audiences pick and price the people.
What changed in September 2026
Custom audiences shipped in mid-2026 with a set of hard constraints that made them awkward to operate: lists were immutable snapshots, one identifier type per upload, a flat 25,000-matched-user floor for every use, and a five-million-identifier ceiling. A September 2026 release removed or relaxed all of them at once. If you built process around the old rules, this is the section to read.
| Behaviour | Before | Now |
|---|---|---|
| Editing membership | Immutable — rebuild and archive to refresh | Add, remove or replace members in place, without recreating the audience |
| Identifier types | One type per upload, never mixed | Mixed identifier types in the same request |
| Audiences under 25,000 matched | Unusable — status Too small | Usable for exclusions; the 25,000 floor still governs inclusion targeting |
| Maximum size | 5,000,000 identifiers | Audiences beyond 5,000,000 members |
| Reported size | Coarse ranges | More granular audience-size ranges |
| Identifier types supported | Email and phone (plain or SHA-256) | Adds Google Advertising ID (GAID) |
Three of these change how you should actually operate. Editable membership retires the refresh-and-archive treadmill — a suppression list can now be a maintained object with a weekly delta push instead of a new audience every month, which also means campaign references stop breaking every time the list is refreshed. Sub-25,000 exclusions fix the most annoying asymmetry in the system: suppression is the highest-value use of a list and it was the one gated hardest, because the accounts that most need to stop paying to reach existing customers are usually the ones with fewer than 25,000 of them. And GAID makes mobile identity addressable for app-first advertisers whose CRM is thin on email but rich on device IDs.
One thing that did not change: audiences remain audience-level controls only. Editable membership is not a CRM view — you still never see individual matched users, and more granular size ranges are ranges, not counts.
The three ways to use a custom audience
| Use | Where it lives | What it does | Classic use case |
|---|---|---|---|
| Inclusion | Campaign level | Limits eligibility to people in one or more selected audiences | Upsell or winback campaigns to known customers |
| Exclusion | Campaign level | Prevents delivery to people in selected audiences | Suppressing existing customers from prospecting |
| Bid multiplier | Ad group (Advanced settings) | Scales the ad group's max bid 0.1x-10x when the viewer matches | 2x on high-value customers, 0.5x on low-priority lists |
One rule to internalize early: multipliers never gate eligibility. A 10x multiplier does not include anyone, and a 0.1x does not exclude anyone — it just changes what you bid when that viewer happens to be in an eligible conversation. Eligibility is set only by campaign-level include and exclude.
Preparing your audience file
The upload rules, per OpenAI's documentation:
- Format: CSV or TXT, up to 500 MB per file. Audiences can now be built beyond 5,000,000 members — build a large audience across multiple uploads rather than trying to force one oversized file.
- Identifier types: email, phone number, SHA-256 hashed email, SHA-256 hashed phone, and Google Advertising ID (GAID). Since September 2026 these can be mixed in the same request.
- TXT: one identifier per line.
- CSV: header optional; if present, the column must be named exactly
email,phone_number,email_sha256, orphone_number_sha256. A mixed file needs its columns named, so use a headered CSV whenever you mix types — a bare TXT gives the parser nothing to key on. - Editable: audiences are no longer immutable. Members can be added, removed or replaced after creation.
Size the list generously anyway. An audience needs 25,000 matched users before you can include it as a targeting audience, and matching always loses rows — invalid values, duplicates, and identifiers that do not correspond to a ChatGPT account all fall out. OpenAI recommends 100,000+; as a practical rule, a raw list only modestly above 25,000 rows is unlikely to survive matching into an includable audience. Exclusions are the exception: a small list is now still worth uploading, because suppression no longer has a floor to clear.
Mixing types raises the match rate for the same people rather than reaching new ones — the same customer's email, phone and GAID are three chances to match one person. So mix when coverage across your CRM is patchy, and split into separate audiences when you actually want to steer or price the channels differently.
Creating the audience in Ads Manager
- Go to Settings in Ads Manager.
- Open the Audiences tab.
- Select Create custom audience.
- Enter a name — now that audiences are editable and long-lived, name them for what they are rather than when they were built:
customers-all,purchasers-90d,suppression-employees. Date-stamped names made sense under the old rebuild-and-archive model; they age badly on a maintained list. - Choose the identifier type — or supply a headered CSV if you are mixing types.
- Upload the file, review, and select Create.
Updating an audience: add, remove, replace
Since September 2026 an existing audience's membership can be changed without recreating it. Three operations, and they are not interchangeable:
| Operation | What it does | Use it for |
|---|---|---|
| Add | Merges new identifiers into the existing membership | Incremental growth — new customers, new leads, new purchasers since the last sync |
| Remove | Deletes the supplied identifiers from the membership | Churn, unsubscribes, deletion requests, people who aged out of a window |
| Replace | Swaps the entire membership for the supplied file | A full re-sync from source of truth, when you trust the export more than the accumulated state |
The practical pattern for most accounts is add plus remove on a short cadence, replace on a long one: push deltas weekly so the audience tracks reality, and do a full replace monthly or quarterly so drift, failed syncs and accumulated junk get cleaned out. Replace is also the honest tool for privacy work — when a deletion request has to be provable, re-sourcing the whole list from a system that has already honoured it beats trusting a remove call landed.
Two things to keep in mind. Edits still go through matching and processing, so an audience is briefly not in a usable state after a large change — do not schedule a replace an hour before a launch. And because campaign references now survive refreshes, an edit propagates to every campaign and ad group using that audience: convenient for suppression, but it means a careless replace can quietly change the targeting of campaigns you were not thinking about. Check what references an audience before you replace it.
Processing and statuses
Processing usually takes about 20 to 30 minutes, longer for big files. The statuses that matter:
| Status | Meaning |
|---|---|
| Ready | Processed, met the 25,000 minimum, usable for inclusion, exclusion and bid multipliers |
| Processing / Upload pending / Indexing / Publishing | Still being prepared — not usable yet |
| Too small | Under 25,000 matched users — cannot be used as an inclusion or bid-multiplier audience. Since September 2026 it can still be used as an exclusion |
| Failed | File could not be processed — check format and retry |
Remember that the matched count will be smaller than your row count — that is normal, not a bug. It only becomes a problem when the shrinkage drops an audience you intended to include under the minimum. Reported sizes are now shown in more granular ranges than at launch, which makes it easier to see how close a list is to the floor before you build a campaign on it — but they are still ranges, not exact counts, so leave headroom.
Using include and exclude in a campaign
In campaign setup, the Custom audiences section takes both controls. The three configurations and their logic:
- Inclusion only: ads are eligible only for people in at least one included audience.
- Exclusion only: ads are eligible broadly, except for anyone in an excluded audience.
- Both together: eligible only for people in an included audience who are not in any excluded audience — and the audience remaining after exclusions must still clear 25,000 matched users.
Two constraints worth noting: the same audience cannot be both included and excluded in one campaign, and the post-exclusion minimum means a tight inclusion list minus a big exclusion list can silently make a campaign unusable. If you plan to run "customers minus recent purchasers," check the arithmetic before you build it.
The September 2026 change matters most on the exclusion side. The audience you exclude no longer has to reach 25,000 matched users itself — only the eligible audience that remains after exclusions still has to clear the floor. That unlocks the precise suppression lists that were previously impossible: refund and chargeback lists, churn-risk cohorts, employees and contractors, a single enterprise account's domain, people who complained. Small, specific, high-value suppression is now the cheapest win available in most accounts.
Bid multipliers at the ad-group level
- Create or edit an ad group, open Advanced settings.
- Go to Audience bid adjustments and select Add multiplier.
- Choose a ready custom audience and enter a multiplier between 0.1x and 10x. Add more as needed and save.
The multiplier scales the ad group's maximum bid when the viewer matches the audience. OpenAI's own examples set the tone: 2x for high-value customers, 5x for people who previously engaged with your brand, 0.5x for lower-priority lists. If a viewer sits in several selected audiences, the highest matching multiplier wins — they do not stack or average. Since the auction is second-price, a higher multiplier raises your ceiling, not necessarily what you pay; see how ChatGPT ads pricing works.
Identifier formatting and hashing, exactly right
| Identifier | Rules |
|---|---|
| Valid address with one @. Uppercase is normalized to lowercase; leading/trailing spaces removed; internal spaces rejected | |
| Phone | E.164 format with + and country code (e.g. +14155550123). Spaces, dashes, parentheses, periods are stripped; numbers without a country code are rejected |
| Hashed email | SHA-256 of the normalized email (lowercased, trimmed) — a 64-character hex digest |
| Hashed phone | SHA-256 of the normalized E.164 number including + and country code — a 64-character hex digest |
| Google Advertising ID (GAID) | The Android advertising identifier, in its standard lowercase hyphenated UUID form. Supported since September 2026 — the route in for app-first advertisers whose first-party data is device-shaped rather than email-shaped |
Hashing is optional — Ads Manager accepts plain identifiers — but pre-hashing means raw customer data never leaves your systems, which your security review will thank you for. The critical detail is normalize first, then hash: hash User@Example.com without lowercasing and it will never match. On a Mac or Linux machine, one line produces a correct digest:
# email: lowercase + trim, then SHA-256
echo -n "user@example.com" | tr '[:upper:]' '[:lower:]' | shasum -a 256
# phone: E.164 with + and country code, then SHA-256
echo -n "+14155550123" | shasum -a 256
The -n matters — a trailing newline inside the hash silently breaks every match in the file.
Six operator playbooks
- The suppression baseline. Before anything else: exclude your customer list from every prospecting campaign. This is day-one hygiene on Meta and Google, and it is now finally possible here. Every dollar it saves was pure waste.
- The high-LTV bid-up. Keep prospecting broad, but add a 1.5-3x multiplier on your best-customer segment. You are not narrowing reach — you are telling the auction these viewers are worth more when they appear.
- The winback. Inclusion campaign on lapsed customers, paired with a context hint describing re-evaluation moments ("comparing alternatives," "frustrated with their current tool") and copy that acknowledges they know you.
- The prospect-list accelerator. B2B teams: upload your qualified-lead or event list as an inclusion, and let hints handle the moment. You reach known pipeline exactly when they are researching the category.
- The launch-to-base. New product or plan? Inclusion on the customer base, exclusion on people who already bought the new thing. With editable audiences this now runs as a live loop: push buyers into the exclusion audience as they convert, rather than re-uploading a fresh snapshot each month.
- The maintained suppression set. Build a small number of long-lived, well-named exclusion audiences — customers, refunders, churn risks, employees — wire them into every prospecting campaign once, and keep them current with weekly add/remove deltas and a monthly full replace. Because they are references rather than snapshots, the campaigns never need touching again, and none of these lists has to clear 25,000 matched users to be useful.
Merchants running commerce through ChatGPT should pair these with a clean product feed — the catalog layer audiences and ads both sit on.
Mistakes to avoid
- Uploading a barely-25k list. Matching shrinkage will drop you under the minimum. Ship your biggest clean list.
- Hashing without normalizing. Uppercase emails or non-E.164 phones hashed as-is match nothing, and the audience quietly comes back Too small.
- Mixing identifier types in an unheadered file. Mixing types is allowed now, but the parser needs to know what each column is — use a headered CSV, not a bare TXT.
- Expecting multipliers to gate delivery. They price; include/exclude gates. Using a 0.1x as a "soft exclusion" still pays to reach that audience.
- Still treating audiences as immutable snapshots. They are editable now. If your process still rebuilds and archives a list every month, you are doing manual work the platform will do for you — and breaking campaign references every time you do it.
- Replacing an audience without checking what uses it. The flip side of editable membership: an edit reaches every campaign and ad group referencing that audience at once. Convenient for suppression, dangerous for a careless full replace.
- Skipping small suppression lists. Sub-25,000 audiences can be excluded now. Refunders, churn risks, employees, a problem account's domain — small lists are the highest-value exclusions you have and they no longer need to clear a floor.
- Letting audiences do the hints' job. Inclusion without a sharp context hint buys the right person in the wrong moment. Relevance still sets your price.
Done for you: Context Hint Strategy
Writing hints is easy; building targeting you can actually read when the platform reports nothing per hint is not. Our context hint strategy engagement harvests your buyers’ real language and designs the ad-group architecture around it — from $3,999.
Frequently asked questions
What are custom audiences in ChatGPT ads?
Custom audiences let you upload your own customer or prospect lists — email addresses, phone numbers or Google Advertising IDs (GAID), plain or SHA-256 hashed — and use them in ChatGPT Ads in three ways: include audiences to limit a campaign to known people, exclude audiences to suppress delivery to them, or apply ad-group bid multipliers between 0.1x and 10x. They are audience-level controls only: Ads Manager never shows individual matched users.
What is the minimum size for a ChatGPT ads custom audience?
25,000 matched users — but since September 2026 that floor only governs inclusion. An audience must reach 25,000 matched users to be used as a targeting audience or attached to a bid multiplier, and OpenAI recommends at least 100,000. Audiences below 25,000 matched users can now be used for exclusions, which is what makes precise suppression lists — refunders, churn risks, employees, a single problem account — practical. If you combine included and excluded audiences in one campaign, the eligible audience remaining after exclusions must still meet the 25,000 minimum.
Can I retarget my existing customers in ChatGPT ads?
Yes. Upload a customer list as a custom audience and use it as a campaign-level inclusion to reach only those people, or attach an ad-group bid multiplier above 1x to bid more competitively when a known customer is the viewer. This is the ChatGPT equivalent of Meta Custom Audiences or Google Customer Match.
Can I exclude existing customers from a ChatGPT ads campaign?
Yes. Add the customer list as a campaign-level exclusion audience and the campaign will not deliver to anyone in it. This is the standard suppression-list pattern for prospecting campaigns, and it did not exist in ChatGPT ads before custom audiences.
What file format does a ChatGPT ads audience upload need?
A CSV or TXT file up to 500 MB. TXT files take one identifier per line. CSV files may have no header, or a header named exactly email, phone_number, email_sha256, or phone_number_sha256. Since September 2026 identifier types can be mixed in the same request — use a headered CSV when you mix, so each column is identified — and audiences can be built beyond 5,000,000 members. Emails are normalized to lowercase and trimmed; phone numbers must be E.164 with a country code. Google Advertising ID (GAID) is also supported.
Do I need to hash my customer list before uploading to ChatGPT ads?
No, but you can and often should. Ads Manager accepts plain email addresses or phone numbers and also SHA-256 hashed versions of either. Hashing before upload means raw identifiers never leave your systems: hash the normalized value — lowercased, trimmed email or E.164 phone — into a 64-character SHA-256 hex digest.
How do bid multipliers work in ChatGPT ads?
At the ad-group level, under Advanced settings, you attach a multiplier between 0.1x and 10x to a ready custom audience. The multiplier raises or lowers the ad group's maximum bid when the viewer belongs to that audience. If a viewer matches several audiences, the highest multiplier applies. Multipliers change your bid, not who is eligible to see the campaign.
How long does a custom audience take to process?
Usually about 20 to 30 minutes, varying with file size. The audience moves through statuses such as Processing, Upload pending, Indexing, and Publishing before reaching Ready. Too small means it missed the 25,000 matched-user minimum — it cannot be used for inclusion or bid multipliers, but since September 2026 it can still be used as an exclusion. Failed means the file could not be processed, usually a formatting problem. Membership edits are processed the same way, so an audience is briefly unusable after a large change.
Can I edit a custom audience after creating it?
Yes, since September 2026. You can add, remove or replace members without recreating the audience — add for incremental growth, remove for churn and deletion requests, replace for a full re-sync from your source of truth. This retired the old immutable-snapshot model where every refresh meant building a new audience and archiving the old one. Two caveats: edits go through matching and processing, so leave time before a launch, and an edit propagates to every campaign and ad group referencing that audience — check what uses a list before you replace it.
Do custom audiences replace context hints?
No — they stack. Context hints still decide which conversations your ads are relevant to; custom audiences decide which people the campaign may or may not reach, and how hard you bid on them. The strongest setups combine a sharp context hint with an inclusion or exclusion list and a bid multiplier on high-value segments.
Can I use GAID in ChatGPT ads custom audiences?
Yes. Google Advertising ID (GAID) became a supported identifier type in September 2026, alongside email, phone number and their SHA-256 hashed forms. It is the practical route in for app-first advertisers whose first-party data is device-shaped rather than email-shaped, and because identifier types can now be mixed in one request, you can supply GAID alongside email and phone to raise the match rate on the same customers rather than reaching new ones.
How big can a ChatGPT ads custom audience be?
Larger than the original five-million ceiling — since September 2026 audiences can be built beyond 5,000,000 members. Individual file uploads are still capped at 500 MB, so a very large audience is assembled across multiple uploads using the add operation rather than one oversized file. Ads Manager reports audience size in ranges rather than exact counts, and those ranges became more granular in the same release.
Sources and further reading
- OpenAI Help Center — Set up custom audiences for your campaign (the primary source for every limit, status, and formatting rule on this page).
- OpenAI Help Center — ChatGPT Ads documentation.
- OpenAI Ads product updates, September 2026 — custom audience membership editing (add / remove / replace), mixed identifier types in a single request, exclusion use below the 25,000 matched-user minimum, audiences beyond 5,000,000 members, more granular audience-size ranges, and Google Advertising ID (GAID) support.
- Context Hints — the definitive guide to context hints, how ChatGPT ads work, and the Ads Manager setup walkthrough.
Want your first-party data working in ChatGPT ads?
30 minutes with Tarun. We will map your customer segments to inclusions, exclusions, and multipliers — and pair each with the context hint that makes the auction cheap.
Book a discovery call