AI crawlers and bots

How to follow a visit from an AI answer through to a signup

By Jonas Reed 路 Oct 9, 2026 路 10 min read

Traffic from ChatGPT, Claude, Perplexity, Copilot and Gemini shows up in your analytics as ordinary visits with a referrer. Whether any of it turns into a signup is a separate question, and you can answer it without a cookie, a consent banner or a tag manager. This post builds the chain in four steps: a visit, a goal, a funnel and a sale.

What you are measuring, and what you are not

Two different things happen when an assistant touches your site, and only one of them can convert.

A visit is a person who clicked a link in an answer and loaded your page. Peeko counts those from ordinary page views by their referrer, with no middleware involved. The hostnames are chatgpt.com, claude.ai, perplexity.ai, copilot.microsoft.com and gemini.google.com, and the post on counting visits from AI assistants by referrer covers them in detail.

An answer fetch is the assistant reading your page while it replies to somebody. The question itself never reaches your server, so nobody can report it. Fetches arrive on a separate server side path, which has no IP address and no visitor hash at all. A fetch has no visitor attached, so it can never be a step in a journey. If you want the crawler side, the post on the first 30 days of AI crawlers is the place to start. For this post, only the click matters.

One limit comes before any setup. A referrer-based count is a floor. In a study of 3,000 sites published on Feb 6, 2025, Ahrefs found that Copilot, Mistral and Jasper visits showed up as Direct traffic in its testing, and concluded that AI traffic is likely being vastly underestimated. Some of your assistant visits will sit in Direct, and any signup they make will sit there too. Read the AI conversion rate as a direction, not a decimal.

What the conversion gap can look like

The best public number for a signup comparison is from Ahrefs, which measured its own site over 30 days and published the result on Jun 16, 2025.

0%3.75%7.5%11.25%15%Share of trafficShare of signups

Source: Ahrefs, AI search traffic conversions on Ahrefs' own site, Jun 16, 2025. Retrieved Oct 7, 2026.

That is 0.5% of traffic producing 12.1% of signups, which Ahrefs puts at a 23x higher conversion rate than traditional organic search. Treat it as one company's result. It is a single site and a 30 day window, and Ahrefs says it is still processing a larger study across many sites. The same article estimates from its own models that users from AI search click links 75% less than they do in traditional organic search, so the people who do arrive may be a self-selected group who already want what you sell. Your site may look different, and the rest of this post is how you find out.

Step 1: Put the script on the page and read the sources

Peeko is one script tag with a site key. It sets no cookie and needs no configuration once it is on the page.

<script defer src="https://usepeeko.com/t.js" data-site="YOUR_SITE_KEY"></script>

Your real key is filled in on the install card when you create a site. After a day of traffic, list where visits come from:

npx @usepeeko/cli sources --site acme.com --range 30d

The command line needs no install and returns the same numbers as the dashboard and the MCP endpoint. Note the number of visits that arrive from the five assistants. That count is the denominator for everything below, so write it down.

Step 2: Define the signup as a goal

A goal is a definition rather than a counter. That matters for a new setup: a goal you write today counts over months before it was written, so you do not have to wait a quarter to see a baseline. A site can hold twenty goals.

The goal form takes a name of up to 80 characters and one of three kinds of match:

  • Page, such as /welcome, the path a person lands on after signing up. This is the easiest option because it needs no code.
  • Outbound, such as checkout.stripe.com, for clicks to another domain.
  • Event, such as signup, for anything that does not load a new page.

Five kinds of click are recorded with no code at all: outbound, phone, email, whatsapp and form. If your signup is a form submission, the form event may already be enough.

For anything else, name the event yourself. An event has one name and one optional string, and no properties object. Either put an attribute on the element:

<button data-peeko-event="signup" data-peeko-detail="pricing-page">
  Create account
</button>

or call it from your own code:

window.peeko?.event?.("signup", "pricing-page");

Then read the goal:

npx @usepeeko/cli goals --site acme.com --range 30d

One detail will save you a confusing afternoon. Goal conversion is people over people: the share of people in the range who did the thing at least once. It uses the stable identity that journeys and funnels use, not the daily one behind the People tile. The two populations are different, so conversion is not the goal count divided by the People tile.

Step 3: Follow one person with a funnel

A goal tells you how many people signed up. A funnel tells you how many of the people who started somewhere got there, in order, within a window.

