Any backend, any language.
One request per pageview.
If your stack can make an HTTP call, it can talk to Arrivl. Send one GET to the intake endpoint on each request, the universal path when there's no dedicated integration yet.
A single GET with the request's basics. No SDK, no dependency, just an HTTP call.
Install guide
Install HTTP API, start to finish
Send bot visit data to Arrivl from any backend using a simple GET request. Use this integration when you need full control over tracking or your stack isn't covered by one of the platform-specific integrations.
Monitoring only. Automatic optimization needs an install that sits in the request path: Cloudflare, Shopify, or the Next.js middleware.
01Install guide
Prerequisites
- 01An Arrivl website key
- 02A backend capable of making outbound HTTP requests
02Install guide
Endpoint
GET https://arrivl.ai/api/v1/intake/pageview
All parameters are passed as query string parameters. Requests must be made over HTTPS.
03Install guide
Parameters
urlstringrequired- The full URL of the page being accessed (e.g.
https://yoursite.com/blog/post). Build the host fromX-Forwarded-Host, falling back toHost: behind a reverse proxy or container platform the rawHostis an internal hostname (oftenlocalhost), and an install whose events report it never verifies. userAgentstringrequired- The
User-Agentheader from the incoming request. refstringrequired- The
Refererheader from the incoming request. Pass an empty string if none. acceptstring- The raw
Acceptheader from the incoming request. A real browser navigating to a page asks fortext/html; a script wearing a browser's User-Agent usually does not, and without this field Arrivl cannot tell the two apart. Omit it or pass an empty string if the request has none. ipstringrequired- The visitor's IP address.
websiteKeystringrequired- Your Arrivl website key.
sigstring- The raw
Signatureheader (Web Bot Auth / RFC 9421), when the request carries one. Forward it verbatim. sigInputstring- The raw
Signature-Inputheader, when present. Forward verbatim. vbcstring- Cloudflare's edge bot-verification verdict (
request.cf.verifiedBotCategory). Only available inside a Cloudflare Worker — self-hosted proxies simply omit it. sigAgentstring- The raw
Signature-Agentheader, when present. Forward verbatim (both the quoted-string and dictionary forms are accepted). Note: the Vercel log drain cannot carry these headers — its upstream schema is fixed.
04Install guide
Example
bash
curl --request GET \ "https://arrivl.ai/api/v1/intake/pageview\ ?url=https://yoursite.com/blog/post\ &userAgent=Mozilla/5.0%20(compatible;%20ChatGPT-User/1.0)\ &ref=\ &accept=text/html\ &ip=1.2.3.4\ &websiteKey=ak_YOUR_WEBSITE_KEY\ &status=200\ &bytes=83846\ &shape=post_response\ &source=http\ &sv=3"
05Install guide
Best practices
- 01Track key pages only: blogs, landing pages, product pages,
robots.txt,sitemap.xml - 02Skip static assets: images, CSS, JS, fonts don't need to be tracked
- 03Fire-and-forget: don't await the response; send tracking calls asynchronously so they never delay the page
- 04URL-encode all parameters: especially
urlanduserAgentwhich may contain special characters
01Requests not appearing in Agent Analytics
Check that your websiteKey is correct and not revoked. Verify the request returns {"ok": true}. Events may take a few seconds to appear in the dashboard.
02Where do I find my website key?
Go to Settings and click "+ New Key" under your project. The key starts with ak_.
03Should I track every request?
No. Focus on HTML pages that AI bots visit. Skip static assets (images, CSS, JS, fonts) and API endpoints.
Values shown as ak_YOUR_WEBSITE_KEY are placeholders. Sign in and the in-dashboard version of this guide fills in your real key and per-project values for you.
Next step