v1.0.0
OpenAPI 3.2.0

Keyword.com AI Visibility Tracker API

The Keyword.com AI Visibility Tracker API gives you programmatic access to the AI Visibility data you see inside the Keyword.com dashboard. It’s designed for teams who want to measure how brands and competitors appear across major AI search engine, such as ChatGPT, Perplexity, AI Overviews, and others, and bring those insights into their own internal tools, reports, and workflows.

With this API, you can retrieve aggregated visibility metrics, trend comparisons, engine-level performance, topic segmentation, and brand-level benchmarking across your configured AI visibility setup.

This API focuses on high-level reporting data, not individual executions or raw AI answers. It's ideal for dashboards, business intelligence tools, and automated reporting — not for retrieving the full text of AI engine responses.

This section covers:

  • How to authenticate using your existing Keyword.com API credentials

  • Endpoints to retrieve AI Visibility metrics and time-series data

  • How filters such as timeframe, period offsets, engines, topics, and queries affect the resulting metrics

  • Practical examples of requests and responses

  • Guidance for integrating AI Visibility data alongside your SERP monitoring or internal analytics

If you already use the SERP API, authentication and request structure will feel familiar — the same API token works for both.

Once authenticated, you can pull:

  • Brand-level visibility, sentiment, and ranking metrics

  • Competitor benchmarks

  • Engine-level and topic-level trend data

  • Historical metrics aggregated hourly, daily, weekly, or monthly

This API allows you to unify AI search performance with your existing SEO data, automate visibility reporting, and integrate Keyword.com’s AI tracking directly into your product or internal systems.

Server:https://app.keyword.com
Client Libraries

Domains

Fetch all domains

Retrieves all AI Visibility domains for your account

Responses
  • 200
    Type: object

    Fetch all domains response

    • data
      Type: array object[]
    • Type: object
    • meta
      Type: object
    application/json
Request Example for get/api/v2/ai-visibility/domains
curl https://app.keyword.com/api/v2/ai-visibility/domains \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": [
    {
      "id": 1198,
      "domain": "cmitsolutions.com",
      "created_at": "2025-11-21T13:40:32.000000Z",
      "updated_at": "2025-11-21T13:40:32.000000Z"
    },
    {
      "id": 1021,
      "domain": "Abanca.com",
      "created_at": "2025-10-27T11:46:11.000000Z",
      "updated_at": "2025-10-27T11:46:11.000000Z"
    },
    {
      "id": 955,
      "domain": "cuentasclaras.es",
      "created_at": "2025-10-14T15:58:02.000000Z",
      "updated_at": "2025-10-14T15:58:02.000000Z"
    }
  ],
  "links": {
    "first": "https://app.keyword.com/api/v2/ai-visibility/domains?page=1",
    "last": "https://app.keyword.com/api/v2/ai-visibility/domains?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "links": [
      {
        "url": null,
        "label": "« Previous",
        "page": null,
        "active": false
      },
      {
        "url": "https://app.keyword.com/api/v2/ai-visibility/domains?page=1",
        "label": "1",
        "page": 1,
        "active": true
      },
      {
        "url": null,
        "label": "Next »",
        "page": null,
        "active": false
      }
    ],
    "path": "https://app.keyword.com/api/v2/ai-visibility/domains",
    "per_page": 15,
    "to": 15,
    "total": 15
  }
}

Fetch a single domain

Retrieves a single AI Visibility domain for your account

Path Parameters
  • domain_id
    Type: string
    required
Responses
  • 200
    Type: object

    Fetch a single domain

    • data
      Type: object
    application/json
Request Example for get/api/v2/ai-visibility/domains/{domain_id}
curl 'https://app.keyword.com/api/v2/ai-visibility/domains/{{domain_id}}' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": {
    "id": 658,
    "domain": "mailchimp.com",
    "created_at": "2025-08-26T09:52:33.000000Z",
    "updated_at": "2025-08-26T09:52:33.000000Z"
  }
}

Fetch all search terms

Path Parameters
  • domain_id
    Type: string
    required
Responses
  • 200
    Type: object

    Fetch all search terms

    • data
      Type: array object[]
    application/json