A funnel holds two to five steps, and each step is a page path or an existing goal. Paths can use a wildcard, so /docs/* matches everything under it. You choose a completion window of 1 hour, 1 day, 7 days or 30 days, a funnel covers at most 90 days, and a site can hold ten of them. A funnel follows a person rather than a visit, which is the part that fits assistant traffic. Someone who reads your page from an answer on Monday and signs up on Thursday is one person in one funnel, not two visits that never meet.

That works because Peeko keeps a second hash, without the date in it, to tell a returning visitor from a new one and string a person's page views into a journey. The hash the People number counts mixes in the date and is re-salted every day, so nobody can be followed from one day to the next through it. No IP address is ever stored in either case.

A sensible first funnel for a small product:

  1. The page assistants send people to, for example /docs/*
  2. /pricing
  3. Your Signup goal

Set the window to 7 days, because people who arrive from an answer often read first and decide later. Then read it:

npx @usepeeko/cli funnels --site acme.com --range 30d

You get each step's share of step one, the rate between steps, and where people drop out.

Getting to AI only

Here is the limit. As of Oct 7, 2026, the documented source filter is taken by the summary, pages, sources and engagement commands. The goals and funnels documentation does not describe a breakdown by source or referrer. So Peeko will not tell you "the funnel completion for ChatGPT visitors" from the funnel view alone.

What you can do is make step one specific. Ask which pages the assistants send people to:

npx @usepeeko/cli pages --site acme.com --range 30d --filter source=SOURCE_AS_PRINTED_BY_SOURCES

Use the label exactly as the sources command prints it. Then compare that page's total views to its views from the assistant source. If most of the page's visits come from assistants, a funnel starting on that page is close to an AI funnel. If most come from search, it is not, and you should say so in whatever you report. Either way, you are measuring a page, not a source.

There is also a hard edge on identity. A person who switches network or browser between the first visit and the signup is lost from the funnel, because identity rests on a hash of address and browser rather than on a cookie. Funnel completion will undercount, and it will undercount most for people who read on a phone and sign up on a laptop. That is the price of storing nothing about anyone.

A lone traveler crosses a line of stepping stones over a wide stream, from a lit window on one bank to a small door on the other, with footprints fading behind them.

Step 4: Carry the source all the way to a sale

If your signup is a payment, you can carry the source to the sale itself. This is the one place Peeko attributes an outcome to a source and a page.

Revenue arrives one of two ways: a one line call from your own site, or a verified Stripe webhook. The two totals are never added together. For the call from your site:

window.peeko?.revenue?.({ amount: 49.99, currency: "USD", id: "order_1234" });

The amount is in dollars, not cents, and id is optional and used to avoid double counting.

For the verified route, Peeko never holds a Stripe API key. The only credential it stores is the webhook signing secret, which proves an event came from your account and does nothing else. Copy the webhook endpoint from your site's Revenue settings, subscribe it to checkout.session.completed and checkout.session.async_payment_succeeded, and paste the whsec_ signing secret back into Peeko.

To tie a sale to the page it started on, pass the page token into your Checkout session. The token is minted per page view and is good for 48 hours:

const token = window.peeko?.token?.() ?? null;
// Send the token to your server, then set it on the Checkout session:
//   metadata: { peeko_t: token }

A verified sale then carries its page and its source, and no cookie was involved. Read it with:

npx @usepeeko/cli revenue --site acme.com --range 30d

That command reports money by source and by page. Three limits apply. A Checkout session created from a page view older than 48 hours cannot use that token. Refunds are not tracked or subtracted. Amounts in different currencies are listed side by side and never converted.

Small numbers, wide error

Most small sites will see few assistant visits, so a rate built on them will move a lot. The arithmetic is plain. With 20 visits from assistants, one signup is 5% and two are 10%. A single person changes the answer by five points.

Cloudflare's crawl-to-refer data shows why the denominator stays small. It compares how many pages a platform fetches with how often it sends a person back. Its figures run from January to July 2025, so they are more than a year old, but they show the shape.

38,065.71,091.4194.840.721.45.4AnthropicOpenAIPerplexityMicrosoftYandexGoogle

Source: Cloudflare, The crawl-to-click gap: Cloudflare data on AI bots, training, and referrals, Aug 29, 2025. Retrieved Oct 7, 2026.

OpenAI fetched 1,091 pages for every referred visit in July 2025, Perplexity 194, and Anthropic 38,065. Search engines sit much lower: Microsoft at 40.7 and Google at 5.4. Cloudflare's ratio counts HTML requests from a platform's user agents against requests whose Referer header names that platform, so it describes the whole web and says nothing about your site. What it does say is that assistants read far more than they send. Plan for a small number of clicks and a smaller number of signups.

Three habits keep you from fooling yourself:

  • Use a 90 day range, and compare like with like each month.
  • State the question before you look: "Do people who land on this page from an assistant sign up at about the rate of everyone who lands there?"
  • Report counts next to rates. "2 of 31" is honest. "6.5%" alone is not.

What to do this week

  1. Add the script tag and run npx @usepeeko/cli sources --site acme.com --range 30d to find your assistant visit count.
  2. Write one goal for the signup. It will count back over the months you already have.
  3. Build one funnel from the page assistants send people to, through /pricing, to that goal, with a 7 day window.
  4. If you sell through Stripe, add the webhook and the page token so a verified sale carries its page and source.

After a month you will know three things you did not: how many assistant visits you get, which page they land on, and whether people who land there sign up at a normal rate. That is enough to decide whether the traffic deserves more work.