A custom audience is a list of your own customers or prospects, uploaded to Ads Manager and matched against signed-in ChatGPT users. You can point a campaign only at the people on it, keep it away from them, or bid more or less for an ad group when the viewer is on it. Inclusion and bid adjustments need at least 25,000 matched users; anything smaller still works for exclusion. Since September 2026 one file can mix identifier types, a list can pass five million members, and you can edit the members without rebuilding the audience or touching the campaigns that use it.
What a custom audience does here
Three things, at two levels. At the campaign level an audience can be included, which limits delivery to people in at least one included list, or excluded, which keeps the campaign away from anyone on the list. At the ad-group level an audience can carry a bid multiplier, which raises or lowers the group's maximum bid when the viewer matches. A campaign can include and exclude at once, and an excluded person is out even if they are also on an included list, but the same audience cannot sit on both sides of the same campaign.
Audiences are controls, and only controls. Ads Manager never shows you who matched, never lets you pick individuals, and deletes the uploaded file once it has been processed, usually within 24 hours. What you get back is a matched-user count in a size range.
The thresholds that decide what you can do
| Matched users | Include | Exclude | Bid multiplier |
|---|---|---|---|
| Under 25,000 | No | Yes | No |
| 25,000 to 100,000 | Yes | Yes | Yes |
| 100,000 and above | Yes, and what OpenAI recommends | Yes | Yes |
The number that counts is matched users, and it is always smaller than the rows you uploaded: duplicates, invalid values and identifiers that do not belong to a ChatGPT account are dropped, so a 40,000-row export can come back under the floor. An audience below 25,000 shows as Ready with an Exclusion only note, and if you combine an included list with exclusions, the audience that remains after the exclusions still has to clear 25,000.
For a services business the floor is the whole story. A CRM with 8,000 contacts cannot be targeted on this platform. It can be excluded, which is the more useful direction for most of them anyway: keep the ads away from current clients and open leads, and let the context hints find the new ones.
The five identifiers, and how to format them
| Identifier | Format | Hashing |
|---|---|---|
| Email address | One @, lowercase, trimmed | Optional: SHA-256 of the normalised value |
| Phone number | E.164, with + and country code | Optional: SHA-256 of the normalised value |
| Google Advertising ID | As issued, dashes kept | Never |
Plain and hashed versions of email and phone are separate column types, which makes five in all: email, phone_number, email_sha256, phone_number_sha256 and gaid. A CSV needs a header row naming each type it carries and can mix them; a TXT file takes one identifier per line and you choose the type at upload. Files are UTF-8, up to 500 MB, and a phone number without a country code is rejected. If you hash, hash the normalised value, the lowercase trimmed email or the full E.164 number including the plus sign, and send the 64-character hex digest.
Uploading, processing and updating a list
- +Tools, then Audiences, then Create audience. Name it, upload the file, confirm the identifier type for a TXT file, and create.
- +Processing takes about 20 to 30 minutes and scales with file size. The statuses in between, Upload pending, Indexing, Publishing, all mean not yet.
- +Ready means usable. Ready with Exclusion only means it matched fewer than 25,000 people. Failed means the file broke a format rule; check encoding, headers and phone formatting before retrying.
- +Members can be added, removed or replaced afterwards without recreating the audience, and every campaign and ad group already using it keeps working on the new membership.
That last point arrived on 4 September 2026 and changes how you run the list. Before it, a refreshed CRM export meant a new audience and a re-pointed campaign. Now a monthly replace keeps the exclusion current, which is the discipline that stops you paying to reach someone who signed last week.
Bid multipliers at the ad group
Under an ad group's Advanced settings, Audience bid adjustments takes a ready audience and a multiplier between 0.1x and 10x. When the viewer is in that audience the group's maximum bid is multiplied; when they are in several, the highest matching multiplier wins. OpenAI's own examples are 2x for high-value customers, 5x for people who have engaged with the brand before, and 0.5x for lower-priority lists. A multiplier changes the price you are willing to pay and nothing about who is eligible: eligibility is set by the include and exclude lists at the campaign level.
This is where a list earns its keep for anyone with a real customer base. A 5x multiplier on lapsed buyers, inside a campaign that otherwise runs on context hints, is a re-engagement layer the platform did not have before July 2026, and it still needs the 25,000 floor.
When it pays, and when it is theatre
- +Excluding current customers and open leads: worth doing from the first campaign, at any list size.
- +Including known buyers for a launch: worth doing above 100,000 matched users, with a bid multiplier, and with a tracked event so you can see whether the list converts differently.
- +Inclusion as the only targeting on a small list: rarely worth it. The matched count will be a fraction of the export and the campaign will struggle to deliver.
- +Hashing on your side: worth it if the data leaves a regulated system. The match rate is the same either way.
The list is one layer. The situation targeting that decides which conversations your ad joins still comes from the context hints, and the conversions that tell you whether the audience was worth the bid come from the tracking setup. When you would rather have the lists built, hashed, uploaded and refreshed for you, it is part of the managed service.

