Custom audiences in ChatGPT ads: setup, exclusions, and bid multipliers

Tarun Kapoor, founder of Context Hints, seated at a wooden desk with a soft city light behind him.Tarun Kapoor Updated 4 September 2026 16 min read

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.

A scattered cloud of tiny blue glass discs flowing along a thin stream of light into a large glass ring, where they settle into an orderly cluster — identifiers becoming a defined audience.
Identifiers in, audience out: a list of emails or phone numbers becomes a reusable delivery and bidding control.

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:

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.

BehaviourBeforeNow
Editing membershipImmutable — rebuild and archive to refreshAdd, remove or replace members in place, without recreating the audience
Identifier typesOne type per upload, never mixedMixed identifier types in the same request
Audiences under 25,000 matchedUnusable — status Too smallUsable for exclusions; the 25,000 floor still governs inclusion targeting
Maximum size5,000,000 identifiersAudiences beyond 5,000,000 members
Reported sizeCoarse rangesMore granular audience-size ranges
Identifier types supportedEmail 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

UseWhere it livesWhat it doesClassic use case
InclusionCampaign levelLimits eligibility to people in one or more selected audiencesUpsell or winback campaigns to known customers
ExclusionCampaign levelPrevents delivery to people in selected audiencesSuppressing existing customers from prospecting
Bid multiplierAd group (Advanced settings)Scales the ad group's max bid 0.1x-10x when the viewer matches2x 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:

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

  1. Go to Settings in Ads Manager.
  2. Open the Audiences tab.
  3. Select Create custom audience.
  4. 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.
  5. Choose the identifier type — or supply a headered CSV if you are mixing types.
  6. 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:

OperationWhat it doesUse it for
AddMerges new identifiers into the existing membershipIncremental growth — new customers, new leads, new purchasers since the last sync
RemoveDeletes the supplied identifiers from the membershipChurn, unsubscribes, deletion requests, people who aged out of a window
ReplaceSwaps the entire membership for the supplied fileA 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:

StatusMeaning
ReadyProcessed, met the 25,000 minimum, usable for inclusion, exclusion and bid multipliers
Processing / Upload pending / Indexing / PublishingStill being prepared — not usable yet
Too smallUnder 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
FailedFile 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:

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

  1. Create or edit an ad group, open Advanced settings.
  2. Go to Audience bid adjustments and select Add multiplier.
  3. 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

IdentifierRules
EmailValid address with one @. Uppercase is normalized to lowercase; leading/trailing spaces removed; internal spaces rejected
PhoneE.164 format with + and country code (e.g. +14155550123). Spaces, dashes, parentheses, periods are stripped; numbers without a country code are rejected
Hashed emailSHA-256 of the normalized email (lowercased, trimmed) — a 64-character hex digest
Hashed phoneSHA-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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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

  1. Uploading a barely-25k list. Matching shrinkage will drop you under the minimum. Ship your biggest clean list.
  2. Hashing without normalizing. Uppercase emails or non-E.164 phones hashed as-is match nothing, and the audience quietly comes back Too small.
  3. 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.
  4. Expecting multipliers to gate delivery. They price; include/exclude gates. Using a 0.1x as a "soft exclusion" still pays to reach that audience.
  5. 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.
  6. 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.
  7. 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.
  8. 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

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
Tarun Kapoor, founder of Context Hints, seated at a wooden desk with a soft city light behind him.
Tarun Kapoor
Founder & CEO, Context Hints

Twelve years of media buying across GroupM, WPP, Ogilvy & Mather, and Neil Patel Digital. Has personally owned media for Nestlé, Sage, Qualcomm, Aetna, Weight Watchers, Chubb and Novotel.