Skip to main content

By platform

Botscope for Laravel

Classify requests in middleware, before your routes run. Every decision carries a reason code you can log, test against, and explain to somebody later.

Free plan, no card. 100,000 events a month with every feature on.

botscope.io · last 7d

This site, classified by this product. Nothing here is a mock-up.

live
requests
4,245
human
80%
AI agents
0%
stopped
0%
verdict stream
  1. signals
    • threat_feed: datacenter — fail (listed on a subscribed feed)
    • anomaly_score: 0.25 — pass (combined disagreement across the collected signals)
  2. signals
    • threat_feed: datacenter — fail (listed on a subscribed feed)
    • anomaly_score: 0.25 — pass (combined disagreement across the collected signals)
  3. signals
    • anomaly_score: 0.40 — pass (combined disagreement across the collected signals)

botscope.io's own traffic only — never a customer's. No addresses, no query strings, and a path is shown only when it is already a public page.

In short

  • Runs as middleware, so classification happens before your application logic.
  • Every decision carries a reason code, which makes a block explainable after the fact.
  • Observe mode returns a verdict without changing the response, so it can be deployed to production and read.
  • No DNS change and no proxy.

Updated 16 September 2026

01 · where the decision belongs

Where the decision belongs

Bot logic tends to accumulate in three places at once: a rule at the CDN, a check in a controller, and a rate limiter somewhere in between. Each was right when it was added and together they are impossible to reason about.

Middleware is one place, early enough to be cheap and late enough to know about the route.

02 · applying it

Applying it

// bootstrap/app.php
->withMiddleware(function (Middleware $middleware) {
    $middleware->web(append: [
        \Botscope\Laravel\Middleware\Classify::class,
    ]);
})

// Reading the verdict anywhere downstream
$verdict = $request->attributes->get('botscope');

$verdict->isBot();      // classified as automated
$verdict->agent();      // catalogue slug, when identified
$verdict->reason();     // why — logged with the decision

03 · agents commonly seen on application endpoints

Agents commonly seen on application endpoints

Bot Operator Default policy Verifiable
GoogleAgent-Mariner Google DeepMind Observe By user agent
Manus-User Butterfly Effect Observe By user agent
AmazonBuyForMe Amazon Observe By user agent
anthropic-ai Anthropic Observe By user agent
Claude-Web Anthropic Observe By user agent
cohere-ai Cohere Observe By user agent
iAskBot iAsk Observe By user agent
iaskspider Ai Search Observe By user agent

Read live from the Botscope crawler catalogue. Default policy is the catalogue default; every agent can be overridden per site.

04 · what it does not do

What it does not do

It does not replace a rate limiter or a WAF, and it is not a DDoS layer. It classifies who is asking; volume control is a separate concern and better handled where it already is.

Questions

What does it add to request latency?

Classification is local. Verification lookups that need the network are cached after the first request from an address.

Can I test against it?

Yes. The verdict is an object on the request, so it can be faked in a test the way any other dependency is.

Does it work with Octane?

Yes, with the usual caveat about not holding request state in a singleton.

Can I enforce in one route group only?

Yes. Apply the middleware where you want it; observe mode reports everywhere without acting.

See which of these reach your site

Free plan, no card: 100,000 events a month with every feature on. Nothing is blocked until you turn enforcement on.

Related