← Back to Blog
Analytics & Data MarketingB2B MarketingContent StrategySEO Strategy

Attribution When Buyers Research in ChatGPT

ChatGPT passed 900 million weekly users while AI channels sent 0.14% of measured web visits. Here are the four proxies that still work, how to run a self-report field, and the arithmetic showing why 34 answers decide nothing.

SPSantosh Paudel· September 6, 2026· 13 min read
Table of contents

Last-click attribution cannot see a buyer who reads about you inside ChatGPT and then types your domain into the address bar. That session lands in your analytics as Direct with no source, no medium, no keyword. You are left with four usable proxies: branded search volume in Search Console, the shape of your direct traffic, a self-reported attribution field on high-intent forms, and referrals from review and community sites. All four are indirect. None replaces a controlled test. This post covers how to read each one, how to word and normalise a self-report field, and the confidence arithmetic that decides whether your answers mean anything yet.

The gap between reach and measurable referral

Two verified numbers frame the problem, and they point in opposite directions.

OpenAI said ChatGPT passed 900 million weekly active users on 27 February 2026, reported by Search Engine Land from OpenAI's own announcement. That is the audience.

Now the referral side. Semrush's traffic channel mix study analysed billions of visits across more than 50,000 websites and 17 industries across the whole of 2025. AI channels accounted for 0.14% of total visits. Google AI Mode added 0.01%. Organic search was 16.04%. Direct traffic was 64.69%. AI traffic grew 66.02% year on year against organic search's 2.38%, so the direction is not in doubt — the absolute base is just very small.

Nine hundred million weekly users producing 0.14% of measured visits is the entire dark funnel argument in one line, with one caveat: the two figures are a year apart. The user count is 27 February 2026; the referral share is calendar 2025, when the audience was smaller. Read it as a rough gap, not a ratio. The reading happens; the click mostly does not.

Prompting volume is smaller than the headlines suggest

SparkToro and Datos published Search Happens Everywhere using a 2025 desktop clickstream panel across the US, the 27 EU states and the UK, covering 41 search-heavy domains. In Q4 2025 in the US, Google took 73.7% of desktop searches. Every AI tool combined took 3.2%.

I bring that up because the dark funnel is usually sold with an inflated denominator. The honest framing is that AI research is a small, fast-growing, disproportionately high-intent slice that your instrumentation cannot see at all. Semrush's separate AI search traffic study (21 July 2025) claims an AI search visitor is 4.4x as valuable as an organic one by conversion rate. I am citing it with a caveat: that article discloses its topic set — over 500 marketing and SEO terms — but no sample size, date range or conversion definition. Treat 4.4x as a directional vendor claim, not a benchmark you can plan against.

What breaks in last-click, mechanically

Three separate failures, and they compound.

The referrer never arrives. A user reading a ChatGPT answer often copies your URL and pastes it, or opens it in the mobile app's in-app browser. Either way the session starts with no referrer and lands in Direct.

The influence happens weeks before the click. The model surfaced your name in a comparison in March. The buyer searched your brand in July. Last-click credits brand search, which credits nothing.

There is no query to see. Google Search Console shows you the query. ChatGPT shows you nothing. There is no export, no impressions table, no position. The blindness is structural. There is no setting to fix.

I went looking for a rigorous study quantifying how much AI traffic is misfiled as Direct and did not find one I would stand behind. The share that circulates most widely traces back through a chain of agency posts to a single vendor blog with no stated sample construction, no date range and no definition of how an AI-referred session was identified, so I am leaving it out rather than laundering it through one more citation. The same goes for a much-quoted analyst figure on how little of a B2B buying cycle is spent with suppliers: I have only ever seen it in summaries, never in a document that says how it was measured. A number with no method attached is not evidence, and the gap is more useful left visible.

The four proxies, and where each one lies

SignalWhat it proxiesHow to read itWhere it lies
Branded search impressions (GSC)Someone learned your name somewhere untrackedPlot impressions for queries containing your brand, weekly. Step changes matter; the level does notRises after any PR, podcast or LinkedIn spike. Cannot separate AI from word of mouth
Direct traffic to deep URLsPasted links, usually from an AI answer or a DMSegment Direct by landing page. Direct to a deep service URL is pasted; Direct to the homepage is a returning visitorBots, email clients stripping referrers, and your own team all land here
Self-reported attribution on formsThe channel the buyer consciously remembersRead as a ranking of memorability, not a share of influenceRecency bias, social desirability, and answers people give to get past the field
Review and community referrals (G2, Reddit, Slack groups)The places models actually quoteReferral report filtered to those domains; also check whether the model cites them when you prompt itVolume is tiny, so month-to-month noise looks like signal

The column that matters most is the last one. Each proxy fails in a specific, predictable direction, and if you know the direction you can still use the number. I wrote more about picking metrics that survive contact with a real business in marketing analytics for non-data people.

The proxy that changed my mind about my own site

On santoshpaudel.me, Search Console for the 85 days to 3 September 2026 shows 22 clicks from 4,553 impressions, a 0.48% CTR. The query "santosh paudel" ranks at average position 8.2 and earns zero clicks. Branded impressions with no branded clicks is not a dark funnel signal. It is a title-and-snippet problem, or a page that does not deserve position 8.2.