Request Example for get/api/v2/ai-visibility/domains/{domain_id}/search-terms
curl 'https://app.keyword.com/api/v2/ai-visibility/domains/{{domain_id}}/search-terms' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": [
    {
      "id": "45947598475984759824",
      "term": "What is AI search visibility and why is it important?",
      "aiSearchEngines": [
        "chatgpt_gui"
      ],
      "status": "active",
      "executionsAmount": 14,
      "interval": "monthly",
      "region": "us",
      "websearch": true,
      "createdAt": "2025-07-07T12:16:14.909Z",
      "lastExecutionTime": "2025-12-25T09:15:51.293Z",
      "nextScheduledExecutionTime": "2026-01-25T09:00:00.000Z",
      "searchTermTopicRef": {
        "id": "45947598475984759824",
        "name": "Ai Search visibility"
      },
      "tags": [
        "search"
      ]
    },
    {
      "id": "45947598475984759822",
      "term": "How can I monitor my website's performance in AI search results?",
      "aiSearchEngines": [
        "google_ai_overview"
      ],
      "status": "active",
      "executionsAmount": 13,
      "interval": "monthly",
      "region": "us",
      "websearch": false,
      "createdAt": "2025-07-07T12:16:06.682Z",
      "lastExecutionTime": "2025-12-25T09:03:15.423Z",
      "nextScheduledExecutionTime": "2026-01-25T09:00:00.000Z",
      "searchTermTopicRef": {
        "id": "45947598475984759822",
        "name": "Ai Search visibility"
      },
      "tags": []
    },
    {
      "id": "459475984759847598267",
      "term": "How accurate are Google rank tracking tools?",
      "aiSearchEngines": [
        "chatgpt_gui"
      ],
      "status": "active",
      "executionsAmount": 11,
      "interval": "monthly",
      "region": "us",
      "websearch": true,
      "createdAt": "2025-07-07T12:21:00.003Z",
      "lastExecutionTime": "2025-12-25T09:04:54.221Z",
      "nextScheduledExecutionTime": "2026-01-25T09:00:00.000Z",
      "searchTermTopicRef": {
        "id": "459475984759847598267",
        "name": "Google SERP Rank tracker"
      },
      "tags": []
    }
  ]
}

Reporting API

Fetch dashboard metrics

Dashboard Metrics Endpoint

Get dashboard-ready metrics for a domain's AI visibility tracking. This endpoint returns comprehensive analytics data to power your dashboard visualizations.

Overview

This endpoint fetches detailed metrics about how a domain appears in AI-generated search responses across various AI engines. It provides insights into visibility, sentiment, mentions, citations, and competitive positioning over time.

Query Parameters

topics[] (array)

Filter metrics by specific topics you want to track.

  • Example: Ai Search visibility

  • Type: Array of strings

  • Description: Allows you to narrow down metrics to specific topic areas

search_terms[] (array)

Specific search terms or queries to analyze for AI visibility.

  • Example: How often does Keyword.com show up in AI-generated search responses?

  • Type: Array of strings

  • Description: The actual search queries you want to track across AI engines

engine[] (array)

Specify which AI engine(s) to analyze.

  • Example: chatgpt_gui

  • Type: Array of strings

  • Description: Target specific AI platforms for your analysis

timeframe (string)

The time period for which to retrieve metrics.

  • Example: 30d (30 days)

  • Type: String

  • Description: Defines the duration of the analysis period. Can be specified in days (e.g., "30d" or "30")

period_offset (string)

Offset for the time period to analyze historical data.

  • Example: 0 (current period)

  • Type: String

  • Description: Use "0" for the current period, or specify an offset to analyze previous periods

aggregation (string)

How to aggregate the time series data.

  • Example: monthly

  • Type: String

  • Description: Determines the granularity of time-based metrics (e.g., daily, weekly, monthly)

Response Data

The endpoint returns a comprehensive dataset including:

  • Visibility Scores: Quantitative metrics showing how prominently the domain appears in AI responses

  • Sentiment Analysis: Tone and sentiment of mentions across AI-generated content

  • Mentions: Frequency and context of domain references

  • Citations: How often the domain is cited as a source

  • Competitor Analysis: Comparative metrics against competing domains

  • Time Series Data: Historical trends based on the specified aggregation period

Path Parameters
  • domain_id
    Type: string
    required
Query Parameters
  • topics[]
    Type: array string[]

    Optional parameter to filter metrics by specific topics

  • search_terms[]
    Type: array string[]

    Optional parameter to filter metrics by specific search term

  • engines[]
    Type: array string[]

    Optional parameter to filter metrics by specific engines

  • timeframe
    Type: string

    Default: 30. Can be 24h, 7d, 30d, 3m, 1y

  • period_offset
    Type: integer

    Default: 0 (current period). Can be -1..-365 (previous period)

  • aggregation
    Type: string

    Default: daily. Can be hourly, daily, weekly, monthly

Responses
  • 200
    Type: object

    Fetch dashboard metrics results

    • data
      Type: object
    application/json
