Custom audiences in ChatGPT ads: setup, exclusions, and bid multipliers
Custom audiences let you upload your own customer or prospect lists — email addresses or phone numbers — 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. This guide covers the full setup — file rules, the 25,000 matched-user minimum, SHA-256 hashing, inclusion and exclusion logic — plus the retargeting playbooks that carry straight over from paid social.
The short version
- What: upload email or phone 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 per audience; OpenAI recommends 100,000+.
- File: CSV or TXT, up to 500 MB and 5,000,000 identifiers, one identifier type per upload. Lists cannot be edited after creation.
- 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.
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, up to 5,000,000 identifiers per upload.
- One identifier type per upload: email, phone number, SHA-256 hashed email, or SHA-256 hashed phone — never mixed in one file.
- TXT: one identifier per line.
- CSV: header optional; if present, the column must be named exactly
email,phone_number,email_sha256, orphone_number_sha256. - Immutable: audiences cannot be edited after creation. To update a list, create a new audience from a fresh file and archive the old one.
Size the list generously before you upload. The audience needs 25,000 matched users to be usable, 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, so ship the biggest clean list you have.
Creating the audience in Ads Manager
- Go to Settings in Ads Manager.
- Open the Audiences tab.
- Select Create custom audience.
- Enter a name — use a convention that encodes source and date, like
customers-all-2026-06, since you will be archiving and replacing these over time. - Choose the identifier type that matches your file.
- Upload the file, review, and select Create.
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 in campaigns and ad groups |
| Processing / Upload pending / Indexing / Publishing | Still being prepared — not usable yet |
| Too small | Under 25,000 matched users — cannot be used; upload a bigger list |
| 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 you under the minimum.
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.
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 |
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.
Five 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, refreshed monthly. Remember lists are snapshots — schedule the re-upload.
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 one file. One type per upload — split emails and phones into separate audiences.
- Expecting multipliers to gate delivery. They price; include/exclude gates. Using a 0.1x as a "soft exclusion" still pays to reach that audience.
- Treating audiences as living lists. They are immutable snapshots. New customers keep seeing prospecting ads until you re-upload and swap the exclusion — set a refresh cadence.
- 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.
Frequently asked questions
What are custom audiences in ChatGPT ads?
Custom audiences let you upload your own customer or prospect lists, using email addresses or phone numbers, 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 when a viewer matches the audience.
What is the minimum size for a ChatGPT ads custom audience?
Each custom audience must contain at least 25,000 matched users before it can be used, and OpenAI recommends at least 100,000. If you combine included and excluded audiences in one campaign, the eligible audience remaining after exclusions must also 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 with up to 5,000,000 identifiers, one identifier type per upload. 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. Emails are normalized to lowercase; phone numbers must be E.164 format with the plus sign and country code.
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, and Failed means the file could not be processed — usually a formatting issue.
Can I edit a custom audience after creating it?
No. Custom audiences cannot be edited after creation. To change a list, create a new audience from an updated file and archive the old one. Plan a refresh cadence — for example monthly — because the audience is a snapshot of your list at upload time.
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.
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.
- 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