# 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. It focuses on **high-level reporting data**, not individual executions or raw AI answers, making it ideal for dashboards, business intelligence tools, and automated reporting. **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. 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. **Base URL:** `https://app.keyword.com` --- ## Domains ### Fetch all domains `GET /api/v2/ai-visibility/domains` Retrieves all AI Visibility domains for your account --- ### Fetch a single domain `GET /api/v2/ai-visibility/domains/{domain_id}` Retrieves a single AI Visibility domain for your account **Parameters:** | Name | In | Required | Description | |------|----|----------|-------------| | `domain_id` | path | Yes | | --- ### Fetch all search terms `GET /api/v2/ai-visibility/domains/{domain_id}/search-terms` **Parameters:** | Name | In | Required | Description | |------|----|----------|-------------| | `domain_id` | path | Yes | | **Response (200):** ```json { "data": [ { "id": "45947598475984759824", // Search term ID "term": "What is AI search visibility and why is it important?", "aiSearchEngines": [ "chatgpt_gui" // Tracked search engines ], "status": "active", // Status "executionsAmount": 14, // Total amount of executions since added "interval": "monthly", // How often search terms is set to update automatically "region": "us", // Region "websearch": true, // Indicates if web search has been activated. This is on my default for ChatGPT "createdAt": "2025-07-07T12:16:14.909Z", // Date added "lastExecutionTime": "2025-12-25T09:15:51.293Z", // Last time search term was updated "nextScheduledExecutionTime": "2026-01-25T09:00:00.000Z", // Next scheduled update "searchTermTopicRef": { "id": "45947598475984759824", // Topic ID "name": "Ai Search visibility" // Topic name }, "tags": [search] // Indicates tages added to the search term. }, { "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 `GET /api/v2/ai-visibility/domains/{domain_id}/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 **Parameters:** | Name | In | Required | Description | |------|----|----------|-------------| | `domain_id` | path | Yes | | | `topics[]` | query | No | Optional parameter to filter metrics by specific topics | | `search_terms[]` | query | No | Optional parameter to filter metrics by specific search term | | `engine[]` | query | No | Optional parameter to filter metrics by specific engines | | `timeframe` | query | No | Default: 30. Can be 24h, 7d, 30d, 3m, 1y | | `period_offset` | query | No | Default: 0 (current period). Can be -1..-365 (previous period) | | `aggregation` | query | No | Default: daily. Can be hourly, daily, weekly, monthly | **Response (200):** ```json { "data": { "ownBrandMetrics": { "visibilityScore": 32.4, // Own brand overall visibility score "sentiment": 50, // Own brand overall sentiment score "mentions": 4, // Total number of own brand mentions "citations": 4, // Total number of citations of domain "avgPosition": 3, // Average position in mentions "detectionRate": 38.9, // How often your domain is detected on each run "top3": 38.9, // How often are you in the top 3 position in mentions "validMetricsCount": 4, "trends": { // Indicated the trends over time based on the timeframe added "visibilityScore": 1.1, "sentiment": 0, "mentions": 1, "citations": 1, "avgPosition": 0.2, "detectionRate": 2.2, "top3": 2.2 }, "historicalData": { // Historical results based on your set frequency "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": [ // Historic visibility score 5.7, 36, 31.3, 32.4 ], "sentiment": [ // Historic sentiment score 50, 50, 50, 50 ], "mentions": [ // Historic number of mentions during each run 1, 2, 0, 1 ], "citations": [ // Historic number of citations during each run 1, 2, 0, 1 ], "avgPosition": [ // Average position during each run 2, 2.1, 2.8, 3 ], "detectionRate": [ // Detection rate during each run 6.3, 40, 36.7, 38.9 ], "top3": [ // Top 3 position during each run 6.3, 40, 36.7, 38.9 ], "timestamps": [ // Update date and time "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": { // Indicates topics linked to search term "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": { // Details on the search engine being tracked "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 `GET /api/v2/ai-visibility/domains/{domain_id}/metrics/sentiment` # 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. **Parameters:** | Name | In | Required | Description | |------|----|----------|-------------| | `domain_id` | path | Yes | | | `topics[]` | query | No | | | `search_terms[]` | query | No | | --- ### Fetch Citation analytics `GET /api/v2/ai-visibility/domains/{domain_id}/metrics/citations` # 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. **Parameters:** | Name | In | Required | Description | |------|----|----------|-------------| | `domain_id` | path | Yes | | | `topics[]` | query | No | | | `search_terms[]` | query | No | | ---