Request Example for get/api/v2/ai-visibility/domains/{domain_id}/metrics
curl 'https://app.keyword.com/api/v2/ai-visibility/domains/{{domain_id}}/metrics' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": {
    "ownBrandMetrics": {
      "visibilityScore": 32.4,
      "sentiment": 50,
      "mentions": 4,
      "citations": 4,
      "avgPosition": 3,
      "detectionRate": 38.9,
      "top3": 38.9,
      "validMetricsCount": 4,
      "trends": {
        "visibilityScore": 1.1,
        "sentiment": 0,
        "mentions": 1,
        "citations": 1,
        "avgPosition": 0.2,
        "detectionRate": 2.2,
        "top3": 2.2
      },
      "historicalData": {
        "hourly": {
          "visibilityScore": [],
          "sentiment": [],
          "mentions": [],
          "citations": [],
          "avgPosition": [],
          "detectionRate": [],
          "top3": [],
          "timestamps": [],
          "brandNotFound": []
        },
        "daily": {
          "visibilityScore": [],
          "sentiment": [],
          "mentions": [],
          "citations": [],
          "avgPosition": [],
          "detectionRate": [],
          "top3": [],
          "timestamps": [],
          "brandNotFound": []
        },
        "weekly": {
          "visibilityScore": [],
          "sentiment": [],
          "mentions": [],
          "citations": [],
          "avgPosition": [],
          "detectionRate": [],
          "top3": [],
          "timestamps": [],
          "brandNotFound": []
        },
        "monthly": {
          "visibilityScore": [
            5.7,
            36,
            31.3,
            32.4
          ],
          "sentiment": [
            50,
            50,
            50,
            50
          ],
          "mentions": [
            1,
            2,
            0,
            1
          ],
          "citations": [
            1,
            2,
            0,
            1
          ],
          "avgPosition": [
            2,
            2.1,
            2.8,
            3
          ],
          "detectionRate": [
            6.3,
            40,
            36.7,
            38.9
          ],
          "top3": [
            6.3,
            40,
            36.7,
            38.9
          ],
          "timestamps": [
            "2025-09-01T00:00:00.000Z",
            "2025-10-01T00:00:00.000Z",
            "2025-11-01T00:00:00.000Z",
            "2025-12-01T00:00:00.000Z"
          ],
          "brandNotFound": [
            true,
            false,
            false,
            true
          ]
        }
      },
      "topicMetricsData": {
        "hourly": [],
        "daily": [],
        "weekly": [],
        "monthly": [
          {
            "topicId": "_orphaned",
            "topicName": "Search Terms Without Topic",
            "visibilityScore": [
              5.7,
              36,
              31.3,
              32.4
            ],
            "sentiment": [
              50,
              50,
              50,
              50
            ],
            "avgPosition": [
              2,
              2.1,
              2.8,
              3
            ],
            "detectionRate": [
              6.3,
              40,
              36.7,
              38.9
            ],
            "top3": [
              6.3,
              40,
              36.7,
              38.9
            ],
            "mentions": [
              1,
              2,
              0,
              1
            ],
            "citations": [
              1,
              2,
              0,
              1
            ],
            "timestamps": [
              "2025-09-01T00:00:00.000Z",
              "2025-10-01T00:00:00.000Z",
              "2025-11-01T00:00:00.000Z",
              "2025-12-01T00:00:00.000Z"
            ],
            "brandNotFound": [
              true,
              false,
              false,
              true
            ]
          }
        ]
      },
      "engineMetricsData": {
        "hourly": [],
        "daily": [],
        "weekly": [],
        "monthly": [
          {
            "engineId": "google_ai_overview",
            "engineName": "google_ai_overview",
            "visibilityScore": [
              5.7,
              36,
              31.3,
              32.4
            ],
            "sentiment": [
              50,
              50,
              50,
              50
            ],
            "avgPosition": [
              2,
              2.1,
              2.8,
              3
            ],
            "detectionRate": [
              6.3,
              40,
              36.7,
              38.9
            ],
            "top3": [
              6.3,
              40,
              36.7,
              38.9
            ],
            "mentions": [
              1,
              2,
              0,
              1
            ],
            "citations": [
              1,
              2,
              0,
              1
            ],
            "timestamps": [
              "2025-09-01T00:00:00.000Z",
              "2025-10-01T00:00:00.000Z",
              "2025-11-01T00:00:00.000Z",
              "2025-12-01T00:00:00.000Z"
            ],
            "brandNotFound": [
              true,
              false,
              false,
              true
            ]
          }
        ]
      },
      "preselectionWhitelist": [
        "Shopify",
        "Style Factory",
        "GemPages"
      ],
      "preselectionBlacklist": [],
      "manualWhitelist": [],
      "manualBlacklist": []
    },
    "competitorMetrics": [
      {
        "name": "Shopify",
        "isOwnBrand": false,
        "latestValue": 100,
        "trend": 0,
        "variations": [
          "Shopify"
        ],
        "visibilityScore": 100,
        "latestRank": 1,
        "avgRank": 1,
        "avgSentiment": 76.7,
        "appearances": 13,
        "citationCount": 93,
        "detectionRate": 100,
        "top3": 100,
        "validMetricsCount": 1
      },
      {
        "name": "Style Factory",
        "isOwnBrand": false,
        "latestValue": 60.6,
        "trend": 30.3,
        "variations": [
          "Style Factory"
        ],
        "visibilityScore": 60.6,
        "latestRank": 2,
        "avgRank": 2,
        "avgSentiment": 50,
        "appearances": 2,
        "citationCount": 2,
        "detectionRate": 66.7,
        "top3": 66.7,
        "validMetricsCount": 1
      },
      {
        "name": "pagefly.io",
        "isOwnBrand": true,
        "latestValue": 32.4,
        "trend": 20.8,
        "variations": [
          "PageFly",
          "pagefly.io"
        ],
        "visibilityScore": 32.4,
        "latestRank": 3,
        "avgRank": 2.5,
        "avgSentiment": 50,
        "appearances": 4,
        "citationCount": 4,
        "detectionRate": 38.9,
        "top3": 38.9,
        "validMetricsCount": 4
      },
      {
        "name": "GemPages",
        "isOwnBrand": false,
        "latestValue": 25.6,
        "trend": 0,
        "variations": [
          "GemPages"
        ],
        "visibilityScore": 25.6,
        "latestRank": 4,
        "avgRank": 4,
        "avgSentiment": 50,
        "appearances": 1,
        "citationCount": 1,
        "detectionRate": 33.3,
        "top3": 0,
        "validMetricsCount": 1
      }
    ],
    "competitorTimeSeriesData": {
      "hourly": {
        "timestamps": [],
        "competitors": []
      },
      "daily": {
        "timestamps": [],
        "competitors": []
      },
      "weekly": {
        "timestamps": [],
        "competitors": []
      },
      "monthly": {
        "timestamps": [
          "2025-09-01T00:00:00.000Z",
          "2025-10-01T00:00:00.000Z",
          "2025-11-01T00:00:00.000Z",
          "2025-12-01T00:00:00.000Z"
        ],
        "competitors": [
          {
            "name": "Shopify",
            "isOwnBrand": false,
            "variations": [
              "Shopify"
            ],
            "metrics": {
              "visibilityScore": [
                100,
                100,
                100,
                100
              ],
              "sentiment": [
                87.5,
                84,
                82,
                76.7
              ],
              "avgPosition": [
                1,
                1,
                1,
                1
              ],
              "detectionRate": [
                100,
                100,
                100,
                100
              ],
              "top3": [
                100,
                100,
                100,
                100
              ],
              "mentions": [
                4,
                4,
                2,
                3
              ],
              "citations": [
                27,
                39,
                11,
                16
              ]
            }
          },
          {
            "name": "Style Factory",
            "isOwnBrand": false,
            "variations": [
              "Style Factory"
            ],
            "metrics": {
              "visibilityScore": [
                0,
                0,
                30.3,
                60.6
              ],
              "sentiment": [
                0,
                0,
                50,
                50
              ],
              "avgPosition": [
                0,
                0,
                2,
                2
              ],
              "detectionRate": [
                0,
                0,
                33.3,
                66.7
              ],
              "top3": [
                0,
                0,
                33.3,
                66.7
              ],
              "mentions": [
                0,
                0,
                1,
                1
              ],
              "citations": [
                0,
                0,
                1,
                1
              ]
            }
          },
          {
            "name": "GemPages",
            "isOwnBrand": false,
            "variations": [
              "GemPages"
            ],
            "metrics": {
              "visibilityScore": [
                0,
                0,
                25.6,
                25.6
              ],
              "sentiment": [
                0,
                0,
                50,
                50
              ],
              "avgPosition": [
                0,
                0,
                4,
                4
              ],
              "detectionRate": [
                0,
                0,
                33.3,
                33.3
              ],
              "top3": [
                0,
                0,
                0,
                0
              ],
              "mentions": [
                0,
                0,
                1,
                0
              ],
              "citations": [
                0,
                0,
                1,
                0
              ]
            }
          }
        ]
      }
    }
  }
}

