Attrifast
ProductAI visibilityPricingDocsBlog
Log inStart free trial
ProductAI visibilityPricingDocsBlogLog in
Product
  • Track Website Traffic
  • Attribution Software
  • Website Visitor Tracking
  • SEO Dashboard
  • Analytics for SaaS
  • Revenue by Source
  • Traffic Source Tracking
  • Revenue Channel Attribution
  • Revenue Attribution
  • Privacy-First Analytics
  • Cookieless Analytics
  • UTM to Revenue
  • AI Visibility Score
  • Share of Voice (AI)
  • Prompt Tracking
  • AI Citation Tracking
  • ChatGPT Rank Tracker
  • AI Revenue Attribution
  • Pricing
Track AI Traffic
  • Track ChatGPT Traffic
  • Track Perplexity Traffic
  • Track Claude Traffic
  • Track Gemini Traffic
  • Track AI Overviews
  • Track Copilot Traffic
  • ChatGPT Revenue Attribution
  • Perplexity Revenue Attribution
  • Claude Revenue Attribution
  • Gemini Revenue Attribution
  • AI Visibility to Revenue
Use Cases
  • Stripe Analytics
  • Shopify Analytics
  • Stripe Attribution
  • For Bootstrapped SaaS
  • Affordable Attribution
Compare
  • vs Profound
  • vs Loamly
  • vs Peec AI
  • vs Otterly
  • vs Cometly
  • vs Segment
  • vs Google Analytics
  • vs Plausible
  • vs Fathom
  • vs Simple Analytics
  • vs PostHog
  • vs Matomo
  • vs Umami
  • vs Pirsch
  • vs Mixpanel
  • vs Amplitude
  • vs Heap
  • vs Hyros
  • vs AnyTrack
  • vs DataFast
  • vs Similarweb
  • All comparisons
Resources
  • GEO Hub
  • AEO Hub
  • AI Search Hub
  • Research
  • Best Conversion Tracking Software
  • ChatGPT vs Google Traffic
  • Mixpanel Alternative
  • Track Channel Revenue
  • First vs Last Touch
  • Cookieless Conversion Tracking
  • GA4 Attribution Limits
  • CAC by Channel
  • Stripe Conversion Tracking
  • Stripe Revenue Tracking
  • AEO vs SEO 2026
  • AI Traffic Benchmark
  • How to Rank in ChatGPT
  • Best AEO Tools 2026
  • Measure GEO ROI
  • Schema for AI Search
  • Dark AI Traffic in GA4
  • What Is Referral Traffic?
  • What Is Direct Traffic?
  • What Is Cookieless Analytics?
  • What Is Conversion Attribution?
  • AI Share of Voice
  • Documentation
  • View all posts
  • Multi-Touch Attribution
  • Free Tools
  • UTM Builder
  • UTM Checker
  • ROI Calculator
  • AI Readiness Checker
  • AI Crawler Directory
  • SEO + GEO Workflow
Company
  • About
  • Contact
  • Return Delay Penalty
  • Backlink RPV Scoring
  • AI Instructions
  • Live Demo
  • FAQ
  • Log in
© 2026 Attrifast · built by Vincent Ruan & Jessica Huang
AboutContactTermsPrivacy
Blog / Attribution

Sessions Told Us Our Best Channel. Revenue Told Us the Opposite.

9 min readPublished Aug 2026
JH
Jessica HuangCo-founder, Attrifast · August 2, 2026 · 9 min read

Our biggest traffic source was not our biggest revenue source, and it took two years to notice. What I read now instead of the sessions report — and where AI traffic hides.

Sessions Told Us Our Best Channel. Revenue Told Us the Opposite. — Our biggest traffic source was not our biggest revenue source, and it took two years to notice. What I read now instead of the sessions report — and where AI traffic hides.

I am not the one who writes the tracking code. Vincent does that. I ran the store side, which mostly meant that when a number looked wrong, I was the one who had to decide whether to keep spending against it.

This is about a number that looked right for two years and was not.

