Everfound

See which AI agents read your site

AI crawlers don't run JavaScript, so Google Analytics, Plausible, and every script-tag analytics tool report zero when GPTBot, ClaudeBot, or PerplexityBot reads your pages. The Everfound tracker is one middleware file that runs at the edge, before JavaScript matters, and reports two things to your dashboard: AI crawlers reading your site, and humans arriving from AI answers.

What you get

  • Verified crawler hits. Every hit claiming to be an AI bot is checked against the IP ranges its operator publishes (OpenAI, Anthropic, Google, Microsoft, Perplexity), so you can tell real GPTBot from a scraper wearing its user agent.
  • AI referral clicks. Humans who clicked through from ChatGPT, Perplexity, Gemini, Copilot, and other AI surfaces: the demand side of being visible to AI.
  • Per-engine breakdowns. Which bots came, what they fetched, and how that changes over 7/30/90 days, next to your audit score and AI answer presence in the same console.

Install

You need an Everfound audit (that's where your dashboard and site key live) and a site deployed somewhere with edge middleware. Vercel with Next.js is the happy path.

1. Add the package

SHterminal
npm install everfound-tracker

2. Add middleware.ts

Save it next to package.json (or in src/ if your project keeps middleware there). Your dashboard generates this exact file with your real site key filled in.

TSmiddleware.ts
import { everfound } from "everfound-tracker";
// Your site key is generated in the Everfound dashboard. Safe to commit —
// it only authorizes reporting your own site's traffic.
export default everfound({ key: "your-site-key" });
export const config = { matcher: "/((?!_next/|.*\\.(?:js|css|png|jpg|svg|ico|woff2?)$).*)" };

3. Redeploy, then test

Open your dashboard and hit Test connection. It confirms the deployed site reports back. From then on, hits appear in the agent analytics panel as they happen. New AI agents are classified server-side, so you never need to update the package when the bot landscape grows.

Or connect a log drain

Not on Next.js, or want more than middleware can see? If your host or CDN can forward request logs over HTTPS (Vercel Log Drains, Fastly real-time logging, anything that can POST JSON or NDJSON), point it at your ingest URL:

URLdrain endpoint
https://everfound.ai/api/track/logs?host=example.com&key=your-site-key

On Vercel: Team Settings → Drains → Add Drain → data: Logs; projects: pick your site; sources: Functions, Edge Functions, Static Files; environment: Production; destination: Custom Endpoint with that URL and JSON encoding. The Test button should report a 2xx, then create the drain. Logs flow within a minute. (Older Vercel Log Drains screens ask for an x-vercel-verify value instead: append it to the URL as &verify=<value>.) Other providers send entries in this shape (extra fields are ignored, camelCase works too):

JSONlog format
[
{
"timestamp": "2026-06-12T08:30:00Z",
"host": "example.com",
"path": "/pricing",
"status_code": 200,
"ip": "203.0.113.9",
"user_agent": "Mozilla/5.0 (compatible; GPTBot/1.0)",
"referer": ""
}
]

Drains carry your whole traffic stream, so the AI slice is filtered out at ingest the same way the middleware filters at the edge: human lines are counted and discarded, never stored. Unlike the middleware, drain lines record the HTTP status your origin returned, so the data shows not just that GPTBot came, but whether it got a 200 or a 404.

What it deliberately doesn't do

  • No cookies, no fingerprinting, no page-view analytics on your human visitors.
  • Ordinary human traffic never leaves your edge. Only bot-shaped user agents and AI-referred visits are reported.
  • IP addresses ride along on bot hits only (for crawler verification) and are stored truncated (/24 for IPv4, /48 for IPv6), never for referral clicks.
  • It never blocks or slows a request: fire-and-forget by design.

No audit yet? Run a free preview. Every audit comes with the dashboard the tracker reports into.