Your GEO Score
78/100
Analyze your website →

ChatGPT Search Tracking: Measure Traffic and Citations

AI Search Monitoring: Track ChatGPT & Perplexity Performance

ChatGPT search tracking works on three data sources you already own: referral sessions in your analytics (OpenAI documents that ChatGPT adds utm_source=chatgpt.com to links it sends), crawler hits in your server logs (OAI-SearchBot and ChatGPT-User for ChatGPT, PerplexityBot and Perplexity-User for Perplexity), and a repeated sample of real answers to check whether your pages are cited. Analytics shows the clicks, logs show that your pages are read, and the answer sample shows the citations that never turn into a click. You need all three, because each one misses what the others catch.

This guide covers the measurement of traffic and citations coming out of ChatGPT search and Perplexity. If you want to measure how often ChatGPT names your brand across a prompt set, use our method for ChatGPT brand monitoring. If you are choosing a paid tracker, start with the GEO monitoring tool comparison.

What you can and cannot measure

Neither OpenAI nor Perplexity offers publishers a dashboard comparable to Google Search Console with impressions, queries and positions. That shapes what "tracking" can mean:

  • Measurable directly: visits that arrive via a link in a ChatGPT or Perplexity answer (analytics), and requests by the documented crawlers and fetchers (server logs).
  • Measurable by sampling: whether a given answer cites or names you. You have to ask the questions yourself and record the result.
  • Not measurable: how often an answer containing your brand was shown, the queries users typed, and users who read the answer and never clicked.

Treat every number you report as one of those three kinds and label it accordingly. Mixing a click count with a sampled citation rate in one chart is the most common reporting mistake in this area.

Step 1: Track ChatGPT and Perplexity referrals in GA4

OpenAI's publisher FAQ states that publishers who allow OAI-SearchBot can track referral traffic in tools such as Google Analytics, because "ChatGPT automatically includes the UTM parameter utm_source=chatgpt.com in referral URLs" (OpenAI Help Center). In GA4 these sessions show up with session source chatgpt.com.

Perplexity does not document a comparable UTM parameter. What you can do is look for perplexity.ai as the referring source. Whether a referrer is passed depends on the browser, the app and its settings, so treat Perplexity referrals as a lower bound, not a complete count.

By default GA4 files these sessions under "Referral", mixed with every other site that links to you. Create a custom channel group so AI answers get their own row (documented in Google Analytics Help under "Custom channel groups"):

  1. Admin, Data display, Channel groups, Create new channel group.
  2. Add a channel "AI answers" with the condition Source matches regex: chatgpt\.com|chat\.openai\.com|perplexity\.ai. Extend the regex only with sources you have actually seen in your data.
  3. Move the new channel above "Referral" so it takes precedence, then save. Custom channel groups apply retroactively in reports.
  4. In Reports, Acquisition, Traffic acquisition, switch the primary dimension to your new channel group and add "Landing page" as a secondary dimension.

The landing-page view is the useful one: it shows which pages AI answers send people to, which is usually a short list and rarely the list you expected.

Why AI traffic still hides in "Direct"

Some visitors copy a URL from an answer instead of clicking, some apps open links without a referrer, and many people read a recommendation and type your domain later. All of this lands in "Direct" or branded search. The referral count is therefore a floor. Watch it as a trend, and never use it alone to decide whether AI search matters for you.

Step 2: Read OAI-SearchBot and PerplexityBot in your server logs

Logs show something analytics cannot: whether the AI systems read your pages at all. Both vendors document their user agents and publish IP ranges (OpenAI crawlers, Perplexity crawlers):

Documented ChatGPT and Perplexity user agents
User agentDocumented purposerobots.txtWhat a hit tells you
OAI-SearchBotSurfaces websites in ChatGPT's search featuresRespectedYour page can be indexed for ChatGPT search
ChatGPT-UserCertain user actions, e.g. when users ask ChatGPT a questionMay not apply (user-initiated)A page was fetched in the context of a user's request
PerplexityBotSurfaces and links websites in Perplexity search resultsRespectedYour page can be indexed for Perplexity
Perplexity-UserVisits pages when users ask Perplexity a questionGenerally ignored (user-initiated)A page was fetched in the context of a user's request

The distinction between the two types matters. The search bots build an index; a hit only says you are eligible. The user-triggered fetchers (ChatGPT-User, Perplexity-User) are the closest proxy you have for "this page was read while someone was asking a question". Report them separately. GPTBot is OpenAI's training crawler and says nothing about search visibility, so keep it out of this report.

A quick count on an Nginx or Apache access log in the default combined format:

# hits per AI user agent
grep -oE 'OAI-SearchBot|ChatGPT-User|PerplexityBot|Perplexity-User' access.log | sort | uniq -c

# top URLs fetched by the user-triggered agents
grep -E 'ChatGPT-User|Perplexity-User' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20

# status codes returned to the search bots (403/5xx means you are locking them out)
grep -E 'OAI-SearchBot|PerplexityBot' access.log | awk '{print $9}' | sort | uniq -c