TL;DR

  • Sessions and revenue do not rank channels the same way. A channel's contribution is visitors × what a visitor is worth, and the second term varies by more than 4× across channels on the same store.
  • Revenue per visitor is the only channel number I trust now. In the 200-site benchmark, a Perplexity visitor is worth $1.42 and a Google organic visitor $0.61 — so 1,000 of one beats 2,000 of the other.
  • The channel we could not see was the one worth the most. A median 34% of what GA4 files as "Direct" is AI-referred, and under GA4's own rules Direct cannot receive attribution credit at all.
  • You cannot fix this by looking harder at the traffic report. It needs the session joined to the payment, which is a different piece of plumbing.
  • What I open on Monday: revenue per visitor by channel, the Direct row, and which pages the AI crawlers fetched. That is the whole routine.

The report I stopped opening

We started selling online in 2021. Shopify store, a small catalogue, the two of us doing everything. For the first year I opened the traffic report every Monday morning the way you check the weather — not really deciding anything with it, just wanting to know.

The report was consistent. One channel sat at the top of it almost every week. So that channel got the attention: more content aimed at it, more of the small budget we had, more of my time. That is what you are supposed to do with your best channel.

It was not our best channel. It was our biggest channel. Those turned out to be different things, and nothing in the report I was reading could have told me the difference, because the report only had one column that mattered and it was counting the wrong thing.

Here is the arithmetic I was missing. A channel's contribution to the business is:

visitors × what each visitor is worth

A sessions report gives you the first number, in large friendly type, sorted descending. It gives you nothing at all about the second. And the second number is not a rounding factor — across the channels on a single store it swings by more than four to one:

Revenue per visitor by channel — what a visit is actually worth (USD)
Revenue per visitor by channel — what a visit is actually worth (USD)

Source: Attrifast 200-site benchmark, cohort-blended RPV across Stripe-connected sites, June 2025 to May 2026

Read the top and bottom of that chart against each other. A Perplexity visitor is worth roughly five times an AI Overviews visitor and better than two times a Google organic one. Which means a thousand visits from the top of that list beats two thousand from the middle of it — and a traffic report, sorted by volume, would have shown you exactly the opposite conclusion in exactly the same week.

I want to be precise about what those figures are, because I have opinions about people who are not. They are cohort medians from 200 Stripe-connected sites, not our store's numbers, and your own will differ — that is rather the point of measuring instead of reading a benchmark. What travels between stores is not the values. It is the spread.

Volume rank and revenue rank are different lists

The failure mode is easy to state and weirdly hard to see from inside a dashboard: the channel ranking you act on depends entirely on which column you sorted by, and almost every default report sorts by the one that does not pay you.

What you sort byWhat it actually ranksWhat it hides
SessionsHow much attention a channel producedWhether that attention buys anything
Conversion rateHow often a visit becomes an orderOrder size — a channel can convert well on cheap baskets
Total revenueContribution, correctlyNothing, but it rewards whatever channel is simply largest
Revenue per visitorWhat one more visit is worthVolume — so read it alongside the count, never alone

Revenue per visitor is the one I check first, because it is the only one that answers the question I actually have on a Monday, which is where should the next hour go. Total revenue tells you where you are. RPV tells you where the margin is on the next visit you can earn. And because it already has volume in the denominator, a channel cannot climb it by being big.

The catch is that RPV is genuinely hard to compute honestly, and that is not a tooling failure so much as a plumbing one. You need the channel that started the session and the payment that session eventually produced, joined to each other. Analytics owns the first. Your payment processor owns the second. Nothing in the default setup introduces them.

We tried the plugins first. Shopify has plenty and most of them track something real — sessions, pageviews, an add-to-cart. None of them closed that join, so none of them could answer the question, and after a while I stopped opening those too.

Then a channel appeared that none of the reports had a row for

Sometime in 2024 the Direct row started growing and I could not explain it. Direct is supposed to be people typing your name in. Ours was climbing faster than anything that could plausibly be brand recall for a store our size.

Direct is where analytics puts a visit when it cannot see where the visit came from. Increasingly that means an AI assistant. When someone clicks a link inside a ChatGPT or Perplexity answer, the referrer is frequently stripped in transit — Clickport measured roughly two-thirds of ChatGPT clicks arriving with a referrer intact and the other third with nothing at all. The ones with nothing land in Direct.

What is actually inside the "Direct" row
What is actually inside the "Direct" row

Source: Attrifast 200-site benchmark — median share of GA4 Direct sessions traceable to an AI engine once a first-party visitor ID is carried through checkout

A third. And it is worse than mislabelling, which I would have shrugged at. Google's own attribution documentation says that every attribution model excludes direct visits from receiving credit unless the entire path is direct. So the traffic was not merely filed under the wrong name — it was structurally ineligible to be credited for anything, and the credit went to whatever paid or organic touch happened to sit in the path instead.

