Agent setup: authorize Sight MCP and ask your agent to call get_tracking_setup. It configures this integration automatically.

FastAPI

FastAPI/Starlette ASGI middleware that forwards AI-crawler page requests to Sight's POST /api/v1/track, preserving the original User-Agent. Crawlers don't run JavaScript, so the browser tracker never fires for them unless they also fetch the script URL. This is the origin-side path.

Humans are not recorded here — they still use the browser tracker. Tracking every request would double-count people.

Part of Sight — see sightapp/sight-backend SPEC.md and tasks/plan.md (Track B4).

Install

pip install sight-fastapi

Usage

from fastapi import FastAPI
from sight_fastapi import SightCrawlerMiddleware

app = FastAPI()
app.add_middleware(SightCrawlerMiddleware, api_key="sk_...")

GET requests only; other methods are ignored. The send is scheduled via asyncio.create_task and never awaited on the response path — a slow/unreachable Sight backend adds zero latency to the real request.

The UA token list matches sight-backend's internal/api/agents.go (GPTBot, ClaudeBot, PerplexityBot, …). Keep them in sync when that list grows.

Verify

curl -s http://localhost:8000/pricing -A "GPTBot/1.0"
curl -s "https://api.usesight.dev/api/v1/query/agent-traffic?days=1" \
  -H "X-API-Key: YOUR_API_KEY"

GPTBot should show up. A request with a Chrome UA should not.

Tests

pip install -e ".[dev]"
pytest

5 tests, all passing against a real FastAPI TestClient (no mocked framework internals): agent detection, a GPTBot GET producing exactly one tracked call, a human GET producing none, and the required-api_key check.

Source repository