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:bot returns "false" and ua:bot_category is not populated — the rule is skipped.
  • Unrecognized bots that happen to set a bot-like User-Agent are not classified; use ip:address as a universal fallback.