---
title: "Get Bots Report V2"
method: POST
path: "/v2/reports/bots"
tags: ["Reports", "Bot Traffic Reports"]
---

# Get Bots Report V2

`POST /v2/reports/bots`

Get bot traffic report from the hourly aggregated materialized view (UTC-based).

Supports date_interval="hour", calendar intervals through "year", "quarter", and "relative_week".

Metrics:
- count: unique bot visits
- citations: unique citation events (ai_assistant bot type)
- indexing: unique indexing events (index bot type)
- training: unique training events (ai_training bot type)
- last_visit: most recent visit timestamp

Dimensions:
- date, path, bot_name, bot_provider, bot_type

## Request body

- BotsReportQueryV2
  - `date_interval` 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year' | 'relative_week' — Date interval for the report. (only used with date dimension)
  - `dimensions` string[] — Dimensions to group the report by.
  - `metrics` string[], required
  - `order_by` object — Custom ordering of the report results. The order is a record of key-value pairs where: - key is the field to order by, which can be a metric or dimension - value is the direction of the order, either 'asc' for ascending or 'desc' for descending. When not specified, the default order is the first metric in the query descending.
  - `pagination` Pagination — Offset-based pagination parameters.
    - `limit` integer — Maximum number of results to return. Default is 10,000, maximum is 50,000.
    - `offset` integer — Offset for the results. Used for pagination.
  - `domain` string, required — Domain to query logs for.
  - `start_date` string, date-time, required — Start date for logs. Accepts: YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS, or full ISO timestamp.
  - `end_date` string, date-time — End date in UTC. Accepts same formats as start_date. Defaults to now UTC if omitted.
  - `organization_id` string, uuid, nullable
  - `metric_filters` NumericMetricFilter[] — Numeric filters applied after report metrics are calculated.
    - `field` string, required
    - `operator` '>' | '>=' | '<' | '<=' | '=' | '==' | '!=', required
    - `value` union, required
      - integer
      - number
  - `filters` union[] — Filters for bots report.
    - union
      - PathFilter — Filter by request path
        - `field` 'path', required
        - `operator` 'is' | 'not_is' | 'in' | 'not_in' | 'contains' | 'not_contains' | 'matches' | 'contains_case_insensitive' | 'not_contains_case_insensitive', required
        - `value` union, required
          - string
          - string[]
      - BotNameFilter — Filter by bot name (user agent)
        - `field` 'bot_name', required
        - `operator` 'is' | 'not_is' | 'in' | 'not_in' | 'contains' | 'not_contains' | 'matches' | 'contains_case_insensitive' | 'not_contains_case_insensitive', required
        - `value` union, required
          - 'Amazonbot' | 'ClaudeBot' | 'Claude-User' | 'Claude-SearchBot' | 'Applebot' | 'Applebot-Extended' | 'Bytespider' | 'DeepSeek' | 'DuckAssistBot' | 'DuckDuckBot' | 'Googlebot' | 'Googlebot-News' | 'Googlebot-Video' | 'Googlebot-Image' | 'Google-Extended' | 'Storebot-Google' | 'Google-CloudVertexBot' | 'meta-externalfetcher' | 'meta-externalagent' | 'bingbot' | 'MicrosoftPreview' | 'ChatGPT-User' | 'GPTBot' | 'OAI-SearchBot' | 'OAI-Operator' | 'PerplexityBot' | 'Perplexity-User' | 'Grok-PageBrowser' | 'YouBot' | 'OpenClaw' | 'baiduspider' | 'CCBot' | 'ERNIEBot' | 'Gemini-Fetch' | 'YandexBot' | 'PetalBot' | 'MistralAI-User' | 'Slurp' | 'Gemini-Deep-Research'
          - string[]
      - BotProviderFilter — Filter by bot provider
        - `field` 'bot_provider', required
        - `operator` 'is' | 'not_is' | 'in' | 'not_in' | 'contains' | 'not_contains' | 'matches' | 'contains_case_insensitive' | 'not_contains_case_insensitive', required
        - `value` union, required
          - 'openai' | 'anthropic' | 'chatgpt' | 'deepseek' | 'google' | 'microsoft' | 'perplexity' | 'apple' | 'bytedance' | 'amazon' | 'meta' | 'duckduckgo' | 'you' | 'xai' | 'grok' | 'gemini' | 'mistral' | 'huawei' | 'yandex' | 'baidu' | 'yahoo' | 'commoncrawl' | 'openclaw'
          - string[]
      - BotTypeFilter — Filter by bot_type column (v2 hourly table only)
        - `field` 'bot_type', required
        - `operator` 'is' | 'not_is' | 'in' | 'not_in' | 'contains' | 'not_contains' | 'matches' | 'contains_case_insensitive' | 'not_contains_case_insensitive', required
        - `value` union, required
          - 'ai_assistant' | 'ai_training' | 'index' | 'ai_agent'
          - string[]

## Response `200`

Successful Response

- Response — Base response model for reports.
  - `info` Info, required — Base model for report information.
    - `total_rows` integer, required
    - `query` object, nullable
  - `data` Result[], required
    - `metrics` union[], required
      - union
        - integer
        - number
    - `dimensions` union[], required
      - union
        - string
        - string, uuid

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/cooper-square-technologies/apis/external-api.md) · [All operations](https://skmtc.net/cooper-square-technologies/apis/external-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/cooper-square-technologies/external-api/versions/ab03b3c80494/schema)
