How to Track ChatGPT Traffic in GA4 and Tell When It Sent a Lead
A ChatGPT visitor asked us for an audit, and a day later GA4 still had the visit in the wrong channel. How to track AI traffic in GA4 and prove a lead's source.
On Monday, September 28, at 1:21 PM Pacific, an audit request came through the free audit form on our site.
The request told us where it came from. Our forms carry hidden fields that record how a visitor first arrived, and this one said: referrer chatgpt.com, landing page one of our case study pages with ?utm_source=chatgpt.com on the end. Someone clicked a link in ChatGPT, landed on a case study, found the audit page and asked for one.
The next afternoon we looked for that visit in Google Analytics 4. The AI Assistant row for September 19 to 28 showed 8 sessions from ChatGPT, and the visit that lines up with the lead wasn’t one of them. GA4 had filed it under a channel called Cross-network, with a source of (data not available). Less than half an hour later, GA4 restated the day and the visit moved into AI Assistant.
GA4 now shows ChatGPT traffic with no setup. On its own, it didn’t tell us which visit became a lead. Here’s how we track both, with our own numbers.
What utm_source=chatgpt.com means
It’s a tracking tag on the URL, the same kind you’d put on an email link. We didn’t add it. It arrived with the visit, alongside a referrer of chatgpt.com. OpenAI’s Publishers and Developers FAQ says “ChatGPT automatically includes the UTM parameter utm_source=chatgpt.com in referral URLs,” and ties it to traffic from ChatGPT search results. When you see it on a landing URL, the link came out of ChatGPT.
It won’t tell you what they asked. On September 29 we checked the response headers from chatgpt.com, and its Referrer-Policy is strict-origin-when-cross-origin. Under that policy, a browser going from one HTTPS site to another sends the origin only. Your referrer will say chatgpt.com and nothing about the conversation. If you want the question, ask the person on the first call.
Don’t expect it to point at your homepage. Seven of the nine ChatGPT sessions GA4 recorded in those ten days landed on a case study page, our lead’s included. Two landed on the homepage. In our data, ChatGPT sends people to a specific page more often than to the front door, so every page it might cite needs a clear path to your contact form. Our GEO playbook covers how pages get cited in the first place.
GA4 not tracking? Check the tag is firing first
Before you read any AI number, make sure GA4 is collecting at all. We caught this one on our own site on September 19: the site’s Content Security Policy didn’t allow googletagmanager.com, so browsers refused the GA4 script, and GA4 read every visit it did catch as Direct while Search Console was counting clicks from Google. We fixed the policy the same day and confirmed the tag was firing. Every GA4 number in this post is from September 19 on.
Three checks, in this order:
- Realtime. In GA4, select Reports, then Realtime, and open your site on your phone. Google lists verifying “that the measurement code is working” as one of the report’s uses. If you never appear, fix that before anything else.
- The browser console. Open your site in Chrome, open developer tools and read the Console tab. A blocked tag shows up as a Content Security Policy error that names googletagmanager.com.
- The policy itself. Google’s CSP guide lists what Analytics needs without Ads features:
https://www.googletagmanager.cominscript-src-elem,https://www.googletagmanager.com https://*.google-analytics.cominimg-src, andhttps://www.googletagmanager.com https://*.google-analytics.com https://*.google.cominconnect-src.
A blocked tag doesn’t look like an outage. Ours looked like a site where everybody typed in the address.
How to check ChatGPT traffic in GA4
Since May 13, 2026, GA4 has a built in channel for this. When the referrer matches what Google recognizes as an AI assistant, GA4 sets the medium to ai-assistant, the campaign to (ai-assistant), and puts the session in a channel called AI Assistant. Google’s channel definitions name ChatGPT, Gemini, Deepseek, Copilot and Grok as examples, and say the channel excludes Google’s own AI Overviews and AI Mode. The values are assigned automatically, so there’s nothing to switch on.
To see it:
- Go to Reports, then Acquisition, then Traffic acquisition. The default table lists channels. Look for AI Assistant.
- Change the primary dimension to Session source / medium and add Landing page + query string as a secondary dimension. That shows which assistant sent each session and where it landed.
- Type chatgpt in the search bar above the table.
Ours, for September 19 to 28, once GA4 had finished processing the 28th: chatgpt.com / ai-assistant, 9 sessions, 7 of them engaged, 28 page views. GA4 recorded no other assistant in that window.
One thing you won’t find there is the tag. In our property, none of the nine ChatGPT sessions shows ?utm_source=chatgpt.com in Landing page + query string, not even the one our form recorded with the tag on it. GA4 uses the tag to fill Session source and Session manual source instead. If you want the raw URL with the tag still on it, your form has to catch it.
Where GA4 put the AI referral that became a lead
A little after 1 PM the next day, the session level report had no ChatGPT session on September 28 at all. The 1 PM hour showed one Cross-network session with a source of (data not available), landing on the audit page with 7 page views, plus four sessions GA4 left Unassigned. GA4 counted one user in that hour.
Through the GA4 Data API, the same hour broken down by page path plus query string credited 10 page views to chatgpt.com / ai-assistant, including the case study page from our form record and two views of the audit page. By page path alone, in the same minute, those views read (data not available) and (not set). Same visit, same property, two answers depending on the dimension you pick.
Google explains the value. (data not available) shows up when data is “unavailable or hasn’t been processed” and an advertising identifier or “any UTM parameter is present.” Source and medium become (data not available), the campaign becomes (cross-network), and the channel becomes Cross-network. Our visitor’s landing URL carried a UTM tag. The same page says: “Event level data, but not user or session level data, can be updated up to 12 days later as key event modeling improves the data quality.”
Our session level data changed anyway. By 1:32 PM, GA4 had restated the day: the visit now sits in AI Assistant as chatgpt.com / ai-assistant, landing on the case study page from our form record, with 10 page views, and the Cross-network row is gone. The hour, the page and the source all line up with the request that came in at 1:21 PM the day before.
Read the AI Assistant row a day after the visit and you’d have counted 8 ChatGPT sessions and no lead. Our form had the answer the minute the request arrived.
Track AI traffic in GA4 with your own channel group
The built in channel is a good start with two gaps. Google’s channel page names examples, not a full list: the downloadable source list on that page has search, social, shopping and video categories, and no AI category. And the May 13 announcement doesn’t say whether the channel reclassifies sessions from before that date.
A custom channel group covers both. Google says custom channel groups “can be applied to your reports retroactively,” and you decide which sources count. Here’s a pattern for the Source condition:
.*(chatgpt|openai|perplexity|claude\.ai|gemini\.google|copilot|deepseek).*
- In Admin, under Data display, click Channel groups.
- Click Create new channel group. It starts as a copy of the default group. Give it a name.
- Click Add new channel, name it AI assistants, and click Add condition group.
- Choose Source, choose matches regex, and paste the pattern above.
- Save the channel. Click Reorder, drag AI assistants above Referral, and click Apply. GA4 puts each session in the first channel it matches, top down.
- Click Save group, then pick the new group as the primary dimension in Traffic acquisition.
Google Analytics treats a regex as a full match by default, so the .* at each end is what lets the pattern match inside a longer hostname. It matches chatgpt.com, chat.openai.com, perplexity.ai, gemini.google.com, copilot.microsoft.com, claude.ai and chat.deepseek.com. It doesn’t match google or mail.google.com, so search and Gmail stay where they were. Add any assistant hostname you find in your own source list. Standard GA4 properties get two custom channel groups, so build this one on purpose.
For a quick check without touching Admin, start a blank exploration in Explore with Session source in Rows and Sessions in Values, and filter Session source by the same regex.
Make your lead form record the source
GA4 counts visits. A lead needs a record, and the record has to carry its own source. That’s how we caught this one.
The first time a browser loads one of our forms, and nearly every page has one in its footer, a script stores the referrer, the landing page with its full query string, and any utm_source, utm_medium and utm_campaign values. It keeps that first touch in the browser’s local storage, so it survives the visitor clicking around or coming back another day. Then it writes the values into hidden fields on the form: traffic_source, referrer, landing_page, utm_source, utm_medium, utm_campaign and submit_page. They ride into our notification email and the CRM record.
You don’t need our code. Most form tools accept hidden fields. What matters:
- Capture on arrival, not on the form page. By the time someone reaches your contact page, the referrer is your own site.
- Keep the query string. That’s where
utm_source=chatgpt.comlives, and our GA4 landing page column never showed it. - Store the first touch once. Someone who finds you in ChatGPT on Monday and types your address on Thursday should still read as ChatGPT.
Know the limits. A browser leaves the referrer empty when someone arrives directly, from a bookmark for example. Local storage belongs to one browser on one device, so a lead who found you on a phone and filled out the form on a laptop gets the laptop’s source, not the phone’s.
We wrote about counters versus records in The Dashboard Said One Lead. There Was No Lead. Same lesson here: the record had the answer, and the report didn’t.
What this doesn’t mean
One lead isn’t a channel. A week and a half of ChatGPT visits and one request shows ChatGPT can put a case study in front of a prospect. We’ll judge it on requests over months, not on one good Monday.
The tag can go missing. Google’s own help on (direct) / (none) traffic says redirects can strip UTM parameters from a URL. If your site redirects www to the bare domain, make sure the redirect keeps the query string. Ours, added September 19, carries the path and query string through.
Zero AI sessions in GA4 doesn’t prove zero AI influence. GA4 only sets the ai-assistant medium when the referrer matches an assistant it recognizes. Someone who reads your name in an answer, then searches for you or types your address, lands in Organic Search or Direct. Google’s AI Overviews and AI Mode are excluded from the channel entirely. And as the visit behind our lead shows, a ChatGPT visit can still read Cross-network a day later.
FAQ
What does utm_source=chatgpt.com mean?
It means the link the visitor clicked came out of ChatGPT, with the tag still on it. GA4 reads it into Session source, so the visit shows chatgpt.com as its source. It won’t tell you what the person asked, because the referrer carries only chatgpt.com.
How do I check ChatGPT traffic in GA4?
Go to Reports, then Acquisition, then Traffic acquisition, and look for the AI Assistant channel Google added on May 13, 2026. For detail, switch the primary dimension to Session source / medium, add Landing page + query string, and search for chatgpt. Confirm GA4 is firing in the Realtime report first.
Why is my ChatGPT traffic showing as direct in GA4?
GA4 only sets the ai-assistant medium when the referrer matches an assistant it recognizes. A visit with no referrer and no UTM tag gives GA4 nothing to go on, so it lands in Direct. So does someone who sees your name in an answer and types your address.
What does (data not available) mean in GA4?
Google says it appears when data is unavailable or hasn’t been processed and an advertising identifier or any UTM parameter is present. Source and medium read (data not available) and the channel reads Cross-network. In our property, a ChatGPT visit still read that way a day later, then GA4 restated it into the AI Assistant channel.
How do I know if a lead came from ChatGPT?
Put the source on the lead record. Capture the referrer and the full landing URL when the visitor arrives, keep that first touch in the browser, and write it into hidden form fields that reach your inbox and CRM. Then ask the person what they asked ChatGPT, since the referrer won’t tell you.
Trust the record, then the report
GA4’s AI Assistant channel is a real improvement, and it’s free. But it counts sessions, and a day after the visit that mattered to us, it still had that visit filed somewhere else. Put the source on the lead, check the tag fires, and read the AI row as a floor, not a total.
Want a second opinion on your analytics setup? Book a 15-minute call. No deck, no fluff. Strategy first. Tactics second. The work works.
Reliable PR & Marketing is a strategy-first marketing agency in Bakersfield, California. We run integrated SEO, PR, web, and content for founder-led companies across Kern County and nationwide. Strategy first. Execution always.