Open Settings → Integrations → Vercel in Gauge — you’ll copy the Endpoint URL and secret from it. The rest happens in the Vercel dashboard:
In your Vercel team, open Settings → Drains and click Create Drain.
Pick Logs as the data source.
Select the projects you want to track. Under source types, enable Static Files, Function, and Edge Function — all three together capture every incoming HTTP request. Under environments, enable Production.
For the destination, choose Custom endpoint and paste the Endpoint URL from the Gauge page. Pick either JSON or NDJSON as the format — Gauge accepts both.
Still on the destination step, click Add header and create a header named Authorization with the value Bearer <your-secret> — click Show on the Gauge page to reveal the secret.
Save the drain. Vercel runs a connectivity check, and traffic starts flowing within a few minutes. In Gauge, the card shows a Receiving events badge and a View AI Traffic button once events land.
Without the Authorization header, Gauge rejects every event with a 403 and you’ll see no traffic. The value must start with Bearer followed by your secret.
Gauge creates the Worker, uploads the secret, and attaches the routes. It needs a scoped Cloudflare API token:
Click Connect Cloudflare.
Click Create the token on Cloudflare. This opens Cloudflare’s Create Custom Token form pre-filled with the three permissions Gauge needs: Account.Workers Scripts: Edit, Zone.Workers Routes: Edit, and Zone.Zone: Read.
In Cloudflare, click Continue to summary, then Create Token, and copy the token.
Back in Gauge, paste it into the Paste the token field and click Connect.
If the token can access more than one Cloudflare account, pick one and click Use this account.
The card now shows a Cloudflare connected badge and lists every zone (domain) on your account under Your zones.
Click Enable on a zone. Gauge deploys the Worker with a wildcard route covering the whole zone and forwards every request.To change what gets forwarded, expand the zone with the chevron first. Two settings:Routes — which parts of your site the Worker watches:
Apex (yourdomain.com/*)
WWW subdomain (www.yourdomain.com/*)
Docs subdomain (docs.yourdomain.com/*)
Wildcard (*.yourdomain.com/*) — all subdomains
Add route for a custom pattern, like app.yourdomain.com/*
Traffic to forward:
All requests (recommended) — forward everything; Gauge classifies bots downstream.
Bot requests only — drop human traffic at the edge, forward only known AI crawlers (GPTBot, ClaudeBot, PerplexityBot, etc.). Only use this if your security policy requires it — filtered traffic can’t be backfilled.
Click Enable (or Update if the zone is already running).
The zone badge shows Enabled, no events yet right after deploying, then Receiving events once traffic lands — usually within a minute. If events never arrive, check that the zone’s DNS records are proxied through Cloudflare (orange cloud on). The Worker only sees proxied traffic.
If you’d rather not give Gauge an API token, expand Prefer to set up manually? at the bottom of the Worker tab:
In the Cloudflare dashboard, go to Workers & Pages → Create Application, choose Start with Hello World!, and click Deploy.
Open the new Worker, go to Settings → Variables and Secrets, and add an encrypted Secret named DRAIN_SECRET. For the value, click Show on the Secret row in Gauge, copy it, paste it in, and select Save Version.
Click Edit code, replace the starter contents with the Worker code from the Gauge page (Copy Worker code button), and click Save and deploy.
Go to Settings → Triggers → Routes and add a route matching your zone — for example, *.yourdomain.com/*.
Traffic starts forwarding within a minute. Gauge shows Manual setup detected with per-zone event counts once payloads arrive.
In the Cloudflare dashboard, open your zone and add a Logpush job under Analytics & Logs → Logs.
Select dataset HTTP requests and destination HTTP.
Paste the Destination URL from the Gauge page.
Under Advanced options, add a header named Authorization with the value Bearer <your-secret>.
On the Configure fields step, select ClientRequestUserAgent. Also recommended: EdgeStartTimestamp, ClientRequestPath, ClientRequestHost, EdgeResponseStatus, EdgeResponseBytes, and ClientCountry.
Save the job. Cloudflare sends a test batch, and the badge in Gauge flips to Receiving events within a few minutes.
If ClientRequestUserAgent isn’t selected, the logs arrive without user agents and Gauge can’t detect AI bots.
Use the manual option if you cannot send logs through Cloudflare or Vercel. Open Settings → Integrations → AI Traffic (manual) and click Create endpoint. Gauge gives you a dedicated endpoint URL and bearer secret.Send an HTTPS POST with these headers:
Every object needs timestamp, user_agent, and either url or both host and path. The code block has a copy button so you can use this JSON Schema in your own validation or transformation code.
Gauge accepts timestamps from 1900-01-01T00:00:00Z through 2262-04-11T23:47:16.854775807Z. Events can arrive out of chronological order. Gauge uses the event’s timestamp in AI Traffic rather than the time it receives the request.
Use ?dry_run=1 first. Gauge validates and normalizes the payload without storing it, then returns accepted and rejected counts with sample normalized rows.
No events after Vercel setup — check the Authorization header exists and starts with Bearer , and that Production is enabled under environments.
No events after Cloudflare Worker setup — check the zone’s DNS records are orange-cloud proxied and the route pattern matches your traffic (including the trailing /*).
Manual events are rejected — add ?dry_run=1 to inspect validation errors. Check that every object includes a valid timestamp, a non-empty user_agent, and either url or both host and path.
Traffic stopped after regenerating the secret — update the DRAIN_SECRET in your Worker, or the Authorization header in your Logpush job or Vercel drain, with the new value.
Bots missing from Logpush data — make sure ClientRequestUserAgent is in the job’s field list.