How do we tell if our website traffic is real buyers or bots?

By Greg Rosner
Founder of PitchKitchen · Author of StoryCraft for Disruptors
· 7 min read

TL;DR
You separate real buyers from bots by splitting your traffic twice before reading a single number: declared crawler against human, then referrer against direct. Run that split and three populations come apart that your dashboard shows as one rising line. On PitchKitchen's own site, 529,453 logged hits over thirty days held 50,539 declared AI crawlers, 42,378 referral visits whose largest sources were throwaway scraper domains, and exactly 1,190 humans an AI engine sent. The humans who do arrive from an answer engine land further down the funnel than search traffic ever did, already holding a shortlist, which is why a page written to educate a stranger loses them.
You tell real buyers from bots by splitting your traffic on two axes before you read a single number: declared crawler against human, then referrer against direct. Do that and the one rising line on your dashboard comes apart into three populations that behave nothing alike. We ran the split on our own site last month, and the number that turned out to matter was 1,190 out of 529,453.
Why does our traffic keep climbing while our demo requests don't?
Because a page view is a log entry, and a log entry doesn't know who made it. Every analytics product you've used builds its headline number by counting requests and then subtracting whatever it recognizes as a machine. The subtraction is the whole ballgame, and it's getting harder, because the machines got polite. A declared crawler like GPTBot or ClaudeBot announces itself in the user agent and gets filtered out. An undeclared scraper running a headless browser with an ordinary Chrome user agent and no referrer lands in the same bucket as the CEO who typed your name into the address bar.
That bucket is called direct, and it's where the trouble lives. Nobody audits it, because on paper it looks like your most loyal audience.
What's hiding inside the referral bucket?
Ours was the part that stung. The biggest referring hosts pointing at our site were domains like aicmo.sbs, aibrandtwin.click and magneticmessaging.cfd: throwaway registrations on cheap top-level domains, built to scrape a page and echo it back with our own vocabulary in the name. Fifteen of them accounted for 44,169 hits between them, which is more than our entire human referral bucket. Every one arrived wearing a human badge.
Read a weekly traffic chart with that inside it and you're measuring how interesting you look to a scraper farm. The number can climb for a year while your pipeline sits still, and everyone in the room will read the climb as progress. This is the same failure mode that makes AI visibility scores so easy to misread: a tool reports a big number, nobody asks what population it counted.
How do we run the split ourselves?
An afternoon of work, and you only do the hard part once.
- 1Pull raw requests, not the dashboard. Cloudflare, Fastly, Vercel and your own server logs all expose user agent, referrer and path per request. Your dashboard already threw away the fields you need.
- 2Tag the declared crawlers by user agent: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot, Google-Extended, Bytespider, plus the classic search crawlers. Count them, then set them aside. You want that count, because it tells you whether AI engines are reading you at all.
- 3Split the remainder by referrer class: ai_engine (chatgpt.com, perplexity.ai, claude.ai, gemini), organic_search, referral, social, internal, and direct.
- 4Audit the referral hosts by hand, once. Anything sitting on a .top, .sbs, .cfd or .click domain you've never heard of goes in a junk column and stays there. Twenty minutes, and the list keeps working.
- 5Report four numbers from then on: declared crawler hits, AI-engine humans, organic humans, and everything else. The fourth one is the number you stop making decisions with.
Crawler hits and human visits answer two different questions, and collapsing them is how companies end up celebrating the wrong week. We've written about the gap between being read by an AI engine and being cited by one, and this is that gap showing up in your log file.
What's left once the machines are stripped out?
For us, 1,190 people in thirty days. ChatGPT sent 767 of them, Gemini 329, OpenAI's own surfaces 51, Claude 20, Perplexity 12. A small number, and the most valuable traffic on the site, because of where it landed. The top destinations weren't the homepage. They were comparison pages: our roundups of demand generation agencies, tech PR firms, website conversion shops, go-to-market consultants.
Read that as a behavior and it says something about the era we're selling in. Somebody arriving from an answer engine has already had the category explained to them, by the engine, about ninety seconds ago. They didn't come to find out what a messaging consultancy does. They came holding a shortlist, checking whether you belong on it. Search traffic used to arrive curious. This traffic arrives triaging.
“Half a million hits on our own site, and 1,190 of them were a human an AI engine sent. Every honest decision we make about the website now starts with the second number.”
... Greg Rosner, founder of PitchKitchen
Why does better-qualified traffic still convert badly?
Here's where measurement stops helping and the message takes over. A visitor who arrives triaging hands you one job: confirm inside about five seconds that you're for them. Most B2B pages can't, because they were built for the curious visitor who has largely stopped showing up. They open by explaining the category, they lead with we, and they name a platform before they name a person. That's why traffic stopped turning into pipeline on sites where the traffic never actually fell.
We score homepages for a living, and the pattern holds across every cohort we've run: nine in ten fail the Cover-the-Logo Test, where you hide the logo, show the page to a stranger, and ask who this is for. A page that can't answer that loses an AI-referred visitor faster than it loses a search visitor, because the AI-referred one has three other tabs open with the same shortlist.
This is what the bot audit is actually for. Once you know 1,190 humans arrived with a shortlist question, you stop trying to grow the top of a funnel that's mostly machines, and you start making sure the pages those people hit can answer why change, why change now, and why change with you. That's the Three Questions Test, and running it on your own homepage takes an afternoon.
Free Brand Signal Score: 19 criteria across narrative clarity, trust, AI readiness and conversion.
What should we change on Monday?
- 1Stop reporting one traffic number. Crawler hits and AI-engine humans become separate lines, permanently.
- 2Run the referrer audit once and keep the junk list. Your referral bucket is probably the dirtiest number you own.
- 3Look at which pages your AI-engine humans actually land on. For most B2B companies between $5M and $75M in revenue those will be comparison and best-of pages rather than the homepage, and those pages usually get the least editorial attention in the building.
- 4Rewrite those pages for a reader who is triaging: who it's for, what it replaces, what changes after. Cut the category education, because the engine already did it.
- 5Check whether a crawler can even read you. If your site renders everything client-side, GPTBot may be counting an empty shell, which is worth knowing before you conclude that your stack is hurting your AI visibility.
None of this makes the traffic chart go up. It makes the chart honest, and an honest chart is the only kind you can steer by. The 1,190 is a real number we can grow, and once you've seen how a homepage turns strangers into pipeline, the 416,758 stops feeling like something you lost.
Questions People Ask
FAQ
How much of B2B website traffic is bots in 2026?
On our own site, declared AI crawlers were 9.6% of 529,453 logged hits over thirty days, and a further 44,169 hits came from fifteen throwaway scraper domains that registered as human referral traffic. Your share depends on how much content you publish and how heavily you get scraped, but the useful move is measuring it rather than estimating it. Pull raw request logs, tag declared crawler user agents, then audit your referral hosts by hand once.
How do I tell AI crawler traffic from AI referral traffic?
Crawler traffic shows a bot user agent (GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot) and usually no referrer, and it means an AI engine is reading your page for training or retrieval. AI referral traffic shows a normal browser user agent with a referrer of chatgpt.com, perplexity.ai, claude.ai or gemini, and it means a human read an answer that mentioned you and clicked through. Track both, separately. The first tells you whether you are readable, the second tells you whether you are recommended.
Why is my website traffic up but conversions flat?
Three causes usually stack. Part of the rise is machines, either declared crawlers or scrapers hiding in your direct bucket. Part is referrer spam sitting in your referral bucket. And the humans who genuinely arrive from an AI engine land further down the funnel than search visitors did, already holding a shortlist, so a page that opens by explaining your category loses them in seconds. Split the traffic first, then fix the pages the real humans actually hit.
Should we block AI crawlers?
Not if you want to be recommended. Blocking GPTBot or ClaudeBot removes you from the retrieval layer those engines use when a buyer asks who they should hire, and the traffic you save is a rounding error against the deals you stop being named in. Block the scrapers that add nothing (the throwaway domains echoing your content back) and keep the declared crawlers of engines your buyers actually use.