1. Overview
The destination addresses the audience by name. On the first run it looks the name up on your ad account and creates the audience if it is not there yet, so there is no ID to copy between OpenAI and Nekt. Every run after that updates the same audience. Each row of your input table contributes one identifier — an email address or a phone number. Rows with a blank value are skipped, duplicates within a run are sent once, and a value that is already a SHA-256 hash is detected and never hashed twice.2. Important considerations
- Minimum size. An audience generally needs about 25,000 matched users before OpenAI lets you use it for targeting or bid adjustments. Sending 25,000 identifiers does not guarantee that many matches. The audience’s
readystatus in Ads Manager is the authoritative signal. - Processing time. OpenAI takes roughly 20 to 30 minutes to process a membership change before the audience is usable again.
- Enabled per account. Using an audience in campaign targeting, and applying ad-group bid multipliers, are switched on by OpenAI for each ad account. If either is unavailable, ask your OpenAI representative to enable it for the account.
- First-party data only. Only upload audience data you have the right to use for advertising, and never broker-sourced data. Confirm your use complies with the required rights, notices, consents and legal bases, and with OpenAI’s Ad Tools Terms, before sending anything.
3. Configuring the destination
- In the Destinations tab, click the “Add destination” button at the top right of your screen. Then select the OpenAI Ads - Custom Audiences option from the list of connectors.
- Click Next and you’ll be prompted to add your access.
1
Open Ads Manager
Sign in at ads.openai.com with the ad account whose audience you want to keep in sync.
2
Go to Settings
Open the Settings tab.
3
Issue an API key
Create a new API key and copy the value.
This is not the same credential as an OpenAI API key from
platform.openai.com. The Ads API uses its own key, issued from Ads Manager, and each key is tied to a single ad account.- Ads API key: the key you copied from Ads Manager.
- Audience name: the name of the audience to keep in sync. It is created on the first run if the ad account does not have it yet.
-
Identifier type: the kind of identifier every row of your table carries. An audience holds a single type.
-
Write mode: how the table changes the audience.
- Audience description (optional): applied to the audience when Nekt creates it.
- Audience ID (optional): the ID of an existing audience, used instead of the name lookup. Leave it empty unless two audiences share the same name.
- Continue on error: keep syncing the remaining rows after OpenAI refuses one. When off, the run stops at the first refused row.
- Dry run: log what would be written without writing anything, to validate a new column mapping.
Choosing an unhashed identifier type and letting OpenAI normalize the value gives the highest match rate, because OpenAI applies its own normalization rules before matching. Choose a hashed type when your policy is that raw personal data must not leave the Lakehouse.
- Click Next.
4. Select your data to send
-
Select the layer and then the table holding the customer list you want to send.
Tip: The table can be found more easily by typing its name.
- Click Next.
5. Map your data to the destination
This destination has a single field. Map it to the column of your table that holds the identifier.
Once the field is mapped, click Next.
6. Configure your OpenAI Ads Custom Audiences destination
- Describe your destination for easy identification within your organization. You can inform things like what data it brings, to which team it belongs, etc.
- To define your Trigger, consider how frequently the audience needs to reflect changes in the source table.
- Click Done.
Check your new destination!
- Once completed, you’ll receive confirmation that your new destination is set up.
- You can view it on the Destinations page. For the audience to appear in Ads Manager, wait for the pipeline to run — you can trigger it manually with the refresh icon. Remember that OpenAI then takes 20 to 30 minutes to finish processing the membership before the audience can be used.
A full replacement is never applied from an empty result. If the input table produces no usable identifiers, the audience is left untouched, so a failed upstream run cannot empty an audience your campaigns are targeting.
If you encounter any issues, reach out to us via Slack, and we’ll gladly assist you!