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.
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.
Five categories, one field
Every event is labeled with the kind of actor behind it.
humanHuman
A person using your site or app directly.
ai_agentAI agent
An assistant browsing or buying on behalf of a real person.
ai_crawlerAI crawler
Bots collecting content for AI models and answer engines.
search_crawlerSearch crawler
Search engines indexing your pages.
scraperScraper
Bulk collection of content, pricing, or catalog data.
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.
- Shopping assistant comparing plans0.08
ai_agent - Search engine indexing docs0.01
search_crawler - Headless browser on sign-up form0.37
other_automation - Rotating IPs pulling every price page0.91
scraper
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.
- 01
Collect
Events arrive from your web, mobile, and server SDKs through Event Stream.
- 02
Classify
The transformation sends request signals to a System 1 model, hosted or self-hosted, for a fast verdict.
- 03
Enrich
isBot, category, badIntent, kindConfidence, and actsForUser are written to the event context.
- 04
Act
Route, filter, or pass through to your warehouse and 200+ destinations with the label attached.
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
{
"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"
}
}
}One label, a better decision in every tool
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.
Metrics that reflect real usage
Split funnels and experiments by category so bot traffic stops skewing results, and track how agent usage grows.
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.
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.
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.