Which is how you end up doing what I did: pouring effort into the channel the report was praising, while the channel quietly producing better customers had no row of its own.

Better, not just different:

Conversion rate — AI-referred sessions vs Google organic
Conversion rate — AI-referred sessions vs Google organic

Source: Attrifast 200-site benchmark, B2B SaaS segment, AI-referred sessions vs Google organic on the same sites

Someone who arrives after asking an assistant a question has already had their comparison shopping done for them. They show up further along. That is the intuition, and the conversion numbers are consistent with it — though I would call it consistent rather than proven, since we cannot randomise who gets recommended by an AI engine and who does not.

The part that happens before anyone visits

The thing that took me longest to internalise is that by the time a buyer reaches your store from an AI answer, the important step already happened, somewhere you were not watching.

The assistant did not look at your store when the question was asked. It quoted pages a crawler fetched earlier — days or weeks earlier — and whether your pages were fetched and readable at that moment decided whether you could be named at all.

Attrifast AI crawler tracking view: a live log listing GPTBot fetching /pricing, PerplexityBot fetching a blog post, and ClaudeBot fetching /docs/install, each with a 200 response, under the heading "AI is reading your site right now"

That log is the closest thing AI search has to an index-status check, and it is the one report on this list a store owner can act on the same afternoon. If GPTBot has never fetched your comparison page, nothing on that page can be quoted back to a buyer, and no amount of writing more of them changes it. OpenAI, Anthropic and Perplexity all publish their crawler names and how to control them, so this is verifiable rather than mystical.

I check it for a narrow reason: it tells me whether a page I just published exists as far as an assistant is concerned. Everything else about AI visibility is slower and noisier. This part is binary.

Attrifast is the tracking Vincent and I wrote for our own store: one script tag, one Stripe key, and revenue per visitor by channel — including the ChatGPT, Perplexity and Claude visits your reports currently call Direct.

See it on your own store →

What I actually open on Monday

The routine is three things and takes about ten minutes. I am including it because when I was looking for this, every article I found was written for someone with an analytics team.

1. Revenue per visitor, by channel, last 30 days. Not sessions. Sorted by RPV, with the visit count beside it so I can see which of the good ones are big enough to matter. A channel with excellent RPV and forty visits is a note to self, not a plan.

2. The Direct row. Specifically, how much of it resolved to a named source this month versus last. Direct going up is not news. Direct going up while nothing else explains it is the signal that a channel exists which your reports have no name for yet.

3. Which pages the crawlers fetched. Mostly to confirm that anything I published in the last fortnight has been read by something. When it has not, that is a technical problem with a technical fix, and it is better to find it in week one than in month three.

That is the whole thing. There is no fourth report. I spent two years with more dashboards than that and less idea what was happening.

What I would tell 2021 me

Not "use better software" — although obviously I would say that now, having spent three years building some. The thing I would actually say is smaller and it is about which question to ask.

I was asking where is the traffic coming from, which has an easy answer that every tool will give you for free. The question I needed was which channel produced the money in the bank account, which has a harder answer, requires joining two systems nobody joins by default, and is the only one of the two that should ever change what you do on Monday.

The channels change. In 2021 the argument was social versus search. Now a meaningful share of the discovery happens inside an assistant before anyone arrives, and the reports have not caught up — same shape of problem, new row missing from the table. The habit of asking which question you are answering is the part that transfers.

If you want the technical version of this, Vincent wrote up how the payment join actually works and what is really inside your Direct bucket. If you are on Shopify specifically, the Shopify revenue attribution guide is the setup, and the apps comparison covers what else is out there, including where we are not the right answer.

FAQ

Why is my biggest traffic channel not my biggest revenue channel?

Because sessions and revenue are different quantities and nothing forces them to rank the same way. Contribution is visitors multiplied by what a visitor is worth, and the second term varies by more than 4× across channels on one store — $1.42 for a Perplexity visitor against $0.61 for a Google organic one in the 200-site benchmark. A traffic report ranks by the first number only.

What is revenue per visitor and how do I calculate it?

Revenue a channel produced, divided by the visitors it sent in the same window. It is the one channel metric volume cannot flatter, because volume is already in the denominator. Computing it honestly needs the session's channel joined to the payment it produced — divide settled revenue rather than checkout order value, so refunds and failed cards are netted out before you act on it.

