On any given day the platform says 120 clicks and your analytics sees 83 sessions. It isn't a bug and you aren't being overcharged: they are two counters measuring different things, at different moments, with different rules. Anyone who doesn't know how big a gap is normal does one of two things: distrusts everything and never optimises, or swallows any figure and misses the breakage the day it arrives.
Two counters that don't measure the same thing
| The platform counts | You count | |
|---|---|---|
| What | Valid clicks (what gets billed) | Visits that get as far as running your measurement |
| When | At the moment of the click | When the page loads and, in Europe, when there is consent |
| On which day | Its own day boundary and time zone | Your analytics' boundary and time zone |
| Whom | Everyone who taps | Whoever you don't filter out as a bot |
OpenAI itself says its report, your analytics and other platforms will report different totals, and lists the reasons: attribution methods and windows, event timestamps and reporting time zones, browser, consent and storage conditions, different deduplication, configuration and modelled conversions. And it finishes with a line worth framing: a difference does not necessarily indicate an error.
The six normal reasons for the gap
- They left before it loaded. They tap, see it's slow and close: the platform has already counted its click and your measurement never ran. With a lot of mobile traffic, this one alone explains plenty.
- Consent refused. In Europe, with no advertising consent nothing is measured and nothing is sent, and what was blocked is not recovered later. There will be clicks your side never sees.
- Redirects that drop the click identifier. OpenAI appends its
click reference (
oppref) to the landing page URL and explicitly asks you to preserve it through redirects and page navigation. A link shortener or an old-school redirector throws it away. - Browser storage that isn't shared. If the ad lands on your website and the conversion happens on another subdomain, what one side stored the other can't see. Checked in our own account: our website and our panel weren't passing the source across.
- Bots and link scanners. OpenAI's crawlers visit the ad's landing page to validate it (official documentation) and email filters open links on their own. Unfiltered, your counter goes up with nobody there.
- The organic mention taken for the ad. When ChatGPT mentions your
site inside an answer, that visit arrives with
chatgpt.comas its source and it is not your ad. Mixing them inflates paid performance and will have you raising the bid on a campaign that isn't bringing that.
💡 Ninja trick: split by your URL parameter from day one, not by the referrer. A parameter of your own per ad tells the paid click from the organic mention with no ambiguity.
How much of a gap is normal
There is no official figure —OpenAI publishes no benchmarks of this kind— so be sceptical of anyone who gives you one. What can be said:
- Direction matters more than size. Your visits should always be fewer than their clicks. If they're more, you're counting bots or organic traffic.
- Stability rules. A similar ratio day after day is known noise: measure with it and compare periods. What breaks an account isn't a 30 % difference, it's one that changes without you changing anything.
- Compare complete days. Today is half-counted and yesterday can still move: the platform adjusts and conversions arrive up to seven days later.
Which signal really is worrying
| Signal | What it usually is |
|---|---|
| Clicks for days and zero measured visits | Measurement is broken or the URL doesn't arrive intact |
| More visits than clicks | You're counting bots or the organic mention |
| The ratio collapses overnight | Something changed on your site: new banner, new redirect, measurement down |
| Plenty of visits, all 1-2 seconds long | Not measurement: fit (previous lesson) |
On that last point, the criteria we use to score the quality of a visit in our own tools: bot from 70 out of 100 upwards, with fewer than 10 visits we don't judge, ≥ 50 % bots is an alarm and ≥ 20 %, or ≥ 60 % with no interaction at all, means keep an eye on it. These thresholds are provisional, calibrated on Google traffic and pending recalibration with ChatGPT. And bad traffic isn't the same as fraud: it's almost always a poor fit between ad, moment and device.
Our 17 September: 4,024 impressions, zero clicks and 19 people
📌 We measured this ourselves: on the first day our campaign served, the platform reported 4,024 impressions and 0 clicks (with a Clicks objective, no clicks means no spend: €0). Our analytics, on the other hand, counted 19 people arriving from the ad that day, bots already removed.
We tell it as a dated observation, not a rule: one day and figures that small prove nothing. The possible explanations —none confirmed— are the ones above: different day boundaries and time zones, clicks not counted as valid, and the lag with which data arrives. What we did get right: not touching anything because of a day like that, and spending the next one fixing measurement, which was the real problem. On 18/09 the first accepted conversion arrived.
Diagnosis tree, by elimination
- Does the platform report clicks? If not, you don't have a measurement problem but a delivery one: check reviews, statuses and bid.
- Does your analytics see visits from that source? If it sees zero, carry on.
- Strip out bots and scanners before drawing conclusions.
- Open the final URL yourself, exactly as it is in the ad, with a parameter attached, and see whether it survives the redirects.
- Test consent: accept and refuse, and check what gets measured in each case.
- Are you crossing subdomains? Check whether the source survives the jump.
- Separate the organic mention from the paid click using your parameter.
- If all of the above is fine, it's normal noise: stop chasing an exact match and decide on the trend.
What to remember
- Clicks and visits never match, and OpenAI itself says a difference is not necessarily an error.
- Normal reasons: bouncing before load, consent, redirects that drop the click identifier, subdomains, bots and the organic mention.
- Direction and stability matter more than size: fewer visits than clicks, in a similar ratio every day.
- Worry about zero visits with clicks, visits above clicks, or a ratio that collapses.
- Decide on complete days: today is half-counted and yesterday still moves.