Transformations · Intelligent bot classification

Agents are the new users. Know which ones you’re talking to.

A new transformation template classifies every event by what produced it: a person, an AI agent acting for one, a crawler, an SEO tool, a scraper, or other automation. Each event also carries a probability of bad intent, so every downstream tool can respond appropriately.

Illustration: incoming events pass a System 1 classifier and are sorted into human, AI agent, AI crawler, search crawler, and scraper lanes, with scraper traffic dropped.

The problem

Not every bot should be treated the same

AI agents now browse, compare, and buy on behalf of real people. Search crawlers decide how you show up. Scrapers copy your content and pricing. A single “is bot” flag lumps all of them together.

Block them all and you turn away customers who send an agent. Let them all through and your analytics, ad audiences, and experiments fill up with noise. You need to know what kind of traffic it is, and whether it means harm.

Traffic segments

Five categories, one field

Every event is labeled with the kind of actor behind it.

human

Human

A person using your site or app directly.

Typical actionTreat as usual
ai_agent

AI agent

An assistant browsing or buying on behalf of a real person.

Typical actionServe and measure separately
ai_crawler

AI crawler

Bots collecting content for AI models and answer engines.

Typical actionAllow or limit, keep out of analytics
search_crawler

Search crawler

Search engines indexing your pages.

Typical actionAllow, keep out of analytics
scraper

Scraper

Bulk collection of content, pricing, or catalog data.

Typical actionRate-limit or drop
Bad intent probability

What it is, and what it’s likely to do

The category tells you who. badIntent tells you how much to trust them: a probability from 0 to 1 that the event is part of abuse, like credential stuffing, content theft, or ad fraud. A shopping agent and a scraper are both automated, but only one should reach your checkout.

kindConfidence tells you how sure the model is about the category, and actsForUser flags when a real person is behind the event. You set the thresholds. Route, flag, or drop events in the same transformation, or pass the fields along and let each destination decide.

0.0 · BenignReviewLikely harmful · 1.0
  • Shopping assistant comparing plansai_agent
    0.08
  • Search engine indexing docssearch_crawler
    0.01
  • Headless browser on sign-up formother_automation
    0.37
  • Rotating IPs pulling every price pagescraper
    0.91
Illustrative scores.
How it works

Classified in flight, before data lands

The template runs as a Transformation in Event Stream. It sends event signals to a fast System 1 classifier model, such as Jev, and writes the result back onto the event. Prefer to keep inference in your own infrastructure? Point it at a self-hosted model like Laya or Kev.

  1. 01

    Collect

    Events arrive from your web, mobile, and server SDKs through Event Stream.

  2. 02

    Classify

    The transformation sends request signals to a System 1 model, hosted or self-hosted, for a fast verdict.

  3. 03

    Enrich

    isBot, category, badIntent, kindConfidence, and actsForUser are written to the event context.

  4. 04

    Act

    Route, filter, or pass through to your warehouse and 200+ destinations with the label attached.

Sample output

The same event, with context attached

The classification is added to the event’s context. Nothing else changes, so existing destinations, tracking plans, and warehouse models keep working.

context.isBot
true unless the category is human
context.bot.category
human, ai_agent, ai_crawler, search_crawler, seo_tool, scraper, or other_automation
context.bot.badIntent
Probability from 0 to 1 that the event is part of abuse
context.bot.kindConfidence
Probability from 0 to 1 that the category is correct
context.bot.actsForUser
true when a real person is behind the event
context.bot.detectedBy
The model that produced the verdict
Indicative only. The docs are the source of truth for the current schema.
json
{
  "type": "page",
  "event": "Product Viewed",
  "anonymousId": "8f2c1e7a-4b0d-4e2a-9c61-0d3f5a7b21c4",
  "context": {
    "userAgent": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0",
    "ip": "203.0.113.42",
    "isBot": true,
    "bot": {
      "category": "ai_agent",
      "badIntent": 0.06,
      "kindConfidence": 0.93,
      "actsForUser": true,
      "detectedBy": "jev",
      "timestamp": "2026-09-25T14:32:08.114Z"
    }
  }
}
Downstream use cases

One label, a better decision in every tool

Marketing and growth

Cleaner audiences and ad signals

Keep scrapers and automation out of conversion events and retargeting audiences, and see agent-driven journeys as their own channel.

Product analytics

Metrics that reflect real usage

Split funnels and experiments by category so bot traffic stops skewing results, and track how agent usage grows.

Security and fraud

Act on intent, not just "is bot"

Send events with high badIntent to your fraud or SIEM tools while letting helpful agents and crawlers through.

Data engineers

A template you can read and change

It is plain transformation code. Adjust thresholds, swap the model endpoint, or add your own rules, and manage it as code.

Technical executives

Plan for agent traffic

Get a governed view of how much of your traffic comes from agents, crawlers, and automation, in your own warehouse.

Frequently asked questions

  • AI agents increasingly act for real customers, and search crawlers affect how you are found. Classification lets you keep the traffic you want and act on the traffic you don’t.

  • A small, fast classifier built for quick, pattern-based decisions, suited to running on every event in the pipeline. The template works with hosted models like Jev or self-hosted models like Laya and Kev.

  • Yes. Point the transformation at a self-hosted endpoint so request data never leaves your environment.

  • It only adds a classification object to the event context. Downstream destinations and warehouse tables keep working as before.

  • Use category and badIntent in the same transformation to drop or route events, or forward them and filter in each destination.

Know your traffic before it reaches your tools

Add the bot classification template to any Event Stream pipeline in minutes.