AI search is a channel now
Paid ads brought the most visits. A channel nobody paid for converted visits to signups at almost three times the rate. Until it had its own row, it was invisible.
A row that used to be missing
When a study app added cookieless attribution, the first table anyone looked at was visits by channel for a month. The numbers below are mock data shaped like that month, and they are the reason this post exists.
Visits by channel, one month (mock data)
channel visits signups visit to signup
paid 380 25 6.6%
organic_search 210 17 8.1%
social 150 8 5.3%
ai 127 24 18.9%
direct 120 9 7.5%
referral 50 4 8.0%
email 33 5 15.2%
all 1,070 92 8.6%What counts as ai
Vevee derives the channel on the server from the visit's UTM tags and referrer host, in a fixed order: paid, email, ai, organic_search, social, referral, direct. The first rule that matches wins. A visit lands in ai when its referrer host is chatgpt.com, chat.openai.com, perplexity.ai, gemini.google.com, claude.ai or copilot.microsoft.com, or when its utm_source names one of them. ChatGPT, for example, tends to add utm_source=chatgpt.com to links it shows, which matters because some AI apps send no referrer at all. Most analytics tools file these visits under referral, next to a forum thread and a directory listing, or under direct when the referrer is missing. Either way the signal is diluted. Pulled out into a channel of its own, it stops being noise.
Why it converts
Look at what an AI-referred visitor did before they arrived. They described a problem in their own words ("an app that turns my lecture notes into flashcards"), read an answer that named a few tools, and clicked one. They arrive with the problem already framed and the product already shortlisted. A paid social visitor was scrolling and saw an ad; some of them were curious and most were not looking for anything. The mock numbers follow that story. Paid ads sent three times as many visits as AI search and ended with about the same number of signups. Revenue tells the same tale: across all channels the mock month made $703.78 net of tax, or $0.66 per visit. For ai visits it was $1.64 per visit.
Does it last past signup?
A channel that brings eager signups who never pay is a vanity channel. The visit table cannot answer that, because it stops at signup. The person funnel can: it starts at signed_up and splits people by first_channel, the channel stored on them once at signup.
Signup to paid, split by first_channel (mock data)
first_channel signed up activated paid
paid 25 14 4
ai 24 19 7Small numbers, read carefully
Seven paying customers out of 24 is a striking rate and a tiny sample. One good week of mentions in AI answers can produce it, and one model update can take it away. The split table in Vevee greys out rows with fewer than 20 entries at step 1 for exactly this reason; these two rows clear that bar, barely. Treat the month as a reason to keep watching the row, and to stop treating AI answers as something that happens to you.
What the app changed
Nothing dramatic. The pricing page and the feature pages got plainer sentences about what the app does and for whom, since those are the passages an AI answer is likely to paraphrase. The docs and help pages stayed public and crawlable. And the founder stopped measuring the paid campaign against a blended conversion rate: the 8.6% average sat between a paid channel at 6.6% and an unpaid one at nearly 19%, and described neither. Each channel now gets judged on its own row. To get the channel column on your own traffic, start with the traffic attribution guide at /docs/guides/traffic-attribution.
Keep reading
Reading a split funnel
The funnel chart tells you how many got through. The split table under it tells you who. Here is a row by row reading of one, from a study app's mock month.
AnalyticsHybrid mode for privacy: put your own server in the middle
The browser never talks to Vevee. It talks to a forty-line route on the app's own server, which decides what leaves and what does not.