Where does AI traffic show up in Shopify or GA4 reports?

Three places, rarely labelled. Referrals with an intact referrer land in Referral. Google's AI Assistants channel catches some engines but excludes AI Overviews and AI Mode, which count as Organic Search, and does not list Perplexity. Everything arriving with no referrer lands in Direct — a median 34% of which is AI-referred in the benchmark.

Do I need to replace Google Analytics to see revenue by channel?

No, and it is usually the wrong move. GA4 is good at behaviour, funnels and Ads audiences, and it is free. It just cannot name the channel behind a specific settled payment, because its unit is an event with a value parameter rather than a charge. Add the payment-joined layer beside it and leave the rest alone.

Why do AI crawlers matter to a store owner?

Because the answer a buyer reads was assembled from pages a crawler fetched earlier. If GPTBot never fetched your comparison page, nothing on it can be quoted. It is the one part of AI visibility that is binary and checkable the same day.

The bottom line

Our biggest channel was not our best one, and the report I was reading every Monday for two years was structurally incapable of telling me so. It was not a bad report. It was answering a question I had stopped needing an answer to.

Sort by what a visit is worth, not by how many of them there were. Then go and find out what is inside your Direct row, because on a median store a third of it is a channel you have not named yet — and by the benchmark, it is a channel whose visitors are worth more than the one currently getting all your attention.

It takes one script tag and one Stripe key to see it on your own store: start the 7-day trial, nothing due today.

References

  1. Attrifast — AI traffic revenue benchmark 2026: 200 Stripe-connected sites, per-engine RPV and conversion rate
  2. Google Analytics Help — Default channel group, including the AI Assistants channel and AI Overviews classification
  3. Google Analytics Help — Get started with attribution: direct visits are excluded from receiving credit
  4. Clickport — Why ChatGPT traffic shows as Direct in GA4, April 2026
  5. OpenAI — Overview of OpenAI's crawlers and how to control them
  6. Stripe — Checkout Session object: client_reference_id and metadata as attribution join keys
Reading this with an AI assistant?Ask Perplexity about this article →Read this article as markdown →

About the author

Jessica Huang is the co-founder of Attrifast. She and Vincent Ruan started a Shopify store in 2021, could not get any plugin to tell them which channel produced a sale, and ended up writing the tracking themselves. She works on the product and answers support, and writes here from the merchant side of it.

Related reading

Attribution19 min
Cross-Channel Marketing Attribution in 2026: Ten Channels, One Payment
Cross-channel marketing attribution when ChatGPT, Perplexity, Claude, and Gemini are real revenue channels: the double-count arithmetic, models, and setup.
Attribution17 min
Conversion Tracking With Google Tag Manager: From Fired Tag to Settled Revenue
Every GTM tutorial stops at the fired tag. This one ends at settled revenue: container, dataLayer, the purchase event, consent mode, and the payment join.
Comparison16 min
Hyros Pricing in 2026: What It Actually Costs, What Drives It Up, and Who It Is Worth It For
Hyros publishes no self-serve price. What it really costs in 2026 — $230/mo entry, annual, demo-gated — what pushes it up, and who is quietly overpaying.
E-commerce18 min
WooCommerce Conversion Tracking: Hook the Order, Not the Pixel
Client-side pixels lose WooCommerce orders to ad blockers, gateway redirects and delayed payments. Hook the order lifecycle server-side and join it to Stripe.
Guides16 min
What Is Conversion Attribution? Models, Examples, and What Breaks Them
Conversion attribution assigns credit for a sale to the touchpoints that led to it. How the models differ on the same sale, and why 34% of credit goes wrong.

50% OFF · launch promotion

See which AI engines actually send you paying customers

Attrifast splits ChatGPT, Perplexity, Claude and Gemini into their own revenue lines — joined to real Stripe payments, not estimates.

  • ✓One script tag and a Stripe key — live in minutes
  • ✓Cookieless, so no consent banner for analytics
  • ✓Every AI referral matched to the payment it produced
Start your free trial →

7-day free trial · $0 due today · then $9.99/mo · cancel anytime

Attrifast dashboard: prompt-level AI visibility with estimated value, revenue split by channel across ChatGPT, Google, Perplexity, Claude and Direct, competitor position tracking, and per-engine scan settings.