Webclat / AI Visibility
Webclat / AI Visibility  /  agentic traffic

How to detect AI agent traffic (agent vs human vs bot vs crawler)

There is no header that reliably says "an AI agent is making this request." Some agents announce themselves. Others drive a real browser and look exactly like a person. Detection is a composite score, not a lookup.

In short

Detecting an acting AI agent means combining several imperfect signals - declared user-agent, IP/ASN and network origin, TLS/browser fingerprint, headless-automation flags, request timing, and (where present) a verified Web Bot Auth signature - because no single one is reliable alone, and a growing share of agents deliberately or incidentally look identical to a human session.

Landscape as of September 2026

Why one signal is never enough

The instinct is to grep the user-agent header and be done. That works for the minority of agents that self-identify - OpenAI's ChatGPT-User, Perplexity's Perplexity-User, and Anthropic's Claude-User all ship a distinct token when they fetch a page on a user's behalf. It fails for the growing share that do not: ChatGPT Atlas in agent mode presents an ordinary Chrome-on-Mac user-agent string, and Anthropic's Computer Use agent drives a full browser session that executes JavaScript, holds cookies, and produces traffic indistinguishable from a human visitor by design. Google's Project Mariner shipped the same way before later adding a distinct GoogleAgent-Mariner token, and was folded into a newer "Gemini Agent" surface in 2026 - a reminder that these tokens change fast and a hard-coded list goes stale within months. Full directory: AI agent user-agent directory.

Meanwhile a meaningful share of requests that claim to be ChatGPT, Perplexity, or another named agent are spoofed - a script setting the string without the traffic actually originating from that vendor. So the UA field cuts both ways: absent (real agent, no signal) or present-but-fake (no agent, false signal). Neither failure mode is solved by reading the header more carefully. See spoofed agent user-agents for how to verify a claimed identity rather than trust it.

The signal stack, ranked by reliability

SignalWhat it tells youReliability
Web Bot Auth signatureAn Ed25519-signed HTTP Message Signature (RFC 9421) checked against a public key at a well-known URL - cryptographic proof of the signer's identityStrongest available, but adoption is still early; only present when the agent operator supports it
Declared user-agent tokenA self-identifying string like ChatGPT-User or Perplexity-UserTrustworthy only once corroborated - trivially spoofable on its own
IP / ASN / published rangesWhether the request originates from a range the vendor has published or an ASN known for the vendor's infrastructureReasonably strong for named crawlers with published ranges; weaker for agents that route through a user's own residential IP or a generic cloud host
TLS / browser fingerprint, headless flagsWhether the client's TLS handshake and browser-automation flags (e.g. navigator.webdriver, missing plugin lists) match a real browser or an automation frameworkUseful for scripted bots; close to useless against agents that drive a genuine, unmodified browser instance
Behavioral timingRequest cadence, mouse/scroll entropy, time-to-first-action - patterns that differ from typical human browsingProbabilistic and vendor-modeled; a supporting signal, never a verdict on its own

What "agent" excludes

Two neighboring categories get bundled into "AI traffic" and shouldn't be. AI crawlers that index your site for training or retrieval (GPTBot, ClaudeBot, CCBot, and peers) are a separate, well-documented population with published UAs and IP ranges - covered in full in the AI crawlers guide. Human AI-referral traffic - a person who read a ChatGPT answer and clicked through, browsing as themselves - is covered by the AI traffic measurement arm of this site. This page, and the rest of this cluster, is about the third category: the agent itself as the visitor, acting semi- or fully autonomously.

Common questions

Can I detect an AI agent from the user-agent string alone?

Sometimes, and less often than people assume. Some agents self-identify (ChatGPT-User, Perplexity-User, Claude-User all ship a distinct token). Others do not: ChatGPT Atlas in agent mode and Claude's Computer Use agent both drive a real Chromium/Chrome-based browser and present an ordinary browser user-agent string. UA is a signal, never the proof.

What is the single strongest signal available today?

A verified Web Bot Auth signature (RFC 9421 HTTP Message Signatures, an Ed25519 key checked against a published key at a well-known URL) is the only cryptographic proof in the stack. Everything else - UA, IP/ASN, TLS fingerprint, timing - is a probabilistic signal that a spoofer can imitate. Web Bot Auth is still an individual IETF Internet-Draft as of August 2026, so treat it as the strongest signal among several, not a universal one yet.

Do agents always identify themselves?

No. A meaningful and growing share of acting agents drive a full browser session that executes JavaScript, holds cookies, and produces network traffic that is, by design or by omission, hard to tell apart from a human visitor. That is why detection has to be composite rather than a single lookup.

Does this replace a bot-management vendor?

No - it is the classification layer underneath one. Vendors like Cloudflare and HUMAN Security already combine these signal families; the point here is understanding what each signal actually proves so you can read their output correctly and build your own server-side classification where a vendor does not cover your stack.

Know what's actually hitting your site.

Composite agent classification, wired into server-side capture so the traffic gets counted correctly instead of dropped or mislabeled.

Talk to Us About Agent Measurement