Server Logs / API Ingest
If your site does not run behind Cloudflare or Akamai — for example your own nginx is the edge — you can push AI crawler visits to Finseo directly. Any system that can send an HTTP POST works: a server-side tracking pipeline, a filtered nginx access log with a cron job, or a custom script. The connection lives in Bot Analytics → Sync → Server Logs / API → Connect. The dialog creates your project-bound ingest token (fslg_…) and shows the endpoint, an NDJSON example, and ready-to-copy nginx and cron templates.
AI crawlers like GPTBot, ClaudeBot and PerplexityBot do not execute JavaScript — a client-side snippet cannot see them. Bot Traffic works exclusively with server-side data, which is why the data has to come from your edge or server logs.
Endpoint
Log line format
The field names are intentionally identical to the Cloudflare feed, so one export format works across every Finseo push integration.
Response
received— lines in the batchbotVisits— lines identified as verified AI/search crawler requestssaved— rows written after deduplication
Retries are safe: Finseo deduplicates server-side on bot + timestamp + IP + path. A batch sent twice never produces double counts. You can also send unfiltered logs — non-crawler lines are discarded and never stored — but pre-filtering keeps your payloads small.
Option A: push from your server-side tracking
If you already have a central request log (server-side tracking, log pipeline), filter it to the crawler User-Agents and POST the batch hourly or daily:Option B: filtered nginx access log + cron
Full access logging is not required. A second, filtered log that only contains AI crawlers is typically a few thousand lines per day — no aggregation service needed:Limits
- Max
16 MBper request body (64 MBdecompressed), max20,000lines per push - Rate limits per IP and per token — send batches, not single requests
- Only requests from verified AI and search crawlers are stored; everything else is discarded
Testing without any server changes
Want to see real numbers before wiring anything up? Bot Analytics → Upload Server Logs accepts raw nginx, Apache and Cloudflare text logs up to 1 GB — export a day of logs and upload them manually.Disconnect
Click Manage → Disconnect on the Server Logs / API card. This invalidates the ingest token immediately — further pushes are rejected with403. Remember to also remove your cron job.
Troubleshooting
Response shows botVisits: 0 although I sent crawler lines
Response shows botVisits: 0 although I sent crawler lines
Finseo verifies crawler identity via the providers’ published IP ranges. If you send your load balancer’s IP instead of the real client IP (first entry of
X-Forwarded-For), verification fails and the lines are discarded. Also check that ClientRequestUserAgent contains the full original UA string.401 or 403 errors
401 or 403 errors
401 means the Authorization: Bearer header is missing; 403 means the token is invalid or was revoked via Disconnect. Copy the current token from the connect dialog.Status stays on 'Awaiting first push'
Status stays on 'Awaiting first push'
The status switches on the first successful POST — check your cron output for the JSON response. A
413 means the batch exceeded the size limits; split it up.saved is lower than botVisits
saved is lower than botVisits
That is deduplication working: lines with the same bot, timestamp, IP and path — e.g. from a retried batch — are only stored once.