Free · No signup · Runs in your browser

AI crawler log analyzer

Load a server access log and see which AI crawlers fetched what, when, and with which status codes, next to the visits ChatGPT, Perplexity, Claude, Gemini and Copilot sent back. The file is parsed in your browser and never uploaded.

No log handy? (synthetic data, for seeing the output only).

01 How to use it

4 steps, no signup

  1. 01

    Export an access log

    Download a raw access log from your server (Nginx or Apache access.log), host or CDN. Combined, common and JSON-lines formats work, including Cloudflare Logpush fields. A .gz file is fine.

  2. 02

    Select the file

    Pick the file above. It is read in chunks inside your browser, so files of several hundred megabytes work without uploading anything.

  3. 03

    Read the bot table

    Every request is matched against known AI and search crawlers and grouped as training, retrieval, on-demand or search. Click a bot to see its top URLs and status codes.

  4. 04

    Compare crawls with referrals

    The timeline sets AI bot hits beside visits referred by ChatGPT, Perplexity, Claude, Gemini and Copilot. Export the tables as CSV to keep a record.

Short answer: to see whether AI bots crawl your site, load a raw server access log into the analyzer above. It matches each request's user agent against known crawlers such as GPTBot, ClaudeBot and PerplexityBot and shows what they fetched. Google Analytics can't show this, because these bots don't run your analytics script.

Troubleshooting

  • "This browser cannot decompress .gz files." Your browser lacks the decompression API. Unzip the log first, or use a current Chrome, Edge, Firefox or Safari.
  • "This looks like Common Log Format…" That format has no user-agent or referrer field, so no bot can be identified. Switch the server to the combined format and export again.
  • "Could not read this file" The file is damaged or isn't a text log. Open it in a text editor to check.

Why AI crawlers only show up in server logs

Analytics tools count visitors that run JavaScript. AI crawlers mostly do not: they request the HTML and leave. So GPTBot, ClaudeBot and PerplexityBot are invisible in Google Analytics, and the only complete record of what they fetched is your server access log. This AI crawler log analyzer reads that log in your browser and answers three questions: which AI bots came, what they took, and how many human visits the same platforms sent back.

Most tools that do this are paid SaaS dashboards, Python packages or CLI scripts. This one runs in the page with no install, and because your log contains visitor IP addresses, it never uploads the file.

How bots are classified

Each request's user-agent string is matched against the crawlers in this site's AI bot user-agent registry, plus a few the registry does not yet list (CCBot, Bytespider, DuckAssistBot, Meta-ExternalFetcher and the older anthropic-ai token). The robots.txt tester uses nearly the same list. The grouping follows what each operator documents the bot is for:

TypeBotsWhat a hit means
TrainingGPTBot, ClaudeBot, Meta-ExternalAgent, CCBot, BytespiderContent collected that may train future models
RetrievalOAI-SearchBot, Claude-SearchBot, PerplexityBot, DuckAssistBot, DiffbotIndexing for an AI answer or search product
On-demandChatGPT-User, Claude-User, Perplexity-User, MistralAI-User, Meta-ExternalFetcherA person asked an assistant to open the page
SearchGooglebot, Bingbot, Applebot, AmazonbotSearch indexing, which also feeds AI Overviews and Copilot

Two names never appear in logs. Google-Extended and Applebot-Extended are robots.txt tokens, not crawlers: Google and Apple crawl with their usual bots and read the token to decide whether content may be used for model training. Google states that "Google-Extended doesn't have a separate HTTP request user agent string" in its crawler documentation. If you blocked Google-Extended, you will still see Googlebot.

The spoofing problem, stated plainly

A user agent is a claim. Scrapers routinely pretend to be Googlebot or GPTBot because some sites wave those through. Real verification needs the request IP:

A web page cannot run DNS lookups or keep those lists current, so every count here is of claimed identity. Treat a sudden spike from one "bot" across many unrelated IPs as suspect, and verify a sample on your server before quoting the numbers anywhere.

AI referrals and the crawl-to-referral ratio

Crawling is the cost side. The return is people clicking through from an AI answer. The analyzer counts requests from non-bot user agents whose Referer is chatgpt.com (or chat.openai.com), perplexity.ai, claude.ai, gemini.google.com or copilot.microsoft.com, plus requests whose URL carries utm_source=chatgpt.com and similar tags. It then divides all AI bot hits by those visits.

Read the ratio with care. It describes your log, nothing more. It is not a benchmark, there is no agreed healthy value, and a crawl in March does not "cause" a click in April. Undercounting is built in: apps and some browsers strip the referrer, so a share of AI clicks arrive as direct traffic. Training-bot hits, by design, never send anyone back. The per-type split matters more than the headline: compare retrieval and on-demand hits, which are tied to answers people see, with referrals. This site's AI referral traffic statistics and crawl-to-citation latency study go further into what can and cannot be read from these numbers.

Supported log formats

  • Combined Log Format (Nginx and Apache default): IP, time, request, status, bytes, referrer, user agent. Referral counting needs this format or JSON.
  • Common Log Format: no referrer or user agent, so bots cannot be identified. The tool tells you if this is all it finds.
  • JSON lines: one object per line. Cloudflare Logpush HTTP request fields (ClientRequestUserAgent, ClientRequestURI, EdgeResponseStatus, EdgeStartTimestamp, ClientRequestReferer) are read directly, as are common names like user_agent, path, status, time and referer.
  • Gzip: .gz files are decompressed in the browser where it supports the DecompressionStream API.

What to do with the results

  • 4xx or 5xx for retrieval bots. If OAI-SearchBot or PerplexityBot are getting 403s, a firewall or CDN bot rule is blocking the crawlers that cite you. Check it against your robots.txt.
  • Did anything fetch /llms.txt? Click each bot and look at its top URLs. Then check the file with the llms.txt validator.
  • Heavy training crawls, no referrals. That is the case for blocking training bots while keeping retrieval bots, the split explained in GPTBot vs OAI-SearchBot.

Limitations

Counts are of requests that claim a bot identity. Bots that use a browser user agent, as some agentic browsers do, are counted as humans. A log from one server behind a load balancer or CDN may miss requests served from cache. Very large files are limited by your device's memory for the per-URL tables; the tool keeps the top URLs per bot rather than every path.

Last checked and updated: . Everything on this page runs in your browser; nothing you enter is sent anywhere.

FAQ

Frequently asked questions

How do I see if AI bots are crawling my site?
Check your server access logs, not your analytics. AI crawlers such as GPTBot, ClaudeBot and PerplexityBot generally do not execute your analytics tags, so tools like Google Analytics do not record them. Load a raw access log into the analyzer above and it lists every AI crawler that requested a page, with dates, URLs and status codes.
Where do I find my server access logs?
On Nginx the default is /var/log/nginx/access.log; on Apache, /var/log/apache2/access.log or /var/log/httpd/access_log. Managed hosts usually offer a download in the control panel. Cloudflare offers raw request logs through Logpush, depending on your plan; many static hosts provide none.
What is the GPTBot user agent?
OpenAI's training crawler identifies itself with a user-agent string containing GPTBot. OpenAI runs two other agents: OAI-SearchBot for ChatGPT search and ChatGPT-User for fetches a user triggers. The analyzer separates all three, because they mean very different things for your site.
Can AI crawler user agents be faked?
Yes. Anyone can send a request claiming to be GPTBot or Googlebot. The way to verify is to check the request IP against the operator's published ranges, or to run a reverse and forward DNS lookup. A browser cannot do DNS lookups, so this tool reports claimed identity only.
How do I verify a real Googlebot or GPTBot request?
For Google, run a reverse DNS lookup on the IP: it should end in googlebot.com, google.com or googleusercontent.com, and a forward lookup of that name should return the same IP. OpenAI publishes IP lists for each bot, such as openai.com/gptbot.json. Both are linked on this page.
What is the difference between GPTBot and ChatGPT-User in logs?
GPTBot crawls on its own schedule to collect content that may be used to train models. ChatGPT-User appears when a person in ChatGPT asks it to open a page, so its hits track real user demand. OAI-SearchBot is the crawler behind ChatGPT search results.
Why does Google-Extended not appear in my logs?
Google-Extended is a robots.txt control token, not a separate crawler. Google crawls with its normal Googlebot agents and uses the token only to decide whether content may be used for Gemini training. Applebot-Extended works the same way for Apple.
How do I track traffic from ChatGPT and Perplexity?
Look at the Referer header of human visits. Clicks from chatgpt.com, perplexity.ai, claude.ai, gemini.google.com and copilot.microsoft.com carry those hosts when the browser sends a referrer, and ChatGPT often adds utm_source=chatgpt.com to links. The analyzer counts both. Some clicks arrive with no referrer and cannot be attributed.
What is a crawl-to-referral ratio?
AI bot requests divided by visits those AI platforms referred, over the same period. A ratio of 500 means 500 bot fetches for every human click back. It is a description of your own log, not a benchmark: there is no agreed healthy value, and it says nothing about whether the crawling caused the clicks.
Does this tool upload my log file?
No. The file is read with the browser's File API and parsed in the page. Nothing is sent to a server, which matters because access logs contain visitor IP addresses.