# How Pickrate sees AI agents and connects them to revenue

AI agents read your site, decide whether to recommend you, and answer people's questions using what they found. Your analytics shows none of it, because it runs as JavaScript in a browser and agents don't run JavaScript. The tag never fires. When the person shows up later they arrive with no referrer and file as "direct."

## 1. We watch from the server, not the browser
One line in your app, your hosting logs pointed at us, or a small proxy in front. Every request is checked against a list of known AI agents; when one reads your page it's recorded. **There is no script tag because a script tag cannot work here.**

The agent list stays on our side, so new agents reach you without a reinstall or a redeploy. The piece running on your infrastructure stays deliberately dumb: it reports what it saw, we interpret.

## What the collector actually sends
The entire payload:

| Field | What it is | Example |
| --- | --- | --- |
| `actor` | The agent's name, resolved to something readable | `OpenAI GPTBot` |
| `actorType` | What kind of client it is | `assistant, crawler, unknown_machine` |
| `surface` | What kind of resource was asked for | `llms_txt, well_known_endpoint, content` |
| `interaction` | What happened | `llms_txt_requested, page_requested` |
| `path` | The page, with the query string already stripped off | `/docs/quickstart` |
| `httpStatus` | What your server answered, when we can see it | `404` |

**What it never sends:**
- IP addresses. Not collected, not sent, not stored.
- The raw user-agent string. Only the resolved name leaves your server, so nothing else riding in that header goes anywhere.
- Query strings. The path is split on ? before the payload is built, so session tokens and parameters in URLs can't leak.
- Cookies, request bodies, headers, or anything at all about your human visitors on normal pages.

Human traffic to normal pages classifies to nothing and is never sent — not filtered later on our side, it never leaves your server. Requests to agent-specific files like `/llms.txt` are recorded whoever made them, because that's the point of those files.

**You don't have to trust any of this.** The collector is MIT and public at https://github.com/pickrate-io/collector — a few hundred lines of unminified, commented JavaScript. Read it and check every claim here.

Three properties that matter for something in your request path:
- **It can't slow you down.** Fire-and-forget with a 1500ms abort; a failure never reaches your visitor.
- **No key means no-op.** With nothing configured it returns immediately and your app behaves identically, so installing before setup can't break a deploy.
- **Only GET and HEAD are examined.** Form posts, API writes, and checkout calls are never looked at.

## 2. We notice what agents asked for and couldn't get
When the collector can see the response, a request that came back 404 becomes a gap: an agent asked for your `/llms.txt` 86 times and it doesn't exist. That's not an error to clean up, it's a list of pages to make, written by the agents that wanted them.

Caveat worth stating plainly: **in-app middleware runs before the response exists, so it structurally can't see status codes.** Framework middleware gives you reads but not gaps. A log drain, an edge Worker, or the Express adapter all capture status. See https://pickrate.io/install.md

## 3. We test whether agents actually pick you
Separate from your traffic. We ask the major models the kind of question your buyers ask, worded with no brand names ("what should I use to send transactional email"), then count how often you get named versus your competitors. That's your **Pick Rate**.

Reads tell you agents are looking at you. Pick Rate tells you whether you make it into the answer. Plenty of tools get read constantly and recommended never. Prompts are unbranded on purpose — a prompt with your name in it tests whether an agent knows you exist, which is a much easier question than whether it chooses you.

## 4. We connect the reading to the money
An agent reads your page. Days later a person signs up. Three ways we link them:

- **Confirmed — a tagged link.** You hand agents links tagged like `?via=mcp`. Arriving on one drops a first-party cookie remembering the source; when that browser signs up the chain is unbroken. Not a guess.
- **Likely — the referrer.** The person clicked through from chatgpt.com and the browser said so. Weaker: referrers get stripped and links get shared.
- **Inferred — the timing.** Nobody clicked anything. The agent read your page, answered the person, and days later they typed your name in directly. We line up the records: agents read these pages in this window, this signup has no other explanation. Marked as an estimate.

**Identity:** the cookie starts anonymous, just a random ID remembering where a visit came from. When the person creates an account we tie that ID to the real user. If you send an email address to make the link, it's hashed on ingest and the raw address is never stored.

**First touch wins.** Four agents read you before a signup, credit goes to the first. The first one is what put you in the conversation.

## Why we show you our uncertainty
Every conversion carries Confirmed, Likely, or Inferred. We could average those into one confident-looking number, and most tools would. You should know which conversions survive someone asking "how do you know that" and which are our best read of the evidence.

## Where this doesn't work
- **Any client-side tag.** Dead end by definition, the same reason your current analytics is blind.
- **Shopify storefronts.** Traffic terminates at Shopify's edge and a third-party CDN can't sit in front. Only Hydrogen/Oxygen is reachable.
- **Webflow / Wix / Squarespace.** No server code. Cloudflare in front is the only route and it needs DNS control.

If your host exposes access logs, paste one into https://pickrate.io/scan and get most of the picture with nothing installed. If it doesn't, this measurement isn't available to you — we'd rather say so than sell you something that quietly records nothing.

---

Source: https://pickrate.io/how-it-works?via=md · Pickrate measures whether AI agents pick a developer tool over its competitors, across Claude, GPT, Gemini.
