Drains are available to Vercel teams on the Pro and Enterprise plans. On Hobby, use the Next.js tracker instead.
Known limitations
A drain sees less of each request than the tracker does, because Vercel’s request logs carry the method, URL, user agent, referer, client IP and status code but no other request headers. Without theAccept header Notra can’t tell when an agent asks for Markdown, and without the fetch metadata and client hint headers it can’t catch agents that pose as a regular browser. Requests are still classified by user agent and referer, which covers the declared crawlers and assistants and every referral from an AI answer.
A drain also only observes traffic, so it can’t tag the links in the Markdown you serve for journey tagging. Requests that already carry an ntr tag still join their journey, but if you need Markdown detection or tagging, the tracker package is the better fit.
1
Get your token and endpoint
Open Traffic in the GEO sidebar and pick Vercel log drain at the top of the install panel. It shows the endpoint URL and a ready-made
Authorization header that carries your project’s tracking token.2
Add the drain
In Vercel, open Team Settings, then Drains, click Add Drain and choose Logs. Select the projects that serve this site, keep the
static, lambda and edge sources and pick the production environment. Leave sampling at 100% because a sampled drain drops AI requests along with everything else.3
Configure the endpoint
Choose Custom Endpoint and paste the endpoint URL:Pick JSON or NDJSON as the format and add your token under Custom Headers:You can leave the signature verification secret as it is, since Notra authenticates the drain with the token.
4
Create and verify
Click Create Drain. Vercel sends a test request, and Notra answers it with
200. The Traffic page switches from the install panel to the dashboard once the first AI crawler or referral arrives, which usually takes a few seconds after a crawler visits.How Notra reads the drain
Notra rebuilds each request from theproxy block of a log line and drops anything that isn’t a GET request for a page, so static assets, /api routes and build logs never count. A request that writes several log lines is counted once. Every request then goes through the same checks as tracker events: it has to belong to one of the project’s tracked domains, and only AI crawlers and AI referrals are stored. Human requests are discarded on arrival.
A drain that covers several projects is fine, because requests for hosts outside the project’s domains are dropped. Preview deployments on *.vercel.app are dropped the same way.
Next steps
Cloudflare Logpush
Track sites that sit behind Cloudflare, wherever they are hosted.
No AI traffic yet
What to check when nothing shows up.