
Quentin WendegassAI assistants now open websites for people. You ask ChatGPT to compare two pricing pages, and a...
AI assistants now open websites for people. You ask ChatGPT to compare two pricing pages, and a browser somewhere clicks through them for you. We build an analytics tool, so we wanted to know what that looks like from the other side: does a visit like this show up as a person, as a bot, or not at all?
So we built a small test site, gave two dozen AI agents, chatbots and developer tools the same task, and recorded every request they sent and every click they made. Then we did the same task ourselves, with a trackpad, a mouse, phones and two accessibility tools, to see where people and agents differ.
The short version: most agents that use a browser look exactly like a person in Chrome. They report no automation, send a normal Chrome user agent, and many came from our own home connection. Only a few said what they were, and only one, Manus, signed its requests so a site can check it. Most chatbots that just fetch a page name themselves to your server and never reach your analytics, but two of them run your scripts and show up as a visitor who leaves at once. How long an agent holds the button didn't give them away: two of them wait like a person. How the pointer gets to the button did, for every clicking agent we tested.
Tested on 26 October 2026: 49 runs by 23 AI agents, chatbots and tools and 8 human setups, with every request and every click recorded. Every visitor got the same task on the same three pages. The method and its limits are at the end.
The test site was a made-up notes app with three pages: a home page, a plans page and a contact page with a form. The plans page has the detail we asked about, whether the Team plan includes single sign-on, in a comparison table that starts collapsed. Every agent got the same prompt:
Go to [the address] and find out what the Team plan costs per month and whether it includes SSO. Then open the contact page and tell me what it asks for. Don't submit anything.
Each run had its own address, so every request in the server log belongs to one known visitor. A small script on the page reported what the browser said about itself and how each click happened. It never read what anyone typed.
We tested:
Some we couldn't test. Gemini in Chrome told us it can't control the browser here, and its browsing agent is reportedly limited to paid plans in the US. We didn't run OpenAI's computer-use model. Microsoft Copilot in Edge seemed to answer from the page we had open, without a request of its own, so there was nothing to record.
| Browser | Says it's automated | Came from | |
|---|---|---|---|
| ChatGPT Work | Chrome 156 on our Mac | No | Our connection |
| Claude in Chrome | Our own Chrome | No | Our connection |
| Comet, in our browser | Comet (Chrome 145) on our Mac | No | Our connection |
| Comet, in the cloud | Windows Chrome | No | A data centre |
| Grok | Linux Chrome without a graphics card | No | Our connection |
| Claude computer use | Chrome on a Linux desktop | No | Where it runs |
| Claude Cowork | Headless Chrome in the cloud | Yes | Anthropic's servers |
| Manus | Linux Chrome in the cloud | Yes, and signs its requests | A data centre |
| Browser Use, Playwright MCP | Chrome on our Mac | No | Our connection |
| agent-browser, DevTools MCP, Playwright script | Chrome on our Mac | Yes (webdriver) |
Our connection |
| Same script in Browserbase | Linux Chrome | No | A data centre |
| ChatGPT, Claude, Gemini, Perplexity, Mistral, Meta AI | None | In the user agent | Their servers |
| Jina Reader, DeepSeek | Chrome, Firefox | No | A data centre |
Every agent that finished the task gave the answer our test page was built to give: €9 a month, no SSO, and the four fields of the contact form.
Bot detection usually starts with three questions: does the browser say it's automated (navigator.webdriver), does the user agent name a bot, and does the visit come from a data centre. For most agents the answer was no to all three.
ChatGPT Work ran a Chrome 156 inside the ChatGPT desktop app on our Mac. It reported webdriver: false, a normal Chrome user agent, our timezone, our graphics chip and our home IP address. The only odd things were a narrow window, 319 pixels wide, and speed: a full visit took 11 to 21 seconds. Google Analytics showed these visits as ordinary sessions. So did our own tool. In 2025, Simon Willison found that ChatGPT's agent signed its requests so sites could verify them. In our runs, ChatGPT Work's browser sent no signature at all.
Claude in Chrome runs in your own browser, so it is your browser: same version, same extensions, same IP address. There's nothing to tell apart. Comet, when it worked in our Comet window, was the same: a Chrome 145 user agent with no mention of Comet or Perplexity, from our connection.
Grok was the strangest. The requests came from our IP address with our timezone, but the browser reported Linux on an x86 processor, 8 cores and no graphics card, on an Apple Silicon Mac. So it wasn't our browser, but to the website it came from our connection. We don't know where that browser runs. Its user agent was plain Linux Chrome, and nothing named Grok.
Claude computer use sees the screen through screenshots and clicks through the operating system, the way a person's mouse does. We ran it like Anthropic's reference setup, in a Linux desktop in Docker. It also reported a plain Linux Chrome with webdriver: false.
Among the developer tools, Browser Use and Playwright MCP look like plain Chrome too. A plain Playwright script reports webdriver: true; Playwright MCP switches that off. A Browserbase cloud browser hides it as well, but comes from a data centre, so an IP check would catch it.
A few say what they are. Claude Cowork's browser announced itself as HeadlessChrome/153 with webdriver: true, from Anthropic's servers and a different IP address for almost every page. Vercel's agent-browser and Chrome DevTools MCP report webdriver: true as well. And Manus went furthest: it adds Manus-User/1.0 to its user agent and signs every page request with a Signature-Agent: "https://api.manus.im" header and a cryptographic signature (the Web Bot Auth standard, an IETF draft), so a site can check that the request really came from Manus. It was the only agent in the test that did.
We gave Comet the same prompt six times. Three times it worked in our own Comet window. The other three times it used a browser in Perplexity's cloud: Windows, a server graphics card, a Los Angeles timezone and an Amazon data-centre address. When we started two tasks at once, the first ran in our browser and the second in the cloud.
Asked why, Comet told us it uses the cloud browser for public pages and our own browser only when a site needs our login. That isn't what it did: it used our browser three times for the same public page. The two browsers also click differently, as the next sections show. So the same product can reach your site as a person on a home connection or as a server in a data centre.
ChatGPT Work, Claude in Chrome, Comet in our browser and Grok all reached the site from our home IP address, with our timezone, and so did every developer tool we ran on our Mac. That's worth knowing if you filter bots by IP address or by "data centre or not": for these agents, a website sees the same address as the person who sent them.
Asked the same question, Grok answered everything correctly, and even worked out the monthly price itself (€10.80), without a single click, scroll or mouse movement. It typed the addresses of the plans and contact pages directly and read the SSO answer out of the table that was still collapsed on screen. Manus did the same: three pages typed in 21 seconds, no click, no scroll, no movement.
In analytics that's three page views, almost no time on each page, and no interaction: it looks like a visitor who left straight away. In fact it's a visitor who read everything. When we told Grok to click around, it did, and then it clicked like the other agents below.
When you paste a link into a chatbot and ask for a summary, most don't open a browser. They fetch the page once from their own servers. No script runs, so an analytics tool that counts with a script in the page never sees the visit. Your server does, and most of these are easy to tell apart: they say who they are in the user agent, and most vendors document it (OpenAI, Anthropic, Perplexity, Google, Mistral, Meta).
| User agent | Checked robots.txt first | |
|---|---|---|
| ChatGPT | ChatGPT-User/1.0 |
No. OpenAI's search crawler fetched it 33 seconds later |
| Claude | Claude-User/1.0 |
Yes, one second before |
| Gemini | Google |
No |
| Mistral |
MistralAI-User/1.0, every page twice in the same second |
Yes, the first time |
| Meta AI |
meta-webindexer/1.1, the name of Meta's indexing crawler |
Yes, as facebookexternalhit
|
| Claude Code |
Claude-User (claude-code/…), asks for Markdown first |
No |
Perplexity (PerplexityBot/1.0) fetched robots.txt and then our start page instead of the address we gave it, twice. The start page of the test site is empty, so it told us it couldn't fetch the page. Another time it said the page "returned no readable content" without sending us a single request.
Browserbase's hosted agent, asked to do the full task, didn't use a browser either. It fetched the pages with headers that imitate Chrome 146 on macOS, ten versions behind everything else in the test, and requested two pages in the same millisecond from two different IP addresses.
Two of the chatbot tools didn't just fetch the page. They opened it in a real browser, so our script ran, and an analytics tool would count a visitor.
Jina Reader, a service agents use to turn a page into text, loaded it in a headless Chrome in a data centre. Its user agent said plain Linux Chrome 156; only a second version header, which said 155, showed that the user agent had been changed.
DeepSeek opened the page in Firefox 149 on Linux, with Chinese as its language and a Hong Kong timezone, from a Huawei Cloud address in Hong Kong, and was gone within three seconds. Nothing it sent named DeepSeek or a bot.
In analytics, both are a visitor who loaded one page, did nothing and left.
Once an agent clicks, we could compare its clicks with ours. The first thing we measured, how long the button is held, worked for most agents and failed for two:
| Button held | Last pointer move before the click | |
|---|---|---|
| Most agents | 0 to 13 ms | 1 to 63 ms before |
| Browser Use | 82 to 90 ms | 134 to 142 ms before |
| Comet in our browser | 265 to 453 ms | 531 to 755 ms before |
| People with a mouse or trackpad | 29 to 266 ms | 21 ms to 2 seconds before |
Browser Use and Comet in our browser press, wait and release like a person. Comet in the cloud didn't: it held the button for 10 to 13 ms.
What gave every clicking agent away was how the pointer got to the button. A person moves a hand, so the pointer arrives in many small steps; the last step before a click was 0 to 2 pixels for every one of our clicks. An agent doesn't move a hand. Before each click, the pointer appeared on the target in a single jump of 200 to 840 pixels, or it appeared there for the first time on the page, and it barely moved otherwise:
| Agents | People with a mouse or trackpad | |
|---|---|---|
| The last move before a click | One jump onto the target | A small step, 0 to 2 pixels |
| Other pointer movement on the page | 0 to 2 movements | 11 to 642 |
This held for all 13 kinds of clicking agent, in every run: those that click through Chrome's remote-control interface, Claude computer use, which clicks through the operating system, and the two that wait like a person.
Some things that sound like good bot signals failed on our own data:
macOS Voice Control lets you click by saying what to click. Every one of its clicks landed exactly in the centre, with the button "held" for less than a millisecond, a pressure of 0, and no mouse movement at all. On any single signal, it looked more automated than ChatGPT Work.
Dwell clicks for you when you rest the pointer on something. Its clicks were also held for 0 to 3 milliseconds.
Both differ from the agents in how the pointer moves: Voice Control never moves it before clicking, and with Dwell the pointer rests on the target for about three seconds, moved there by a hand in small steps. A detection rule that relies on click timing would label people who can't use a mouse as bots. The movement tells them apart, but that's the only thing that does.
ChatGPT-User, Claude-User and MistralAI-User requests on your server. Some, like DeepSeek's, show up in analytics as a one-page visit instead.Privatrak already marks visits as automated when the browser says so (webdriver) or the user agent names a headless browser or an agent like Manus. In this test that caught the Playwright script, agent-browser, DevTools MCP, Claude Cowork and Manus. ChatGPT Work, Claude in Chrome, Comet, Grok, computer use, Browser Use, Playwright MCP and the Browserbase browser were counted as people.
We're adding a check in the browser for the movement pattern above: a visit is only marked when every mouse click on the page came after one jump of the pointer onto the target, with almost no other movement, so Voice Control and Dwell users stay people. Replayed on our recordings, that marks every clicking agent and none of us. The browser only sends "automated" or not, never the movements themselves. A marked visit is still counted, and you decide whether to leave automated visits out of your numbers. Agents that only read, and fetchers that run your scripts, will still look like people.
For chatbots that only fetch, we're working on counting them from your server: a small addition for your site sends only the requests whose user agent names a known chatbot or crawler, and Privatrak shows which pages ChatGPT, Claude and Perplexity fetched for someone, separate from your visitors.
GoogleOther) loaded the same page.For reference, here is the user agent each one sent, copied from our server log. Only the rows marked "Yes" ran the page's scripts, so only those can reach an analytics tool that counts with a script. The agents that drive a browser, ChatGPT's agent included, send an ordinary Chrome user agent; only Claude Cowork, agent-browser and Manus give themselves away in it.
| User agent | Runs your scripts | |
|---|---|---|
| ChatGPT Work (ChatGPT's agent) | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36 |
Yes |
| Claude in Chrome (your own browser) | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36 |
Yes |
| Comet, in your browser | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36 |
Yes |
| Comet, in Perplexity's cloud | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36 |
Yes |
| Grok | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36 |
Yes |
| Claude computer use | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36 |
Yes |
| Claude Cowork | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36 |
Yes |
| Manus | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36; Manus-User/1.0 |
Yes |
| Browser Use | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 |
Yes |
| Playwright MCP, DevTools MCP | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36 |
Yes |
| Vercel agent-browser | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.0.0 Safari/537.36 |
Yes |
| Jina Reader | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36 |
Yes |
| DeepSeek | Mozilla/5.0 (X11; Linux x86_64; rv:149.0) Gecko/20100101 Firefox/149.0 |
Yes |
| ChatGPT, reading a link | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot |
No |
| Claude, reading a link | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Claude-User/1.0; +claude-user@anthropic.com) |
No |
| Claude Code | Claude-User (claude-code/2.1.309; +https://support.anthropic.com/) |
No |
| Gemini | Google |
No |
| Perplexity | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; PerplexityBot/1.0; +https://perplexity.ai/perplexitybot) |
No |
| Mistral Le Chat | Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; MistralAI-User/1.0; +https://docs.mistral.ai/robots) |
No |
| Meta AI | meta-webindexer/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler) |
No |
The test site ran on our own server, with three static pages. The server log recorded every request with all its headers. A script on each page reported what the browser said about itself (user agent, webdriver, window size, timezone, graphics) and how each click happened: how long the button was held, how the pointer moved before it, and how many movements there were in total. It never read what was typed into the form.
Each agent ran in its own way:
xdotool, like Anthropic's reference setup.Limits to keep in mind: