OpenAI Ads is the first ad channel to run inside an LLM, and the brands that measure it will be the ones who started measuring on day one.
Lifesight now connects directly to OpenAI Ads. Spend, structure, creative and device data sync daily from the OpenAI Advertiser API and land in the same tables as Meta, Google, TikTok, and every other channel you run. No CSV uploads. No separate reporting surface to learn.
Most teams testing OpenAI Ads today are reading it inside the Ads Manager, in isolation from everything else they buy. That holds up for a fortnight of testing. It stops holding up the moment someone asks how the channel compares to the rest of the plan, what it did last month, or which creative is absorbing the budget.
This post covers what the API exposes, what it withholds, what Lifesight does with both, and what an advertiser can honestly claim about the channel today.
How OpenAI Ads works
The mechanics matter here, because they determine what can be measured later. Four things define the platform.
The hierarchy is familiar: Campaign, ad group, ad. Budget and flight dates sit at campaign level, the bid sits at ad group level, and the creative sits at ad level. Anyone who has built in Google or Meta will recognise the pattern immediately.
Targeting is written, not selected: There are no keywords, no audience segments, and no remarketing pools. Advertisers write context hints, which are plain-language descriptions of the conversations where the ad belongs.
The model reads the conversation in progress, weighs it against your context hint alongside your headline, description, and landing page, and decides whether the ad fits. Geographic targeting at country level is the only conventional parameter.
Delivery is decided by a relevance-weighted second-price auction: Every eligible conversation triggers an auction among ads the model considers a match. Bid is set as a maximum CPM for Reach campaigns or a maximum CPC for Clicks campaigns, and relevance is weighted alongside it, so the highest bid does not automatically win. Creative quality and context-hint precision carry real weight in delivery, not just in performance.
The ad unit is deliberately small: A brand name, headline, short description, image, and a link, rendered as a labelled sponsored card near the assistant’s response. No video, no carousel, no product feed. Every account and every campaign passes review before serving.
Two consequences follow for measurement. The unit you actually optimise is the context hint and the creative together, because those are the inputs the matching model reads. And the ad reaches people mid-research rather than mid-purchase, which shapes where the resulting conversion is likely to be recorded.
How to measure OpenAI Ads and AI chat advertising
Measurement questions on a new channel tend to get collapsed into one. They are better kept separate, because each is answerable with a different grade of evidence, and only one of the three is fully answerable today.
Is it delivering? Answerable now, from platform data. Impressions, clicks, spend, CTR, and effective CPC and CPM tell you whether the account is healthy, whether the creative earns attention, and what reach costs. This is the operational layer and platform data is the right source for it. Read it daily during a test.
Is revenue following exposure? Answerable now, from your data, with a caveat. Conversions and revenue have to come from your own side: site events, server-side conversions, order records. Joining them to the channel gives you an observed relationship, which is worth having and is not the same as a causal one.
The caveat is structural. Because targeting is context-driven, the ad tends to reach someone while they are still researching. The purchase that follows may be recorded against a branded search, a direct visit, or an email, days later. Observed performance on this channel will usually understate it, and any platform-side conversion count will usually flatter it. Treat both as directional.
Did it cause incremental revenue? Not answerable yet, and not by anyone. Causal reads need either a holdout you can enforce or enough spend variation for a model to separate the channel from everything else moving at the same time.
The platform does not currently support the geographic granularity that clean holdout design needs, and no advertiser has accumulated the spend history a model would require. That is a function of the channel’s age, not of any measurement vendor’s capability, and claims to the contrary are worth reading sceptically.
So the practical position for anyone spending now is to run the channel on the first two, be explicit internally that the third is pending, and build toward it deliberately.
Three things make that build easier later. Keep the channel cleanly separated in your own data, so its history is unambiguous when methods mature. Vary spend rather than holding it flat, since a channel that has only ever run at one level gives a model nothing to learn from.
And structure your tests around context hints and creative, because those are the two levers the matching model actually reads, which makes them the only variables worth isolating this early.
What Lifesight pulls from OpenAI Ads
The connector authenticates against the OpenAI Advertiser API with a key you issue from your OpenAI Ads Manager. Every sync brings across the full account structure.
| Object | Fields Lifesight stores | Why it matters |
|---|---|---|
| Ad account | Account ID, name, website, currency, time zone, brand review status | Currency and time zone are normalised on ingest, so OpenAI Ads spend is comparable to every other channel without manual reconciliation. Brand review status is the single most common reason a new account shows zero delivery |
| Campaign | Name, status, description, bidding type, lifetime budget, start and end time, location targeting | Campaigns carry the geo targeting, so this is the object that holds any market-level structure |
| Ad group | Name, status, bid, billing event type, context hints, product-set filters | Bid and pacing context, plus the targeting intent given to the system |
| Ad | Name, status, review status, headline, body copy, image, destination URL, price text | On this platform the ad is the creative. One creative per ad, no asset library behind it |
And the performance data.
| Dataset | Metrics | Grain | Refresh |
|---|---|---|---|
| Ad performance | Impressions, clicks, spend | Ad by day | Daily, with a rolling re-pull so late-settling figures correct themselves |
| Geo performance | Impressions, clicks, spend | Ad by country by day | Daily |
| Device performance | Impressions, clicks, spend | Ad by device by day | Daily |
| Budgets and bids | Campaign lifetime budget, ad group max bid | Entity by snapshot day | Daily snapshot |
That budget row carries a detail worth understanding. The API returns the current state only, with no change history. If a bid moves on a Tuesday, nothing in the platform records what it was on Monday. A daily snapshot is the only way to build that record, and it exists only from the day ingestion starts.
Historical backfill runs to two years where the account has history. In practice, most accounts backfill to their first campaign, because the channel itself is new.
What OpenAI Ads does not provide
Stating this plainly is a credibility asset rather than a weakness. Every honest conversation about measuring this channel starts here.
| Not available from OpenAI | What it means | How Lifesight handles it |
|---|---|---|
| Conversions and revenue in the Advertiser API | The reporting endpoints the integration pulls return impressions, clicks, and spend. Any conversion figure configured inside Ads Manager is platform-measured and self-reported, so ROAS and CPA cannot be derived independently from OpenAI’s data | Lifesight supplies the outcome side from your own data: site events, server-side conversions, and order records. This is how Lifesight treats every channel, so nothing in the pipeline is special-cased |
| Region and DMA in reporting | Delivery reporting resolves to country, not state or metro | Country is the honest grain and Lifesight labels it as such. The region and DMA catalog is stored as reference data, not presented as delivery precision that does not exist |
| Audience, demographic, or interest data | No age, gender, income, segment, or custom audience reporting exists | Not a dependency for the outcome-based methods this channel will eventually need |
| Meaningful spend history | Media mix models need several quarters of spend variation | Ingest from day one so the history exists later |
| User-level identifiers usable for attribution | Multi-touch attribution has nothing durable to work with | Points the eventual measurement approach toward outcome-based methods rather than tracking |
None of this is a Lifesight limitation, and none of it is OpenAI getting something wrong. It is the shape of a privacy-first ad product that launched recently. What matters is whether your reporting reflects that shape or papers over it.
What you get on the first sync
Blended cross-channel reporting. OpenAI Ads spend lands in the same tables, taxonomy, and tactic structure as the rest of your media. It appears in blended views on the first sync, at ad and creative grain.
Creative performance on a brand-new format. Every delivery row already carries the headline, body copy, image, and destination URL, because the ad and the creative are the same object.
Creative reporting arrives with delivery reporting rather than needing a separate build. The industry has no benchmarks for conversational ad formats yet, which means the advertisers running them now are the ones who get to build their own.
Country and device breakouts. Both refresh daily and sit beside the equivalent cuts from every other channel, at the grain the platform genuinely supports.
Budget pacing and spend efficiency. Daily budget and bid snapshots power pacing alerts, which matters more than usual on a channel where budgets are set for the flight rather than the day.
A history that starts accumulating now. The quietest benefit, and the one that compounds. No advertiser can put OpenAI Ads into a media mix model today, because there is not yet enough spend variation to estimate it.
What you can do is capture clean ad by country by day history from your first campaign, so the channel enters the model cleanly when it becomes viable rather than entering with a gap where its first quarters should be.
Getting started
- Generate an API key in your OpenAI Ads Manager
- Add OpenAI Ads from your Lifesight integrations page and paste the key
- Confirm the first sync has completed and backfill has run
- Check that your own conversion data is flowing into Lifesight, since that is the side of the equation OpenAI does not supply
- Review the channel in your blended cross-channel views alongside the rest of your media
If structure syncs but delivery reads zero, check brand review status on the ad account first. That accounts for most cases.
Frequently asked questions
Does this need a CSV upload? No. It is a direct API connection using a key you generate in your OpenAI Ads Manager.
Can I see this spend next to my other channels? Yes, from the first sync, with currency and time zone normalised so the comparison holds without manual reconciliation.
Can I get ROAS or CPA from OpenAI’s reporting? Not independently. The Advertiser API reporting endpoints return impressions, clicks, and spend. Conversion measurement configured inside Ads Manager is platform-measured and self-reported. Lifesight computes outcome metrics from your own conversion data instead, exactly as it does for your other channels.
How granular is the geo data? Delivery reporting is country level. Campaign location targeting is captured as configured, and OpenAI’s reference catalog of country, region, and DMA location IDs is stored alongside it.
Do I get creative-level reporting? Yes. The headline, body copy, image, and destination URL come across with every delivery row, because the ad and the creative are one object on this platform.
Why are budgets snapshotted daily? The API returns current values only and keeps no change history. A daily snapshot is the only way to know what a budget or bid was three weeks ago.
Can OpenAI Ads go into my media mix model? Not yet, and not for anyone. The channel has not run long enough to produce the spend variation a model needs. Starting ingestion now is what makes it usable when it has.
How far back does the backfill go? Up to two years where the account has that much history. Most accounts backfill to their first campaign.
How often does data refresh? Daily, with a rolling re-pull so figures that settle late are corrected rather than left wrong.
My account is connected but shows no delivery. Why? Check brand review status first. An account still under review will sync its structure but will not be serving.
You may also like
Essential resources for your success