Before you spend a quarter instrumenting proxies, check that the pages the proxies point at are worth arriving on. In my case 111 of 182 ranking pages earned five or fewer impressions in the quarter, and I ended up cutting the published count from 267 to 103 — the full teardown is in 389 pages, 22 clicks. If your corpus is in that shape, a content audit will move more revenue than any attribution project will.

Running a self-report field properly

This is the only proxy you actively control, so it is worth doing carefully.

Placement and wording

Put it on the highest-intent form you have (demo request, contact, checkout) and nowhere else. Newsletter signups produce answers from people who will never buy, which pollutes the sample you actually care about.

Ask "How did you first hear about me?" as an open text field. The moment you list options you have decided the answer set in advance, which is exactly the failure mode that hides new channels; a dropdown written in 2024 has no ChatGPT option. Make it required if you can stand the friction, and read the answers back on the call — my discovery call framework has a slot for exactly this.

Normalising the free text

Free text is only useful once it is bucketed the same way every quarter. My own site does not carry this field yet, and it is worth being precise about why that matters: contact_submissions stores name, email, service, subject and message, with no attribution column at all, and the only buyer-facing source column is a fixed six-value enum on the clients table. There is a free-text source on newsletter_subscribers, but it records which form or lead magnet fired, not what the person would have told you. That enum is the dropdown failure above, shipped. So the query below is the one I will run once the free-text column exists. It is demonstrated here against a literal list of the kind of answers people actually write, so you can paste it into any Postgres console and watch the buckets fall out:

WITH answers(id, src) AS (VALUES
  (1, 'ChatGPT told me about you'), (2, 'a colleague recommended you'),
  (3, 'Googled content audit'),     (4, 'your linkedin post'),
  (5, 'Perplexity cited your blog'),(6, 'your newsletter'),
  (7, '  '),                        (8, 'saw you somewhere')
)
SELECT
  CASE
    WHEN src ~* 'chatgpt|openai|perplexity|claude|gemini|copilot|llm' THEN 'AI assistant'
    WHEN src ~* 'friend|colleague|referr|recommend|word of mouth|coworker' THEN 'Person'
    WHEN src ~* 'google|search|seo|bing' THEN 'Search engine'
    WHEN src ~* 'linkedin|twitter|reddit|youtube|discord|slack' THEN 'Social'
    WHEN src ~* 'newsletter|email|mailing' THEN 'Email'
    WHEN btrim(COALESCE(src, '')) = '' THEN 'Blank'
    ELSE 'Unmatched'
  END AS bucket,
  count(*) AS n,
  round(100.0 * count(*) / sum(count(*)) OVER (), 1) AS pct
FROM answers
GROUP BY 1
ORDER BY n DESC;

Two deliberate choices in there. The AI branch runs first, so "asked ChatGPT then googled you" counts as AI, because the model was the discovery event and the search was navigation. And a bare "AI" with no product name falls through to Unmatched on purpose. Read the Unmatched bucket by hand every quarter; that is where next year's channel shows up before you have a regex for it.

The arithmetic that stops you over-reading the answers

Say a quarter produces 34 answers and ChatGPT leads with 9. Here is what that is worth, using a Wilson score interval, which behaves correctly at small counts and at zero where the textbook normal interval does not:

"""Self-reported attribution: share, 95% Wilson interval, and whether it decides anything."""
from math import sqrt

Z = 1.96  # 95%

def wilson(k, n):
    """(low, high) for k of n. Correct at k=0 and k=n."""
    if n == 0:
        return (0.0, 1.0)
    p = k / n
    d = 1 + Z * Z / n
    centre = (p + Z * Z / (2 * n)) / d
    half = (Z / d) * sqrt(p * (1 - p) / n + Z * Z / (4 * n * n))
    return (max(0.0, centre - half), min(1.0, centre + half))

def report(counts, min_n=30, max_width=0.15):
    n = sum(counts.values())
    rows = []
    for channel, k in sorted(counts.items(), key=lambda kv: -kv[1]):
        lo, hi = wilson(k, n)
        rows.append({"channel": channel, "k": k, "share": k / n, "lo": lo, "hi": hi,
                     "actionable": n >= min_n and (hi - lo) <= max_width})
    return n, rows

if __name__ == "__main__":
    q3 = {"ChatGPT or other AI assistant": 9, "Referral from a person": 7,
          "Google search": 6, "LinkedIn": 5, "Newsletter": 3, "Other / blank": 4}
    n, rows = report(q3)
    print(f"n = {n}\n")
    print(f"{'channel':<32}{'k':>4}{'share':>8}{'95% CI':>18}  act?")
    for r in rows:
        ci = f"{r['lo']:.1%} - {r['hi']:.1%}"
        print(f"{r['channel']:<32}{r['k']:>4}{r['share']:>8.1%}{ci:>18}  "
              f"{'yes' if r['actionable'] else 'NO'}")

    assert wilson(0, 34)[0] == 0.0 and wilson(34, 34)[1] == 1.0
    assert not any(r["actionable"] for r in rows), "34 answers decide nothing"
    print("\nself-check passed")

