# The AI Search Attribution Gap: GA4 Says 0.1%, Your Signup Survey Says 10.6% — Payment Data Says Something Else

> Otterly's signup surveys found Claude driving 10.6% of signups while GA4 showed 0.1% — a 106× gap. Both numbers are honest, and both are wrong in different directions. Here is what the three measurement methods — last-click analytics, self-report surveys, and payment-verified joins — can and cannot see, with Stripe-verified data from 200 sites.

Author: Vincent Ruan (https://x.com/0xVinceAI)
Publisher: Attrifast — https://attrifast.com
Last updated: 2026-08-01
Canonical: https://attrifast.com/blog/ai-search-attribution-gap

*Part of the [AI revenue attribution hub](/ai-revenue-attribution), the [AI Search Hub](/ai-search), and the [tracking guide for ChatGPT traffic](/track-chatgpt-traffic).*

**TL;DR**

- Otterly.ai — a competitor of ours, credit where due — published a signup-survey study in July: **Claude drives 10.6% of their signups, while Google Analytics credits it 0.1%** [1]. A 106× gap between what users say and what analytics sees.
- Both numbers are honestly produced and **both are wrong in different directions**: GA4 undercounts because AI clients strip the referrer (65–82% of ChatGPT visits land in Direct [2][4]); surveys overcount noisily because memory, response rates, and vocabulary are fuzzy — and they stop at the signup, so they never see dollars.
- The third method — a **server-side join between the AI-referred session and the Stripe payment** — is the only one that outputs revenue. Across our 200-site benchmark: **34% of GA4 "Direct" is AI-referred, the median SMB undercounts AI traffic by 64%**, and AI visitors convert at **2.7% vs 1.4%** for Google organic [3].
- The practical move is a measurement ladder, not a tool war: keep the survey (it proves the gap), patch GA4 (it recovers the surviving referrers), and add the payment join (it turns the gap into a dollar figure). [See the per-engine revenue split inside Attrifast](/features/revenue-attribution) → [Start free trial](/login)

In early July, Otterly.ai published one of the more useful data points of the year in AI search measurement: across their own signup surveys, **10.6% of new users said they found the product through Claude**, while Google Analytics attributed **0.1%** of signups to it [1]. They titled the post around that discrepancy, and they were right to — a 106× gap between the user's account and the analytics tool's account is not a rounding error. It is a broken measurement layer.

Full disclosure before anything else: Otterly is a competitor. They monitor AI search visibility; we do revenue attribution for AI traffic. I am writing about their study because it is good, honest, first-party data that deserves engagement — and because their survey method and our payment-join method disagree in an instructive way. This post is about *why* the three available measurement methods produce three different numbers from the same traffic, what each one structurally cannot see, and what the payment-verified version of the same question looks like across the 200 Stripe-connected sites in our benchmark [3].

## The 106× gap, and why both of its endpoints are honest

Start by taking both numbers seriously, because both were produced in good faith.

**Share of signups attributed to Claude — same company, two methods (%)**

| Category | Value |
|---|---|
| Signup survey (self-report) | 10.6% |
| GA4 last-click | 0.1% |

*Source: Otterly.ai, 'Claude Drives 10.6% of Our Signups. Google Analytics Says 0.1%', July 2026*

GA4's 0.1% is not a bug in GA4. It is GA4 accurately reporting what arrives at its doorstep. When a user clicks a link inside a Claude or ChatGPT answer, the AI client frequently strips the `Referer` header; the visit lands on your site carrying no origin, and GA4 files it — correctly, given what it can see — under `Direct/(none)`. Independent measurements and our own detection data put **65–82% of ChatGPT-originated visits in that Direct bucket** [2][4]. The engines differ (some Perplexity clicks keep a referrer; Copilot referrals arrive more intact; in-app browsers behave differently from web clients), but the direction is the same everywhere: the referrer dies in transit more often than it survives.

The survey's 10.6% is honest in the opposite way. It asks the one witness who was actually there — the user — and the user does not need a referrer header to remember "I asked Claude which tool to use and it suggested you." That is exactly the information the analytics layer lost, recovered from memory. This is why survey numbers for AI discovery run an order of magnitude or two above analytics numbers essentially everywhere the comparison has been run.

So the gap is real. Where I part ways with the survey method is on what to do next — because a survey has structural limits of its own, and they matter as soon as you try to spend money based on the number.

## What each method can and cannot see

There are three ways to attribute an AI-originated customer today. They are not competing answers to the same question; they are different instruments with different blind spots.

| | **Last-click analytics (GA4)** | **Signup survey (self-report)** | **Payment-verified join (server-side)** |
| --- | --- | --- | --- |
| What it measures | Referrers that survive transit | What respondents remember | Sessions joined to Stripe payments |
| AI visits with stripped referrer | ❌ Filed as Direct | ✅ Recovered from memory | ✅ Recovered from detection signals |
| Response/coverage | Every visit | The fraction who answer | Every session + every payment |
| Numeric precision | Precise but wrong bucket | Directional, noisy | Precise, transaction-grade |
| Sees revenue (not just signups) | Partially, if e-comm configured | ❌ Stops at signup | ✅ Dollars per engine, RPV, MRR |
| Continuous monitoring | ✅ | ❌ Point-in-time | ✅ |
| Cost to run | Free | Cheap | A tracking script + webhook |

The survey's blind spots are worth spelling out, because they are less discussed than GA4's:

- **Response bias.** Only a fraction of signups answer the "how did you hear about us" box, and the ones who do skew toward engaged users. You are extrapolating from a self-selected sample.
- **Recall compression.** Users report the *last memorable* touch, not the first. "Claude told me about you" and "I'd seen you on X for months, then asked Claude to compare tools" produce the same survey answer and very different attribution truths.
- **Vocabulary noise.** "AI", "ChatGPT" (used generically for every chatbot), "a friend sent me a link", and "Google" (meaning the AI Overview at the top of Google) all blur category boundaries in free-text answers.
- **It ends at the signup.** This is the structural one. A survey can tell you 10.6% of *signups* mention Claude. It cannot tell you whether those signups became paying customers, what they paid, or whether Claude-attributed customers are worth more or less than Google-attributed ones. For a revenue decision, signups are the wrong denominator.

## What the payment-verified version of the number looks like

Attrifast's approach is the third row of the table: detect AI-referred sessions server-side using every signal that survives (intact referrers, engine-specific URL parameters like `utm_source=chatgpt.com`, and known AI client patterns), store a first-party identifier, and join that identifier to the Stripe payment webhook when money actually moves. No memory, no sampling — a session and a transaction, joined on the server.

Before the aggregate numbers, here is what the method's output looks like on a single site — not a mockup, this is our own dashboard on one of our own products, last 30 days (domain and page paths blurred):

![The AI tab of the Attrifast dashboard on one of our own sites: 109 AI-engine visits over 30 days split by engine — ChatGPT 82, Copilot 10, Claude 6, Gemini 6, DeepSeek 2, Perplexity 2, Grok 1 — alongside 6,156 total visitors and $1,150 in attributed revenue](/blog/ai-search-attribution-gap/ai-traffic-dashboard.webp)

The AI tab reads 109 visits — 1.8% of the site's 6,156 — with ChatGPT carrying 82 of them, then Copilot, Claude, and Gemini in single digits. Every row is a session detected server-side, not a survey answer, and each engine carries its own conversion and revenue line downstream. Small counts, individually attributable: exactly the shape last-click analytics is worst at surfacing, and the shape the benchmark below describes at population scale.

Across the 200 Stripe-connected sites in our benchmark [3], that method produces four numbers that frame the same gap Otterly found, from the revenue side:

**Composition of GA4's 'Direct' bucket**

| Category | Value |
|---|---|
| AI-referred (mislabeled) | 34% |
| True direct + other | 66% |

*Source: Attrifast 200-site Stripe-connected benchmark, 2025-06 to 2026-05*

**34% of the traffic sitting in GA4's Direct bucket is AI-referred.** Not exotic long-tail traffic — ChatGPT, Perplexity, Claude, and Gemini visits whose referrer died in transit. If your Direct share has been creeping up for six quarters while "nothing changed," this is the most likely reason.

**Of every 100 AI-referred visits, how many the median SMB setup labels correctly**

| Category | Value |
|---|---|
| AI visits actually arriving | 100 |
| Correctly labeled as AI | 36 |

*Source: Attrifast 200-site Stripe-connected benchmark, 2025-06 to 2026-05*

**The median SMB undercounts its AI traffic by 64%.** For every 100 AI-referred visits arriving, the default analytics setup correctly labels about 36. The other 64 are financing your "Direct is growing" chart.

**Conversion rate: AI-referred vs Google organic (%)**

| Category | Value |
|---|---|
| AI-referred visitors | 2.7% |
| Google organic | 1.4% |

*Source: Attrifast 200-site Stripe-connected benchmark, 2025-06 to 2026-05*

**AI-referred visitors convert at 2.7%, versus 1.4% for Google organic in the same cohort.** A visitor who arrives from an AI answer has usually already had the comparison conversation — the engine did the shortlisting before the click. Independent studies point the same direction: Lantern's cohort analysis found AI-referred visitors converting at multiples of search visitors [5]. This is why the attribution gap is expensive rather than merely annoying: the traffic you are mislabeling is your *highest-intent* traffic.

**Revenue per visitor by AI engine (USD)**

| Category | Value |
|---|---|
| Claude | $1.94 |
| Perplexity | $1.42 |
| ChatGPT | $0.87 |

*Source: Attrifast 200-site Stripe-connected benchmark, 2025-06 to 2026-05*

**Revenue per visitor ranges from $0.87 (ChatGPT) to $1.42 (Perplexity) to $1.94 (Claude).** Claude sends the least volume and the most valuable visitors — a fact you cannot learn from a survey (signups, not dollars) or from GA4 (the sessions are in Direct). Ranking engines by visit count inverts their actual revenue order.

Notice what these numbers do to the survey-vs-GA4 debate: they don't split the difference, they change the units. The interesting question was never "is it 0.1% or 10.6% of signups" — it was "what is this channel worth," and neither of the first two methods can answer it even in principle.

## How to close the gap yourself, in ascending order of effort

You do not need to buy anything to start; the first two steps are free.

**1. Keep the survey — as a tripwire, not a measurement.** A "how did you hear about us" box is genuinely useful evidence that the gap exists in your funnel. When survey mentions of AI run far ahead of your analytics attribution, you have confirmed the mislabeling locally. Just resist putting the survey percentage in a budget model — it is a direction, not a denominator.

**2. Patch GA4 with a custom channel group.** Build an "AI search" channel matching the referrers that *do* survive — `chatgpt.com`, `perplexity.ai`, `gemini.google.com`, `copilot.microsoft.com` — plus `utm_source=chatgpt.com` (which ChatGPT itself appends to some outbound links). Step-by-step guides exist [6]. This is free and recovers the surviving minority. Be clear-eyed about the ceiling: you are recovering the 18–35% of visits whose referrer arrived intact, not the majority that arrive as Direct, and GA4 still cannot join any of it to a Stripe invoice without an export project. We wrote up the mechanics of where the traffic hides in [our dark-traffic breakdown](/blog/chatgpt-referral-traffic-not-showing-in-analytics).

**3. Add the payment join.** Server-side detection plus a session-to-payment webhook join is the step that changes the units from sessions to dollars. That is [the thing Attrifast is](/ai-revenue-attribution): a 4kb first-party script that detects AI-referred sessions, and a Stripe webhook join that credits each payment to the engine that sent the customer — RPV, conversion, and MRR per engine, continuously, at $9.99/mo. The methodology behind the benchmark numbers above is published on [our research page](/research).

A fair question is whether the three methods ever agree. Directionally, yes — and that agreement is the useful diagnostic. On sites running all three, the pattern is consistent: the survey says "AI is a real channel," the patched GA4 shows a small-but-growing AI channel, and the payment join shows the same channel 2–4× larger than patched GA4 with a conversion rate roughly double the site average. When your three instruments disagree in *that* shape, the instruments are working; each is measuring the layer it can see.

## The scoreboard

| Question | Survey | GA4 (patched) | Payment join |
| --- | --- | --- | --- |
| "Is AI search sending us customers?" | ✅ Yes/no signal | ✅ Partial count | ✅ Full count |
| "Which engine sends the most visitors?" | ❌ Too noisy | ⚠️ Surviving referrers only | ✅ |
| "Which engine sends the most *revenue*?" | ❌ | ❌ | ✅ RPV per engine |
| "What is our AI-attributed MRR?" | ❌ | ❌ | ✅ |
| "Is the gap real for us?" | ✅ The cheapest proof | ✅ Before/after patch delta | ✅ Quantified in dollars |

Otterly's study proved the gap with the survey method, and it deserves the attention it got — the 106× number made more founders check their Direct bucket than any tutorial on referrer plumbing ever has. The step after believing the gap exists is measuring it in the only unit that budgets understand. Payments don't misremember, don't skip the survey, and don't strip their own referrer.

*A short product note, since the article should not pretend the author has no interest: Attrifast is the payment-join method productized — AI session detection joined to Stripe on every `checkout.session.completed` webhook, with per-engine RPV and revenue reported continuously. Where a survey tells you AI drove signups and GA4 tells you it drove almost nothing, [the dashboard](/features/revenue-attribution) tells you which engine drove which dollars. The 200-site benchmark cited throughout is our aggregated, anonymized customer data; the methodology is on [the research page](/research).*

## Sources

1. [Claude Drives 10.6% of Our Signups. Google Analytics Says 0.1% — measuring AI search conversions](https://otterly.ai/blog/measure-ai-search-conversions/) — Otterly.ai, 2026
2. [Why ChatGPT referral traffic doesn](https://attrifast.com/blog/chatgpt-referral-traffic-not-showing-in-analytics) — Attrifast, 2026
3. [AI Traffic Revenue Benchmark 2026 — 200 Stripe-connected sites, per-engine RPV and conversion](https://attrifast.com/blog/ai-traffic-revenue-benchmark-2026) — Attrifast, 2026
4. [ChatGPT referral traffic study — May 2026 measurement of AI referral patterns](https://seranking.com/blog/chatgpt-referral-traffic-may-2026/) — SE Ranking, 2026
5. [ChatGPT drives 87% of AI referral traffic — cohort conversion analysis](https://www.asklantern.com/blogs/chatgpt-drives-87-of-ai-referral-traffic) — Lantern, 2026
6. [How to track AI traffic in Google Analytics 4 — custom channel group setup](https://www.analyticsmania.com/post/ai-traffic-in-google-analytics-4/) — Analytics Mania, 2026
7. [Are AI sites like ChatGPT sending your website traffic?](https://www.seerinteractive.com/insights/are-ai-sites-like-chatgpt-sending-your-website-traffic) — Seer Interactive, 2026
8. [Google AI Overviews linked to 25% drop in publisher referral traffic](https://digiday.com/media/google-ai-overviews-linked-to-25-drop-in-publisher-referral-traffic-new-data-shows/) — Digiday, 2025
9. [How to track ChatGPT and AI traffic in Google Analytics](https://surferseo.com/blog/track-chatgpt-ai-traffic-in-google-analytics/) — Surfer SEO, 2026
10. [ChatGPT traffic tracker — AI chatbot referral volumes](https://aisearch.similarweb.com/ai-chatbot-traffic/chatgpt-traffic-tracker/) — Similarweb, 2026

## FAQ

### What is the AI search attribution gap?

The AI search attribution gap is the difference between how much of your traffic and revenue actually originates from AI engines (ChatGPT, Claude, Perplexity, Gemini) and how much your analytics tool credits to them. It exists because AI clients strip or generalize the Referer header, so most AI-referred visits land in GA4's Direct/(none) bucket. The gap is large: Otterly measured 10.6% of signups self-attributing to Claude while GA4 showed 0.1% — a 106× difference — and Attrifast's 200-site Stripe benchmark finds 34% of GA4 'Direct' traffic is actually AI-referred.

### Why does GA4 show almost no AI search traffic?

Three plumbing reasons. First, AI chat clients frequently strip the Referer header when a user clicks a link inside an answer, so the visit arrives with no source and GA4 files it as Direct/(none). Second, in-app browsers and API-driven agents identify inconsistently, scattering visits across Direct, Unassigned, and generic referral buckets. Third, GA4's default channel groups only started recognizing some AI referrers recently, and only when the referrer survives. Independent measurements and our own data put 65–82% of ChatGPT-originated visits in the Direct bucket — so a GA4 report can show 0.1% while the true share is orders of magnitude higher.

### Are 'how did you hear about us' surveys accurate for AI attribution?

They are directionally valuable and numerically fuzzy. Surveys catch what analytics miss — a user who found you in a ChatGPT answer knows it, even if GA4 filed them under Direct — which is why survey numbers run far above analytics numbers. But they have known failure modes: only a fraction of signups answer, respondents misremember or name the last memorable touch rather than the first, vocabulary is inconsistent ('AI', 'ChatGPT', 'a friend sent a link'), and a signup survey can never tell you which answers became paying customers or what they spent. Treat the survey as proof the gap exists, not as the measurement.

### How do you measure revenue from AI search traffic accurately?

Move the measurement server-side and tie it to payments. The reliable pattern has three parts: detect AI-referred sessions at the edge using every available signal (surviving referrers, engine-specific URL parameters like utm_source=chatgpt.com, and known AI client patterns), store a first-party identifier scoped to your own domain, then join that identifier to the payment event — the Stripe invoice or checkout webhook — on the server. The join produces per-engine revenue, conversion rate, and revenue per visitor from transactions rather than memory. It is the only method of the three that outputs dollars.

### How much AI search traffic do SMBs really get?

More than their dashboards say. Across Attrifast's 200-site Stripe-connected benchmark, 34% of traffic sitting in GA4's Direct bucket is actually AI-referred, and the median SMB undercounts its AI traffic by 64%. The revenue skew is bigger than the traffic skew: AI-referred visitors convert at 2.7% versus 1.4% for Google organic in the same cohort, and revenue per visitor ranges from $0.87 (ChatGPT) to $1.94 (Claude). Small visit counts, disproportionate revenue — which is exactly the combination last-click analytics is worst at surfacing.

### Can I fix AI attribution inside GA4 alone?

Partially. You can build a custom channel group matching known AI referrers (chatgpt.com, perplexity.ai, gemini.google.com, copilot.microsoft.com) and add exclusions so those referrals stop landing in generic buckets. This recovers the minority of visits where the referrer survives — worth doing, and free. What it cannot recover is the majority where the header was stripped before arrival, and GA4 cannot join a recovered session to a Stripe payment without a separate integration project. A GA4 channel group narrows the gap; it does not close it.
