Install Pulse
Pulse records when AI systems access your site. There are two install modes — most people start with Pulse Lite (the one-line snippet) and add the server hook to complete Pulse when they want to catch raw-HTML crawlers like GPTBot. What's the difference?
Two kinds of AI traffic
ChatGPT browsing, Perplexity, agent sessions. They load your page like a browser → caught by Pulse Lite (Standard mode).
GPTBot, ClaudeBot, CCBot, Google-Extended, Bytespider. They fetch raw HTML and never run scripts → need the server hook (completes Pulse).
Which install fits you
All three feed the same dashboard. The only difference is how much AI traffic each can see — and that comes down to one thing: does the install run in the browser (JavaScript) or on the server? Pulse's detection list covers 100+ AI crawler families (from the public ai.robots.txt registry), and only a handful — ChatGPT-User, Claude-User, Perplexity-User — execute JavaScript. The rest (GPTBot, ClaudeBot, CCBot, Bingbot, and dozens more) fetch raw HTML and never run a script, so a browser beacon is structurally blind to them — only a server-side install sees them.
Catches: Live-retrieval agents that render the page — ChatGPT-User, Claude-User, Perplexity-User.
Misses every training & indexing crawler (the bulk of AI traffic): they don’t run JavaScript, so a browser beacon — via GTM or a direct paste — can’t fire for them. Honest by design.
Catches: Every AI HTTP request — including the training/indexing crawlers (GPTBot, ClaudeBot, CCBot, Bingbot) the JavaScript beacon can never see, because PHP runs on the server before any script.
Not on WordPress? The server hook / mu-plugin / Node middleware below do the same server-side capture on any stack.
Catches: The most complete coverage Pulse offers — all known crawler families, plus MCP agent calls (the agentic-commerce channel) for Shopify and any MCP-fronted store.
What you’ll see
Within 24–72 hours of install (traffic-dependent), your dashboard fills with the AI agents that reached your site:
Claude-Webanswer-timePerplexity-Useranswer-timeGPTBottrainingClaudeBottrainingIllustrative. Empty for the first few hours is normal — agents arrive on their own schedule.
Your snippet is tied to your account, so activations land in your dashboard and you can watch live AI activity. Sign in to generate it.
Sign in to install Pulse →Confirm it works (60 seconds)
Open this URL in your browser with DevTools → Network open, then click the request and read the Response Headers:
https://aater.ai/api/pulse/YOUR_CLIENT_ID?aater_verify=1&aater_debug=1Look for the header x-aater-pulse. You want it to say written. Then refresh your dashboard — the test hit appears within seconds.
Reading the x-aater-pulse header
Add ?aater_debug=1 to any beacon URL and we tell you exactly what happened. This is your self-diagnosis tool — most questions answer themselves here.
| Header value | Meaning | What to do |
|---|---|---|
written | Recorded successfully. | Nothing — it works. Refresh your dashboard. |
drop:not-a-bot | The user-agent isn't an AI bot (e.g. you opened the URL in a normal browser tab). | Expected. Add ?aater_verify=1 to force a test write, or wait for a real crawler. |
drop:unknown-client | This client ID isn't registered to a site. | Re-copy the snippet from your dashboard — the ID is wrong or was removed. |
drop:bad-uuid | The client ID in the URL is malformed. | Re-copy the snippet exactly from your dashboard. |
drop:rate-limited | Too many pings from one source this hour (abuse protection). | Normal. It resets automatically — no action needed. |
drop:db-timeout | Our database was briefly slow, so this one event was dropped. | Rare and safe to ignore — the next hit records normally. |
write-error:CODE | A database write error occurred (the code is shown). | Email founder@aater.ai with the code if it persists. |
error:exception | An unexpected error — the beacon still returned 204 so your page was never affected. | Email founder@aater.ai if you see this repeatedly. |
FAQ
I installed it but the dashboard is empty.
Most likely no AI bot has visited yet, or you tested from a browser (that returns drop:not-a-bot, by design). Run the verification URL below — if you see x-aater-pulse: written, the pipe works and you are just waiting for real traffic.
Will this slow my site down?
No. The browser snippet is a fire-and-forget image. The Cloudflare Worker reports to us with ctx.waitUntil() AFTER your page is already served. Both are non-blocking, and our endpoint always returns instantly (it even has a 5-second internal cutoff so a slow database can never stall a page).
Why do I need the server hook to catch GPTBot?
Classic crawlers like GPTBot, ClaudeBot and CCBot fetch your raw HTML and never execute JavaScript or load images — so the browser snippet never runs for them. Only a server-side hook (the Worker) sees their request. Rendering agents like ChatGPT browsing and Perplexity DO load the page, so Pulse Lite catches those.
My site isn't on Cloudflare.
You don’t need Cloudflare. On WordPress, drop in the mu-plugin above — it does the same server-side capture on any host (Apache, nginx, IIS, Plesk, shared). Pulse Lite also works everywhere for rendering agents. For Shopify, Next.js or other stacks, email founder@aater.ai.
What data do you collect?
The crawler's user-agent string, the path it requested, and your domain. No visitor names, emails, or personal data.
Still stuck? One human reads every message.
Email founder@aater.ai