Output:

n = 34

channel                            k   share            95% CI  act?
ChatGPT or other AI assistant      9   26.5%     14.6% - 43.1%  NO
Referral from a person             7   20.6%     10.3% - 36.8%  NO
Google search                      6   17.6%      8.3% - 33.5%  NO
LinkedIn                           5   14.7%      6.4% - 30.1%  NO
Other / blank                      4   11.8%      4.7% - 26.6%  NO
Newsletter                         3    8.8%      3.0% - 23.0%  NO

self-check passed

ChatGPT's true share sits somewhere between 14.6% and 43.1%. Person referrals sit between 10.3% and 36.8%. Those ranges overlap almost completely, so "AI is our biggest channel" is a claim this data will not carry.

How many answers you actually need

Holding the observed 26.5% share and asking when the interval narrows:

  • Width under 15 points (roughly plus or minus 7.5): 130 answers
  • Width under 5 points: 1,194 answers

A solo consultancy collecting 34 answers a quarter reaches 130 in about four quarters, and that assumes almost everyone fills the field in; blanks and skipped forms push it further out. That is the real cadence of this measurement. Anyone reporting a monthly self-report breakdown from a dozen answers is reporting noise with a chart on top.

None of this is a test

Every proxy above is observational. They tell you what correlated with a good quarter. They cannot tell you what caused it.

The cleanest read I have on my own site is closer to a natural experiment than a designed one. Nepal produced 8 clicks from 74 impressions — a 10.8% CTR at position 9.2 — while the United States produced zero clicks from 970 impressions at average position 38.8. Same author, same domain, same quarter. Position and name recognition explain that gap. No attribution model would have found it.

If you want causation you need a holdout: switch a channel off in one segment for a defined window and watch enquiries, or stagger a publishing push by geography. That is slow and expensive, which is why almost nobody does it, and why the honest version of this discipline is "here are four indicators, here are their biases, here is the direction we lean."

For tracking whether the models mention you at all, a scheduled prompt log beats a dashboard. I built a small AI visibility monitor for that, and wrote up how small brands show up in AI answers separately.

FAQ

Can I see traffic from ChatGPT in Google Analytics?

Only partially. Sessions that arrive via a clicked link carry chatgpt.com as the referrer and can be grouped into a custom channel. Sessions from pasted URLs and in-app browsers arrive with no referrer and land in Direct, and there is no way to recover them after the fact. Semrush measured AI channels at 0.14% of total visits across 50,000+ sites in 2025, so whatever GA4 shows you will already be a small number before any undercount.

Is self-reported attribution accurate?

No, and it is not meant to be. It measures which channel a buyer consciously remembers, which is biased toward whatever happened most recently and toward answers that sound reasonable out loud. Its value is that it is the only instrument that can name a channel you never tagged. Treat it as a rough ordering of what buyers remember, and always read it beside your branded search trend rather than on its own.

How do I know if buyers are researching me in ChatGPT?

Ask the models directly on a schedule, logging the same set of buying prompts weekly and recording whether you are named and what gets cited. Then watch branded search impressions in Search Console for step changes with no campaign behind them. Both are indicators. Neither is proof.

Should I stop reporting last-click attribution?

Keep it and stop calling it attribution. Last-click is a reliable record of the final touch and nothing more. Report it beside branded search, direct-to-deep-URL sessions and self-report counts, and label the whole panel as indicators rather than a model.

Worried your attribution is measuring an underperforming corpus rather than a dark funnel? Most sites I look at have a content problem wearing an attribution problem's clothes. Get a content audit or get in touch.

Free resource

Get the AI-SEO Content Checklist

A practical checklist for getting your own content cited by Google AI Overviews, ChatGPT, and Perplexity — not just ranked.

No spam. Unsubscribe anytime.

Browse all free guides →

Run this on your own numbers

Content ROI & Payback Calculator — free, no signup, runs in your browser.

Open the calculator →

Want to implement this with guidance?

Santosh helps founders turn insights like this into real systems.

Content Consulting

External Resources

Further Reading & Tools

Related Posts

01
12 min
SEOContent Strategy
TodayCase Study

389 Pages, 22 Clicks: A Teardown of My Own Site

Search Console gave my site 22 clicks from 4,553 impressions in 85 days. Here is the full teardown: the bad numbers, the cut from 267 posts to 103, and the outcome I cannot claim yet.

Read article
02
14 min
SEOSEO Strategy
TodayAnalytics & Data Marketing

Which Keywords Have You Already Lost to AI Overviews?

Impressions holding while CTR collapses is the AI Overview footprint. Here is the BigQuery query, a standard-library Python triage script, and what happened when I ran the same test against my own 4,553 impressions and 22 clicks.

Read article
03
14 min
SEO StrategyContent Strategy
TodaySEO Strategy

Perplexity freshness and the publishing cadence maths

What is actually published about freshness in AI citations, where the two biggest datasets disagree, and the arithmetic for when refreshing an old page beats writing a new one.

Read article