Fetch Sentiment analytics

Fetch Sentiment Analytics

Get comprehensive sentiment analysis data for a specific domain. This endpoint returns brand and company sentiment aggregates, keyword clouds, and sentiment breakdowns by AI engine.

Endpoint Overview

This endpoint analyzes how your domain is perceived across AI-generated search responses, providing insights into brand sentiment, company reputation, and keyword associations.

Path Variables

  • domain_id (required): The unique identifier for the domain you want to fetch sentiment data for. Use the {{domain_id}} variable to reference your target domain.

Query Parameters

topics[]

  • Type: Array of strings

  • Required: No

  • Description: Filter sentiment data by specific topics or categories. This allows you to narrow down the sentiment analysis to particular areas of interest.

  • Example: topics[]=Ai Search visibility

  • Usage: Can be passed multiple times to filter by multiple topics

search_terms[]

  • Type: Array of strings

  • Required: No

  • Description: Analyze sentiment for specific search terms or queries. This helps you understand how sentiment varies across different search contexts.

  • Example: search_terms[]=How often does Keyword.com show up in AI-generated search responses?

  • Usage: Can be passed multiple times to analyze sentiment across multiple search terms

Response Data

The response includes the following sentiment analysis components:

  • Brand Sentiment Aggregates: Overall sentiment metrics for your brand across AI responses

  • Company Sentiment Aggregates: Aggregated sentiment data specific to your company mentions

  • Keyword Clouds: Visual representation of frequently associated keywords and their sentiment weights

  • Sentiment Breakdowns by Engine: Detailed sentiment analysis segmented by different AI search engines (e.g., ChatGPT, Perplexity, etc.)

