Task: E7-1. Due 4 Nov 2026. Status: draft. Som sends it to Austin and Kevin.
Prepared 28 Oct 2026. No Hypertune figures in this spec. All tables are empty layouts.
We want to know if AEO earns its time. To know that, we must count paying customers who came from AI answers. This spec says what to track, where to store it and how to count it once.
A GET of https://hypertune.gg/ on 28 Oct 2026 showed:
G-MHWGLY4TPD) and Google Ads (AW-16466588746) via gtag.js.Server: cloudflare, CF-RAY), with Railway headers behind it.ht_entry_referrer) because the consent banner reloads the page on Accept. It hands that to GA4 as page_referrer.ht_am_id, and the hosts affiliate.hypertune.gg and loggregator.hypertune.gg.wait_for_update.This spec builds on the existing ht_entry_referrer tracker. It does not assume which tool is the source of truth. See the questions at the end.
Detect on the first page view of a session. Check utm_source first, then the entry referrer hostname. Use ht_entry_referrer, not document.referrer, after a consent reload.
| Engine | Referrer hostnames | utm_source values | Notes |
|---|---|---|---|
| ChatGPT | chatgpt.com, chat.openai.com | chatgpt.com | OpenAI says ChatGPT adds utm_source=chatgpt.com to referral links. In October 2026 some links lost the tag; reports say a fix began on 15 Oct. App links may send no referrer. |
| Perplexity | perplexity.ai, www.perplexity.ai | perplexity, perplexity.ai | Usually passes a referrer. |
| Gemini | gemini.google.com, bard.google.com (old) | gemini | Separate from Google Search. |
| Copilot / Bing chat | copilot.microsoft.com, copilot.com, copilot.cloud.microsoft, edgeservices.bing.com | copilot | Never match plain bing.com. That is Bing organic. |
| Claude | claude.ai | claude, claude.ai | Often sends no referrer. |
| Other AI | chat.deepseek.com, grok.com, meta.ai, chat.mistral.ai, you.com, poe.com | same names | One bucket. |
| Google AI Overviews / AI Mode | google.com | none | Cannot be split. These clicks arrive as normal Google organic. Google reports them inside the Search Console "Web" search type. We count them only through the self-reported answer. |
Rules:
/guides/cs2). Strip the query string.cpc, paid), do not count it as AI.Count bot hits from Cloudflare or origin server logs by user agent. Never add them to human visits. Bots do not run GA4, so they will not appear there anyway.
| Bot token | Owner | What it does |
|---|---|---|
GPTBot | OpenAI | Crawls for model training. |
OAI-SearchBot | OpenAI | Crawls for ChatGPT search results. |
ChatGPT-User | OpenAI | Fetches a page when a user asks. |
PerplexityBot | Perplexity | Crawls for Perplexity search results. |
Perplexity-User | Perplexity | Fetches a page when a user asks. |
ClaudeBot | Anthropic | Crawls for model training. |
Claude-SearchBot | Anthropic | Crawls for Claude search quality. |
Claude-User | Anthropic | Fetches a page when a user asks. |
bingbot | Microsoft | Crawls for Bing. Copilot answers draw on Bing. |
Google-Extended | Not countable. It is a robots.txt control token only, with no user agent of its own. Googlebot hits cannot be split into AI and search. |
Check IPs against the published lists (https://openai.com/gptbot.json, https://www.perplexity.com/perplexitybot.json) to drop fakes. Group hits as training, search and user fetch.
A paying customer is an account with a first successful paid subscription charge. Kevin to confirm how trials and refunds count.
ht_ai_lt.ht_ai_ft once, and never overwrite it. Pass it to signup and checkout. Suggested lifetime: 90 days.ht_am_id) is unchanged. A customer can be both affiliate and AI.| Field | Example | Stored in |
|---|---|---|
ai_engine | chatgpt | ht_ai_lt (sessionStorage) and ht_ai_ft (cookie) |
ai_method | utm or referrer | same |
ai_landing_page | /guides/cs2 | same |
ai_first_date | 2026-11-02 | ht_ai_ft only (date, no time) |
hdyhau | perplexity | customer record |
ai_engine_ft, ai_engine_lt, ai_landing_page_ft | copied at signup | customer record and checkout metadata |
Events (names work in GA4 or any tool):
ai_visit: once per session when an engine is found. Params: ai_engine, ai_method, ai_landing_page.sign_up: params ai_engine_ft, ai_engine_lt.hdyhau_answered: param hdyhau.purchase: params ai_engine_ft, ai_engine_lt, hdyhau. Fire on the first paid charge only, or add is_first_payment.| Week | Engine | Landing page | AI visits | Signups | Paying (last touch) | Paying (first touch) | Paying (self-reported) | Paying (deduplicated) |
|---|---|---|---|---|---|---|---|---|
| 2026-W45 | ChatGPT | /guides/cs2 | - | - | - | - | - | - |
| 2026-W45 | Perplexity | / | - | - | - | - | - | - |
Self-reported rows have no landing page; show "(none)". A second table holds bots: Week, Bot, Group, Page, Hits.
ht_ai_ft or fire ai_visit until analytics consent is granted. Then read ht_entry_referrer.ht_ai_ft and ht_ai_lt to the /cookies page.https://hypertune.gg/?utm_source=chatgpt.com in a private window. ai_visit fires with chatgpt and utm.ai_visit fires with perplexity and referrer.ht_ai_ft cookie, no ai_visit.chatgpt. Last touch is empty.bing.com click are not AI.loggregator.hypertune.gg?