ua:bot_category values
ua:bot_category is populated by Fairvisor’s bot classifier, which matches the incoming User-Agent string against a compiled automaton of known bots.
Categories
| Value | Description | Notable examples |
|---|---|---|
ai_crawler |
AI training and indexing crawlers | GPTBot, ClaudeBot, anthropic-ai, Google-Extended, Bytespider, CCBot |
ai_assistant_user |
Requests triggered by an AI assistant on behalf of a user | ChatGPT-User, Claude-Web |
search_engine |
Search engine indexing crawlers | Googlebot, Bingbot, Applebot-Extended |
social_preview |
Link preview fetchers from social platforms and messaging apps | Slackbot, Twitterbot, facebookexternalhit |
seo_research |
SEO auditing and research tools | Ahrefsbot, SemrushBot, MJ12bot |
archiver |
Web archiving crawlers | ia_archiver (Internet Archive), HTTrack |
monitoring_uptime |
Uptime and synthetic monitoring agents | Pingdom, UptimeRobot, StatusCake |
other_bot |
Recognized bots that do not fit the above categories, and the default fallback for any matched bot without a more specific classification | — |
Usage
Use ua:bot_category as a limit key or match condition:
{
"name": "ai-crawlers",
"limit_keys": ["ua:bot_category"],
"algorithm": "token_bucket",
"algorithm_config": {
"tokens_per_second": 5,
"burst": 10
},
"match": {
"ua:bot_category": "ai_crawler"
}
}
Or combine with ua:bot to apply a rule only to any recognized bot, regardless of category:
{
"name": "all-bots",
"limit_keys": ["ip:address"],
"algorithm": "token_bucket",
"algorithm_config": {
"tokens_per_second": 20,
"burst": 40
},
"match": {
"ua:bot": "true"
}
}
Classification behavior
- Matching is case-insensitive substring matching against a compiled Aho–Corasick automaton.
- If the User-Agent matches no known pattern,
ua:botreturns"false"andua:bot_categoryis not populated — the rule is skipped. - Unrecognized bots that happen to set a bot-like User-Agent are not classified; use
ip:addressas a universal fallback.