In Google Ads, when a campaign goes wrong, you open the search terms report and see what people typed. In ChatGPT Ads that report doesn't exist: OpenAI doesn't share conversations with advertisers. What you get is aggregated figures, each with its own delay, and a handful of statuses that explain why an ad isn't serving.
Reading those figures properly, and understanding that an empty report is information too, is half the job on such a young platform.
What you can see
The main metrics are impressions, clicks, spend, CTR, average CPC, average CPM and conversions. The platform also separates conversions after a click from those that arrive after someone sees the ad without clicking it; the latter are informational only: they aren't billed and don't feed into optimisation. Every query combines three axes:
| Axis | Options |
|---|---|
| Level | Account, campaign, ad group or ad |
| Granularity | Hour, day, month or period total |
| Breakdown | Country, device, platform or product: one per query |
What that table does not tell you, and is worth knowing before you build a report: the metrics available change with the cut. By day you get everything; by hour there are no conversions (impressions, clicks and spend only); and as soon as you ask for a breakdown, the only thing that splits up is impressions.
The surfaces it distinguishes are the Android app, the Android web, the desktop web, the iOS app and the iOS web.
The breakdown has two limits, and the second one is the one that really hurts:
- One per query. You can look by country and, in another query, by platform, but not platform within each country.
- It only splits impressions. There is no such thing as "spend by country" or "clicks by device": those columns do not come split out. What the breakdown tells you is where your ad is seen, not where your money goes or where your conversions come from.
So if you need to know which country or which device is profitable for you, do not look for it in the breakdown: split it in your structure, with one campaign per platform or per country (lesson 7 of this module). Each campaign has its own spend and its own conversions, and then they really can be compared. It is extra work, but it is the only way to have the figure.
When the data arrives
| Metric | When it appears | How to read it |
|---|---|---|
| Impressions, clicks and CTR | Within minutes | They tell you whether delivery is starting |
| Spend | Later | Zero spend doesn't mean there are no charges |
| Conversions | With daily processing: at least a day | Don't judge today's |
Practical rule: decide on closed days; today's figures are provisional.
⚠️ Pitfall: seeing clicks with zero spend and thinking that traffic is free or that billing has failed. Spend arrives after clicks.
What you won't find
There is no conversation or query report, so there are no "search terms" either. It's a privacy decision: advertisers receive aggregated data (views, clicks) and never conversations, chat history, memories, names, emails, precise locations or IP addresses.
So how do you know which context works? Through structure: one ad group per intent, each with its own context hints (lesson 1 of this module), and by comparing groups against each other. Your structure is your search terms report.
Cross-checking with your analytics
Add UTM parameters to each ad's URL (a different utm_content per
ad, for example): they're static, persist through the click and any
analytics tool can read them. Even so, OpenAI's clicks and your visits
won't match, for several reasons:
- Consent: people who reject cookies may not show up in your analytics.
- Bots: OpenAI's crawlers visit your landing pages. In our analytics, OAI-AdsBot, OAI-SearchBot and ChatGPT-User appeared right during the review.
- Your own checks: when we verified the ad URLs with a program, our analytics recorded them as people arriving from the ad. We now filter them out by requiring a browser to confirm the visit.
- Links that lose parameters: a redirect that doesn't keep the full URL turns the visit into "direct".
Don't chase a click-perfect match: watch that the gap stays stable. If it suddenly widens, something has changed.
💡 Ninja trick: filter your own checks and known bots out of your analytics before launching. Otherwise, in the first week, right when the review happens, you'll see visits "from the ad" that belong to nobody.
Diagnosis: everything active and not a single impression
It happened to us at launch: 8 approved ads, a bid that wasn't low and zero impressions. The campaign's diagnostics gave the reason: "account brand review in progress". Until the brand was approved, on 16 September, nothing was delivered. The empty report wasn't a reporting failure: it was the signal that something was blocking delivery. Check in this order:
| What to check | Why it blocks | What to do |
|---|---|---|
| Account review (brand or integrity) | With an account review pending, nothing is delivered | Wait; changing the brand can trigger another review |
| Ad status | In review or rejected, it doesn't serve | Edit the rejected ad and it goes back to review |
| Campaign and ad group | An active ad needs an active campaign and ad group | Activate them, although activating isn't enough if another condition fails |
| Budget and spend cap | When they run out, delivery stops | Check both: they apply separately |
| Bid | A low bid loses auctions | The low-bid warning is guidance, not a block |
With invoice billing, also check the account's daily limit. And remember that editing an approved ad creates a new version that goes through another review.
The Ads Manager shows the reason on the campaign, ad group or ad itself, and warns separately when the bid falls short. But no reason showing doesn't promise impressions: even with everything green, you need conversations in which your ad is relevant.
What to remember
- There's no search terms or conversation report: your intent-based structure is your report.
- One breakdown per query; to cross axes, split them into campaigns.
- Impressions and clicks within minutes; spend later; conversions at least a day later.
- Your visits won't match the clicks: consent, bots, your own checks and links that lose parameters.
- No impressions? Check in order: account, ad, campaign and ad group, budget and caps, bid.
- An empty report isn't an error: it's a signal.