AttrifastDashboard
Blog / Attribution

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

12 min readUpdated Jul 2026

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.

Part of the AI revenue attribution hub, the AI Search Hub, and the tracking guide for ChatGPT traffic.

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, same period, two methods

Share of signups attributed to Claude — same company, same period, two methods

Source: Otterly.ai signup-survey study, July 2026 — 'Claude Drives 10.6% of Our Signups. Google Analytics Says 0.1%'

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 measuresReferrers that survive transitWhat respondents rememberSessions joined to Stripe payments
AI visits with stripped referrer❌ Filed as Direct✅ Recovered from memory✅ Recovered from detection signals
Response/coverageEvery visitThe fraction who answerEvery session + every payment
Numeric precisionPrecise but wrong bucketDirectional, noisyPrecise, 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 runFreeCheapA 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

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:

What's actually inside GA4's 'Direct' bucket

What's actually inside GA4's 'Direct' bucket

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.

AI traffic: what the median SMB dashboard reports vs what detection finds

AI traffic: what the median SMB dashboard reports vs what detection finds

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 visitors vs Google organic

Conversion rate: AI-referred visitors vs Google organic

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)

Revenue per visitor by AI engine (USD)

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.

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: 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 $15/mo. The methodology behind the benchmark numbers above is published on our research page.

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

QuestionSurveyGA4 (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 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.

Reading this with an AI assistant?Ask Perplexity about this article →

Find revenue hiding in your traffic

Discover which marketing channels bring customers so you can grow your business, fast.

Start free trial →

7-day free trial · $15/mo · cancel anytime