Two checks before you trust these numbers. First, user agents can be faked: compare the client IPs against the published ranges (openai.com/searchbot.json, openai.com/chatgpt-user.json, perplexity.com/perplexitybot.json, perplexity.com/perplexity-user.json) and count only matching hits. Second, a CDN or WAF may block the bots before they ever reach your origin; in that case your origin logs look empty although the problem sits in the firewall. Our AI crawler check shows whether your robots.txt blocks these agents, and the guide to robots.txt rules for AI bots explains which ones to allow.

Step 3: Check citations by sampling answers

Most answers that mention you will never produce a click, so you have to look at the answers themselves. Keep it small and repeatable:

  1. Pick 15 to 30 questions your buyers actually ask, taken from sales calls, support tickets and Search Console queries. Include questions without your brand name, because those are where new buyers find you.
  2. Ask each question in ChatGPT with search and in Perplexity, in a logged-out or fresh session, and repeat each one several times. Answers vary between runs, so one run proves little.
  3. Record per answer: date, engine, question, run number, whether your domain is cited as a source, whether your brand is named in the text, which URL of yours is cited, and which other domains are cited.
  4. Repeat monthly with the same questions, so changes reflect the engines and your content rather than a new question set.

Your citation rate is then the share of runs in which your domain appears as a source, per engine. Report it next to the referral sessions from Step 1 and the fetcher hits from Step 2. If ChatGPT-User fetches a page often but the sample never cites it, the page is being read and not used; that points to content that does not answer the question directly enough.

Reading the three signals together

What combinations of signals usually mean
LogsCitations in sampleReferralsLikely meaning and next step
No search-bot hitsNoneNoneAccess problem: check robots.txt, WAF and status codes first
Search-bot hits, few user fetchesRareFewIndexed but not chosen: strengthen answers to the specific questions
User fetches on some pagesCitedFewVisible, low click-through: normal for informational answers, check if cited pages lead to a next step
User fetchesCitedGrowingWorking: expand to adjacent questions and keep the sample running

When a monitoring tool is worth it

The referral and log steps cost nothing but setup time. The sampling step is where manual work grows: 30 questions, two engines and several runs each add up to a few hundred answers a month to read and code. Once you need more questions, more markets or more engines than one person can handle reliably, a monitoring tool pays for itself in hours. Before you buy one, make sure the basics are in place; a quick AI visibility check shows whether your site is technically accessible and citable, so a tracker does not spend months reporting the same zero.

Frequently asked questions

How do I see ChatGPT traffic in Google Analytics 4?

Filter or group sessions by source chatgpt.com. OpenAI states that ChatGPT adds utm_source=chatgpt.com to referral URLs. A custom channel group with a regex on the session source puts ChatGPT and Perplexity traffic in its own channel.

Does Perplexity add a UTM parameter to links?

Perplexity does not document one. Look for perplexity.ai as the referring source and treat the result as a lower bound, because not every visit passes a referrer.

What is the difference between OAI-SearchBot and ChatGPT-User?

OAI-SearchBot crawls pages so they can appear in ChatGPT's search features and respects robots.txt. ChatGPT-User fetches pages for actions a user triggers in ChatGPT; OpenAI notes that robots.txt rules may not apply to it. For tracking, ChatGPT-User hits are the better signal that a page was used to answer a question.

Can I see which prompts led to my brand being cited?

No. Neither OpenAI nor Perplexity reports user prompts to publishers. You can only test the questions you choose and record whether you are cited.

Why is my ChatGPT referral traffic so low when I am cited?

Many answers satisfy the question without a click, and some visits arrive without a referrer and are counted as direct traffic. Low referrals with regular citations is a common pattern, not proof that the channel does not matter.

Does blocking GPTBot affect ChatGPT search?

OpenAI documents GPTBot as the crawler for training data and OAI-SearchBot as the crawler for search. They are controlled separately in robots.txt, so you can block GPTBot and still allow OAI-SearchBot.

Ready for better AI visibility?

Test now for free how well your website is optimized for AI search engines.

Start Free Analysis

Share Article

Make this blog a preferred source

One click and Google will prioritise articles from geo-tool.com in Top Stories and Discover. The setting applies to your account only and can be undone at any time.

Add as a preferred source on Google

About the Author

Gorden WübbeG

AI Search Evangelist | Founder of geo-tool.com | Co-founder of famefact

Gorden Wübbe measures whether AI systems such as ChatGPT, Perplexity, Gemini, and Google AI Mode recommend a company, and shows how it earns a place on that shortlist. When OpenAI opened up GPTs, he built a GEO tool right away and secured the geo-tool.com domain. It grew into one of the first GEO tools in the German-speaking market.

As co-founder of the Berlin agency famefact, he has been building marketing tools since 2011. He tests new GEO hypotheses on his own portfolio of more than 200 domains before applying them to client projects. His conviction: rankings are no longer the goal. What matters is whether AI names a company when a buyer asks.

Husband. Father of three. Slowmad.

GEO Quick Tips
  • Structured data for AI crawlers
  • Include clear facts & statistics
  • Formulate quotable snippets
  • Integrate FAQ sections
  • Demonstrate expertise & authority