Skip to main content
Agent analytics shows you the AI bots hitting your site, how often they come, and which pages they take. It’s a traffic report for non-human visitors. FixAEO classifies every request against a catalog of known AI crawlers, browsing agents, agentic browsers, and MCP clients, then rolls the matches up per day. Open Crawl insights, under Agent analytics in the sidebar.

Why can’t normal analytics see this?

Because GPTBot, ClaudeBot, and the other training crawlers don’t run JavaScript. Tag-based tools record only visitors that execute a script, so those crawlers are invisible to them. That includes Google Analytics, which sees the humans AI sends you but never the bots. Reading requests at the server or edge is the only way to catch them. That’s the split FixAEO uses: It’s one method per plan, on purpose. On Growth and Enterprise the tag’s data is ignored, so a leftover tag can’t double count against your server logs.

What does it tell you?

A KPI strip across the top:
  • Total bot hits, with a daily trend chart
  • Unique bots, counted as distinct hashed IPs
  • Active bots and Engines seen
  • Failure rate, the share of crawls that returned a 4xx or 5xx
  • Top folder and Top page, the paths bots fetch most
Crawl insights KPI strip showing 694 total bot hits, 87 unique bots, 13 active bots, a 0.0% failure rate, /_next/ as the top folder with 127 hits, and / as the top page with 66 hits

The line above the tiles calls out the leading bot for the range — GPTBot here, at 40 hits and 5.8% of all bot traffic.

Below that the page splits in two, on tabs named Overview and Detailed insights. It opens on Overview. The KPI strip stays on both, because it frames either question. Overview holds:
  • Bot hits over time, with a Total or By bot toggle. Total folds every crawler into one line; By bot stacks the top ones. On ranges of 7 days or less you can switch to hourly buckets.
  • Content — two ranked lists side by side, by folder and by URL.
  • Crawl breakdown — by platform, by bot, and by type. A fourth card, by country, appears only when your source sends country data. The Cloudflare Worker and the WordPress plugin do; the others don’t.
  • The status-code panel, which is what bots got served.
Detailed insights holds the full crawled-pages table: every URL bots fetched, searchable, filterable by folder and status code, and paginated. Overview shows a short by-URL card, but the complete list lives here only. Switch tabs if you’re hunting for a specific path.

The crawler filter

A filter bar pins itself below the header, above both tabs. It re-scopes every number on the page. Three menus, each single-select:
  • Platforms — the vendor behind the bot
  • Bot types — what the crawler is for: training crawler, browsing agent, agentic browser, or MCP client. Traffic the classifier can’t place shows as Unknown
  • Bots — the named crawler
They’re single-select on purpose, because the three dimensions nest — a platform is a set of bots. Active choices show as chips you can dismiss. If a filter matches nothing in the range, the page says so and offers a Clear filter button.

How far back does it go?

Range tabs go out to 365 days, long enough to spot weekly crawl cycles, and open on 30. The charts refresh through the day, so the most recent hours fill in as they’re classified. A Settings view sits next to Dashboard at the top of the page. It owns the provider list, adding another source, and the data wipe. The range tabs disappear there, since none of it is range-scoped. Beside Crawl insights in the sidebar sits a second page, Crawlability, which answers the permission half of the question: which AI crawlers your robots.txt actually lets in, and whether your competitors let in ones you block. See Crawlability.

Installing the JavaScript tag

On Lite, the page gives you one line to paste before </body>:
Your site ID is in the tag URL shown under the snippet. The tag works on any host, with no CDN required. A built-in check fetches your homepage and reports whether the tag was found and whether it’s firing.
If you run a Content-Security-Policy, allow https://api.fixaeo.com in both script-src and connect-src. The tag needs both to load and to report.
The tag catches agentic browsers, which do render pages, plus visitors arriving from an AI chat, spotted by referrer. It misses training crawlers unless your HTML is server-rendered with the tag already inlined.

Connecting your server logs

On Growth and Enterprise the setup card becomes a platform picker instead of a tag snippet. Pick your platform and it walks you through that one. All of them classify through the same catalog and land in the same dashboard. Every route except the file upload needs an API key, which you create in Settings.
FixAEO gives you the Worker code with your site already filled in. Paste it into a Worker, add your API key as a secret, then add a route so it runs in front of your zone. It passes every request to your origin first, so it adds no latency. It forwards only AI-looking requests, not all traffic, and swallows its own errors so it can’t break your site.
Download the plugin as a .zip straight from the panel, upload it in WordPress, and paste your key. See WordPress for the full walkthrough.
Paste the drain URL the panel gives you into Team Settings → Drains → Add Drain, pick Logs and Custom endpoint, then add an Authorization: Bearer header with your API key. FixAEO reads Vercel’s own log format, so you don’t host a translator. Drains need a Vercel Pro or Enterprise plan.
Anything that can POST JSON works. Send {site_id, channel, records[]} to /api/public/v1/agents/ingest. Each record carries the user agent, path, referrer, IP, timestamp, status code, method, and country. Only the user agent is needed. Send them in batches — the API reference has the exact shape and batch sizes.
No edge layer at all? Drop an access log into the panel. FixAEO parses Combined Log Format, the Apache and Nginx default, and keeps only the AI-bot lines. No API key needed. Good for a one-off backfill or a nightly cron.
The picker also lists AWS CloudFront, Google Cloud CDN, and Akamai DataStream. Those aren’t one-click — you point their log pipeline at the same ingest endpoint yourself. Monthly allowances default to 100,000 events on Growth and 2,000,000 on Enterprise. See Plans and limits.
IP addresses are hashed with a salt before storage and never kept raw. That hash is what “unique bots” counts, so read it as an estimate.

Which bots does FixAEO track?

Bots from the engines FixAEO scans are labeled with that engine. A second set is recognized but carries no engine label, because FixAEO doesn’t scan those engines. That covers Meta, ByteDance, Amazon, Apple, Common Crawl, Cohere, Allen Institute, Mistral, DuckDuckGo, You.com, Diffbot, Webz.io, Timpi, Huawei, Kagi, and QuillBot.
AI Overviews and AI Mode never appear as engine labels here — no crawler identifies itself as either one. Google’s bots all count under Gemini, and Bingbot counts under Copilot, because that’s the index each one feeds.
Every bot also lands in one of four types: training crawler, browsing agent, agentic browser, or MCP client. Crawl traffic tells you what the engines read. Sources tells you what they showed a user, and Citations tells you who got the credit. Running WordPress? The WordPress plugin captures these hits inside PHP, so a full-page cache is the only thing that can hide them.