AI traffic
Install on Laravel
The Composer package for Laravel — install, proxies, scheduler and cache.
The package adds a middleware that sees AI crawlers and people arriving from assistants, and sends the data through your app's queue.
Requirements: PHP 8.2 or newer, Laravel 11, 12 or 13.
Install
-
Create a key in Survelium → Brand settings → Integrations → Create key. It is shown once.
-
Until the package is on Packagist, add both repositories to
composer.json:"repositories": [ { "type": "vcs", "url": "https://github.com/survelium/agent-analytics-laravel" }, { "type": "vcs", "url": "https://github.com/survelium/agent-analytics-php" } ] -
Install the package:
composer require survelium/agent-analytics-laravel:^0.1@dev -
Put the key in
.env:SURVELIUM_INGEST_KEY=svk_... -
Check it:
php artisan survelium:flush --force # sends now; expects "Survelium answered 202" php artisan survelium:status
That is all. The middleware adds itself to the web group and works after the response has gone out. Without a key
it does nothing, so local and CI stay quiet.
Before you leave it running, check
- Behind Cloudflare or a load balancer, configure
trusted proxies so
$request->ip()returns the real IP. Otherwise crawlers cannot be verified. - The scheduler runs (
* * * * * php artisan schedule:runin cron).survelium:flushis scheduled every five minutes; without it data only goes out when new visits arrive. - A page cache in front of PHP (Varnish, LiteSpeed, Cloudflare "cache everything") hides the crawlers reading cached pages. Exclude AI crawler user agents from it (the list).
What it counts
Page views only: GET/HEAD requests that are not XHR, Livewire or prefetch. The data sits in
storage/app/survelium and goes out every 50 items or 60 seconds, through a queued job (on the sync queue it runs
after the response).
Configuration
php artisan vendor:publish --tag="survelium-config"
| Option | Default | |
|---|---|---|
ingest_key |
SURVELIUM_INGEST_KEY |
Nothing happens while empty. |
enabled |
SURVELIUM_ENABLED, true |
|
track_referrals |
true |
false = AI crawlers only. |
middleware_groups |
['web'] |
[] and add TrackAgentAnalytics yourself where you want it. |
deny_paths |
Telescope, Horizon, Pulse, Debugbar, /up |
Paths neither reported nor counted. |
queue.connection, queue.name |
the default queue | SURVELIUM_QUEUE_CONNECTION, SURVELIUM_QUEUE. |
schedule |
true |
Schedules survelium:flush every five minutes. |
On several web servers, each keeps its own buffer and total. Crawler hits add up correctly, but the daily total comes from one server, so the AI traffic share reads higher.