Authentication

This endpoint requires authentication via the api_token variable.

Path Parameters
  • domain_id
    Type: string
    required
Query Parameters
  • topics[]
    Type: array string[]
  • search_terms[]
    Type: array string[]
Responses
  • 200
    Type: object

    Fetch Sentiment analytics response

    • data
      Type: object
    application/json
Request Example for get/api/v2/ai-visibility/domains/{domain_id}/metrics/sentiment
curl 'https://app.keyword.com/api/v2/ai-visibility/domains/{{domain_id}}/metrics/sentiment' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
"data": {
"brandSentiments": [
{
"name": "mailchimp.com",
"totalSentimentScore": 275,
"sentimentCount": 4,
"positiveKeywords": {
"user-friendly interface": {
"count": 1,

Fetch Citation analytics

Fetch Citation Analytics

Get comprehensive citation analytics for a domain, including detailed breakdowns of how the domain appears in AI-generated search responses.

Overview

This endpoint retrieves citation data for a specified domain, providing insights into:

  • Domain aggregations: Overall citation metrics at the domain level
  • URL aggregations: Citation metrics broken down by individual URLs
  • Citation breakdowns by AI engine: How different AI search engines cite your domain
  • Citation breakdowns by query: Which search queries trigger citations of your domain
  • Brand analysis: Citation performance for your brand
  • Competitor analysis: Comparative citation data against competitors

Path Variables

  • {{domain_id}} (required): The unique identifier for the domain you want to fetch citation analytics for

Query Parameters

All query parameters are optional and can be used to filter and refine the citation data:

  • topics[]: Filter citation data by specific topics

    • Type: Array of strings
    • Example: topics[]=Ai Search visibility
    • Use this to focus on citations related to particular subject areas or themes
  • search_terms[]: Analyze citations for specific search terms or queries

    • Type: Array of strings
    • Example: search_terms[]=How often does Keyword.com show up in AI-generated search responses?
    • Use this to understand how your domain is cited when users search for particular terms

Response

The response includes comprehensive citation analytics with domain and URL level aggregations, breakdowns by AI engine, query-specific citation data, brand performance metrics, and competitor comparison data.

Path Parameters
  • domain_id
    Type: string
    required
Query Parameters
  • topics[]
    Type: array string[]
  • search_terms[]
    Type: array string[]
Responses
  • 200
    Type: object

    Fetch Citation analytics response

    • data
      Type: object
    application/json
Request Example for get/api/v2/ai-visibility/domains/{domain_id}/metrics/citations
curl 'https://app.keyword.com/api/v2/ai-visibility/domains/{{domain_id}}/metrics/citations' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
"data": {
"totalCitations": 25,
"uniqueCitations": 23,
"uniqueDomains": 20,
"totalBrands": 0,
"timestampFormat": "daily",
"paginationInfo": {
"hasMore": false,
"totalCount": 23,