Blog·Craft·

Bots get named, not just flagged

The bot flag is useful for filtering traffic. A recognized crawler also gets a name, category, and vendor in the deep response.

A bot flag helps you separate automated traffic from browser traffic. But when you're looking through a log, you probably want to know which bot it was.

/useragent can give you both. When it recognizes GPTBot's User-Agent string, the core response includes bot: true. With ?deep=true on a paid plan, it also returns the crawler details. These are the relevant fields:

{
  "device": "bot",
  "bot": true,
  "deep": {
    "bot": {
      "name": "GPTBot",
      "category": "AI Data Scraper",
      "url": "https://platform.openai.com/docs/bots",
      "vendor": "OpenAI OpCo, LLC"
    },
    "ai": true
  }
}

The boolean and the record serve different purposes. Your application can use bot for a simple filter, then show deep.bot.name when a human wants to read the traffic report. There is no need to extract the name from the raw string a second time.

deep.ai gives you another filter for recognized AI crawlers. GPTBot gets true. Googlebot gets false. The category, vendor, and URL provide more context when the crawler record has them.

This is information parsed from the User-Agent string. It describes what the request identifies itself as. It doesn't authenticate the sender.