Track AI assistant traffic in Google Analytics
Many AI assistant visits arrive without a referrer but still carry a UTM tag. Google Analytics 4 (GA4) has an AI Assistant channel, but it reads the referrer, not the tag, so tagged visits from the apps fall through to Unassigned. One extra condition brings them in. These steps reflect our tests as of October 2026; the scorecard shows the current state.
1. Keep the UTM tag on the landing URL
GA4 sets a session's source from utm_source in the page URL, and falls back to the referrer when there is no tag. When an assistant's app sends a tag and no referrer, the tag is the visit's only trace. If it's gone before the GA4 tag fires, the visit lands in Direct.
Check that nothing drops the query string on the way in:
- Redirects. Redirects from
httptohttps, towww, to a trailing slash or to a localized page must keep the query string. - Your tag setup. Check that
page_locationisn't overwritten with a cleaned URL, in Google Tag Manager or in a server-side container.
To test it, open any page on your site with ?utm_source=attribution-test appended, then look for that value under Session source in the Realtime report.
ChatGPT, Perplexity's apps and part of Copilot rely on the tag. Without it, those visits count as Direct. See Estimate your hidden AI traffic for how much each assistant sends this way.
2. Extend the AI Assistant channel
GA4's default channel group includes an AI Assistant channel. It matches a visit when the referrer is on Google's list of AI assistants, or when utm_medium is ai-assistant. No assistant we test sends that medium, so tagged visits that arrive without a referrer don't match. That is most of ChatGPT's visits, and the app visits from Perplexity and Copilot. They often land in Unassigned instead.
- In Admin > Data display > Channel groups, create a new channel group, starting from a copy of the default one.
- Open its AI Assistant channel and add a second condition, joined with or: Session source matches regex, using the pattern below.
- Add a condition joined with and: Session medium doesn't match regex
^(.*cp.*|ppc|retargeting|paid.*)$, the pattern GA4 uses for paid traffic. This keeps ChatGPT ad clicks out of the channel. - Check that AI Assistant sits above Referral and Unassigned, and save.
- In your reports, pick the new channel group in place of the default one.
Keeping Google's own condition keeps the assistants on its list that we don't test, such as DeepSeek and Grok.
Custom channel groups apply to past data too, so you can compare the result with last month straight away.
3. The values to match
GA4 puts the referrer host or the utm_source value into the same dimension, Session source. One pattern covers both:
^((.*\.)?(chatgpt\.com|gemini\.google\.com|claude\.ai|copilot\.microsoft\.com|copilot\.cloud\.microsoft|m365copilotapp\.svc\.cloud\.microsoft|m365\.cloud\.microsoft|perplexity\.ai|meta\.ai|com\.openai\.chatgpt)|gemini|geminiforbusiness|perplexity|copilot\.com.*)$
What it matches:
chatgpt.com, and com.openai.chatgpt from the Android app, which sends android-app://com.openai.chatgpt/chatgpt.com, documented by OpenAIgemini.google.comgemini, geminiforbusiness, seen only from Sep 18 to 28, 2026claude.aicopilot.com, copilot.microsoft.com, copilot.cloud.microsoft, m365copilotapp.svc.cloud.microsoftcopilot.com, sometimes with a suffix like copilot.com?form=MG0AUOperplexity.aiperplexity, sent by the appsThe pattern also includes m365.cloud.microsoft and meta.ai, which Adobe lists for AI traffic.
4. The Google exception
Google lists some pages with ChatGPT's tag still in the URL. Those visits came from search, but GA4 takes the tag over the referrer, so they count as chatgpt.com. A channel group can't fix this, because its conditions can't see the referrer.
To size it, build an exploration with Session source and Page referrer, filtered to chatgpt.com, and look for Google referrers. Subtract them when you report ChatGPT's numbers.
5. ChatGPT ad clicks
If you advertise in ChatGPT, your ad clicks carry the UTM tags you set, and OpenAI adds oppref or olref to the landing URL. They are paid traffic, so keep them out of the AI Assistant channel.
- Tag your ads with a paid
utm_medium, such ascpc. The condition from step 2 then sends them to your paid channels. - Use a source of your own, such as
utm_source=chatgpt-ads, so an ad click never looks like ChatGPT's ownchatgpt.comtag. - To find ad clicks that slipped through, build an exploration on Page location containing
oppref=orolref=.
To report everything ChatGPT sends you, show ad clicks as their own line next to the AI Assistant channel, not inside it.
6. Check it works
- Ask an assistant to link to a page on your site, open the link, and find the visit in your AI assistants channel in the Realtime report.
- Repeat from a phone app, where the tag is often the only signal.
- Recheck now and then. Assistants change their links without notice, and our changelog records each change we see.