GA4 Says AI Sent You 23 Visitors. My Server Log Says 425 in a Fifth of the Time.
If you want to know whether AI search is sending you business, the obvious move is to open Google Analytics and look at referrals from chatgpt.com. I did that this week on a client site, and then compared it against a second instrument on the same site over the same period.
The two numbers differ by about seventy times. Both are correct. The gap is the actual story, and if you're making decisions off the GA4 figure alone you are reading roughly one and a half percent of the channel.
What does GA4 actually report for AI traffic?
Straight from the property, one live multi-location home-services site, 1 August to 1 September:
| Source | Sessions |
|---|---|
(direct) |
3,048 |
google |
1,507 |
(not set) |
107 |
| Booking subdomain | 63 |
bing |
47 |
duckduckgo |
34 |
| All AI platforms combined | 23 |
Broken out, the AI row is: chatgpt.com 14, perplexity 4, gemini.google.com 3, claude.ai 2.
Twenty-three sessions out of 4,901. 0.47% of traffic, in a month where the same site's presence in AI answers was climbing steadily. On a second site in a different market, the same query returns exactly one AI session in a month.
One reconciliation, because I have published a different figure for this before: earlier writing on this site quotes 26 visits across a six-week window in July and August. Same property, same definition, earlier and longer window. This post uses a clean calendar month, 1 August to 1 September, which is why the number is 23 rather than 26. Neither supersedes the other and both are the same instrument — but a metric quoted without its window is how two true numbers end up looking like a contradiction.
Read literally, that says AI search is a rounding error and you should stop thinking about it. That is the conclusion I keep hearing from business owners, and it is what the data honestly shows — from that instrument.
What does the server see over the same period?
The other instrument is a log that records every request from a known AI user agent, classified by purpose, before the page cache. On the same site, 25 August to 1 September — eight days, not thirty-two:
| Agent | Requests | Purpose |
|---|---|---|
| ChatGPT-User | 256 | fetching a page to answer a person |
| Claude-User | 129 | fetching a page to answer a person |
| Perplexity-User | 40 | fetching a page to answer a person |
| Total live answer fetches | 425 | eight days |
Normalise the windows and the comparison is brutal:
| Instrument | Per day |
|---|---|
| Live answer fetches (server log) | ~53 |
| AI sessions (GA4) | ~0.7 |
A factor of about seventy. Fifty-odd times a day an assistant reaches into this site to answer somebody's question, and less than once a day does a human being arrive as a measurable session.
Why can't GA4 see this?
Four reasons, and only one of them is fixable.
1. There is usually no click. This is the big one and it isn't a bug — it's the product working. Someone asks about a broken appliance, the assistant composes an answer using the site, and the answer contains what the person needed. In home services it often contains the phone number. They call. GA4 was never involved, because a browser never loaded a page. The visit that GA4 is built to count did not happen; the business impact did.
2. Assistant apps often send no referrer. When a click does happen from inside a native app or a webview, the referrer is frequently stripped. That session lands in (direct). Note the table above: (direct) is 62% of all traffic on this site. Some meaningful share of AI-driven visitors is sitting inside that bucket, permanently indistinguishable from someone typing the domain.
3. The path is rarely one hop. Real behaviour: the assistant names three companies, the person Googles the one they liked, then arrives. GA4 correctly attributes that to google / organic. The AI answer created the demand; organic search gets the credit. Nothing in a channel report can undo this.
4. Consent and blocking. Whatever fraction of your visitors GA4 misses generally, it misses here too.
Only reason two is partly addressable, and even then you're recovering a slice of a slice.
Then what is worth setting up in GA4?
Plenty — as long as you stop expecting it to size the channel and use it for what it's genuinely good at: telling you what the people who do arrive are worth.
Create an AI channel group rather than reading sessionSource by hand. In Admin → Data display → Channel groups, add a custom channel matching source contains chatgpt, openai, perplexity, gemini, claude, copilot, edgeservices. Now AI stops hiding inside Referral and appears in every standard report with no filtering.
Tag every link you control that an assistant might repeat. If your llms.txt, your booking page, or a syndicated data asset carries a UTM, then the clicks you get from those are unambiguous. You will never tag the assistant's own citation link, but you can tag everything downstream of it.
Mark the conversion, not the session. Phone calls and form submissions are the only reason any of this matters. A channel with 23 sessions and 4 booked jobs is a better channel than one with 900 sessions and none, and you can only see that if the conversion is instrumented.
Then treat the number as a floor, not a measurement. Twenty-three sessions means "at least twenty-three". It does not mean "AI sent us twenty-three people".
What closes the gap properly?
Two instruments, one on each side of the click, plus a key that survives the journey.
On the machine side, the server log — a census of what assistants fetch, per URL, which no third-party tool provides because it isn't visible from outside. That's the fast feedback loop: rewrite a page and its live-fetch count moves within days. How it's built, and what it explicitly cannot prove, is on the Citation Tracker page. A fetch is not a citation and I don't claim it is.
On the human side, a durable first-touch mark that survives return visits and brand searches, carried into the lead itself next to the phone number — and the phone number is the key that opens the CRM, where a job has a dollar amount. That chain is full-cycle attribution, and it's the only way a call that started in a chat window ends up attributable at all.
The reason this matters more in home services than almost anywhere else: the money moves over the phone, the job is created by hand, and there's no source field. The same blind spot is why paid lead platforms get away with charging for leads that were never customers — a separate, mechanical recovery described on LSA recovery. Two of the four reasons GA4 undercounts AI are structural to the industry rather than to the analytics.
What should you conclude from 0.47%?
Not "AI doesn't work here", and not "AI is 70× bigger than analytics says". Both are overclaims.
What the two instruments together support is narrower and more useful:
- The machines are engaging with this site constantly — about fifty live fetches a day, measured, not sampled.
- Almost none of that shows up as measurable web traffic, and it never will, because the answer is consumed inside the chat.
- Therefore the correct KPI is not sessions. It's whether booked jobs carry an origin, which requires building something GA4 doesn't ship with.
- And the honest status of "how much revenue came from AI" on this site today is: instrumented, not yet answered. When there's a number I'll publish it, including if it's zero.
If you want the wider frame — the four different things people mean by AI visibility and which instrument sees each — that's in its own post. And if you're wondering which of your pages the assistants are actually reaching for, the server log answers that too: on this site, 207 URLs out of 1,703.
I build the measurement layer that sits on both sides of this gap — server-side AI logging and first-touch attribution that reaches the invoice. Scope and prices are public on pricing. If your analytics says AI sends you nothing and you'd like to know whether that's true, let's talk.
Related:
