resulthack

Which AI crawlers really visited your site, and which were fakes

Drop your server's access log. For each of the 19 AI agents in the directory you get hits, first and last visit, top paths and status codes, and how many requests came from the operator's published IP ranges. Anyone can put GPTBot in a user-agent; only OpenAI can send it from OpenAI's addresses. The log is read in this tab and never uploaded.

How each request is judged

The check is by IP range only. Reverse-DNS checks cannot be done from a browser, so the DNS method that Google, Apple and Common Crawl also describe is not used; every operator on this page with a DNS method also publishes the list that is used.

A request belongs to an agent when its user-agent contains that agent's token, ignoring case. When two tokens match, the longer wins, so Applebot-Extended is not counted as Applebot. Then the address that made the request is looked up in the IP list that agent's operator publishes, as snapshotted by this site:

Lists used: OpenAI (one each for GPTBot, OAI-SearchBot and ChatGPT-User), Anthropic (one list covering ClaudeBot, Claude-SearchBot and Claude-User), Perplexity (PerplexityBot, Perplexity-User), Google's common-crawlers list, Apple's Applebot list, Common Crawl's CCBot list, and Amazon's three lists for Amazonbot, Amzn-SearchBot and Amzn-User. Each is a copy fetched from the operator's own URL, listed with its date under the results. The copies are in /data/ipranges/ if you want to check them.

A worked example

74.7.175.130 - - [20/Sep/2026:10:04:11 +0200] "GET /blog/post-1 HTTP/1.1" 200 5120 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4;"
203.0.113.9 - - [20/Sep/2026:10:05:02 +0200] "GET /wp-login.php HTTP/1.1" 404 162 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4;"

Both lines say GPTBot. The first address is inside 74.7.175.128/25, a range in OpenAI's GPTBot list, so it is verified. The second comes from 203.0.113.9, which is in no OpenAI range, so it is spoofed. It also asked for /wp-login.php, which a training crawler has no reason to want. The table lists spoofing addresses under each agent's details, ready for a firewall rule.

Behind a proxy or CDN

If Cloudflare, a load balancer or a reverse proxy sits in front of your server, the log may record the proxy's address for every request. Every GPTBot request would then look spoofed. The page warns when it sees the signs: verifiable agents that never verify, most traffic from private addresses such as 10.x or 172.16–31.x, or a busy log with only one to three addresses. To fix it, have the server log the client address the proxy passes on:

Where to find the log

On Debian and Ubuntu, Nginx writes /var/log/nginx/access.log and Apache writes /var/log/apache2/access.log. On RHEL-family systems Apache uses /var/log/httpd/access_log. Older days are rotated to access.log.1, access.log.2.gz and so on, and you can drop them all at once. Caddy writes JSON wherever the log directive's output points. A CDN export works if it is a CSV whose header names the client IP, user-agent, path, status and time columns. Cloudflare Logpush names such as ClientIP, ClientRequestUserAgent, ClientRequestURI, EdgeResponseStatus and EdgeStartTimestamp are recognised.

What this page cannot do