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 June 6, 2026 13 min read

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.

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.

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 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

  1. Go to Settings in Ads Manager.
  2. Open the Audiences tab.
  3. Select Create custom audience.
  4. 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.
  5. Choose the identifier type that matches your file.
  6. 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:

StatusMeaning
ReadyProcessed, met the 25,000 minimum, usable in campaigns and ad groups
Processing / Upload pending / Indexing / PublishingStill being prepared — not usable yet
Too smallUnder 25,000 matched users — cannot be used; upload a bigger list
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 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:

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

  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

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

  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, 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

  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 one file. One type per upload — split emails and phones into separate audiences.
  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. 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.
  6. 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

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.