AI Results Tracker – Competitors
AIRT Competitors API, part of the AI Results Tracker (AIRT), provides programmatic access to the per-prompt, per-day Competitors view: which brands and source URLs appear in AI answers for a tracked prompt over time, with a cached HTML copy of the answer page for human verification.
All endpoints are engine-scoped (llm_id). To inspect a prompt across several engines, list the engines via List LLM engines and iterate.
Using the API, you can:
- retrieve the brands and source URLs cited in an AI answer for a prompt across a date range
- list the dates on which a prompt was checked, so you can skip empty periods
- get SEO metrics (Domain Trust, referring domains, organic keywords) for the cited sources
Note:
prompt_llm_idvalues come from theprompt_llm_idfield of List prompts. Theprompt_idfield is a different value and is not accepted.- The full answer text is not returned by these endpoints. Fetch it per (prompt, date) via Get prompt answer; the
has_answer_textflag tells you whether it is still available.
Data retention:
- Cached HTML copy: 30 days (
has_cached_copy). - Answer text: 1 year (
has_answer_text).
Get competitors breakdown
GET https://api.seranking.com/v1/project-management/airt/competitors
Cost: 0. Retrieving competitors data does not consume API credits or subscription quota.
For each requested prompt over a date range, returns one entry per check date with:
- Brands mentioned in the AI answer, ordered as displayed
- Source URLs cited in the answer, ordered as displayed
- Cached copy URL for human verification (opt out via
include_cached_copy_url=0)
Dates without a check are omitted from results. A check with no sources or brands is returned with empty brands and sources arrays.
Limits:
- Up to 50
prompt_llm_ids[]per request. - Date range up to 366 days.
- Requested prompts multiplied by date range days must not exceed 3,660.
- Default range: last 7 days.
Compact mode (compact=1): adjacent calendar days with identical brands and sources (and, for Google AI Overview, identical ai_overview_present and organic_urls) are collapsed into a single entry with a date_from/date_to range instead of date. Entry fields (cached_copy_url, flags) are taken from the most recent day of the run. Days separated by a gap without checks are never merged.
Google AI Overview: entries additionally contain ai_overview_present and organic_urls (top 20 organic results).
Warning: cached_copy_url points at the api4.seranking.com surface, which is not part of the unified gateway. As of July 9, 2026 the gateway API key is rejected there (403) with both Authorization: Token header and ?token= query authentication, so the cached copy cannot currently be fetched with the same credentials. Raised with the AIRT team.
Request parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
site_id | Integer | Yes | N/A | Site ID. |
llm_id | Integer | Yes | N/A | LLM engine ID. |
prompt_llm_ids[] | Array of integers | Yes | N/A | Prompt-to-LLM link IDs from List prompts (repeatable). 1–50 IDs. |
date_from | String | No | 7 days before date_to | Start date (YYYY-MM-DD format). |
date_to | String | No | Current date | End date (YYYY-MM-DD format). Cannot exceed the current date. |
include_cached_copy_url | Boolean | No | 1 | Include the cached copy URL in every result entry. |
compact | Boolean | No | 0 | Collapse consecutive days with identical brands and sources into date ranges. |
Request example
curl 'https://api.seranking.com/v1/project-management/airt/competitors?site_id=11270054&llm_id=151294&prompt_llm_ids[]=1411621&prompt_llm_ids[]=1411624&date_from=2026-07-01&date_to=2026-07-08' \
-H 'Authorization: Token YOUR_API_KEY'Response parameters
| Parameter | Type | Description |
|---|---|---|
site_id | Integer | Site ID. |
site_llm_id | Integer | LLM engine ID. |
date_from | String | Start date of the data range. |
date_to | String | End date of the data range. |
items | Array | One item per requested prompt, in the order of prompt_llm_ids[]. |
Each item in the items array:
| Parameter | Type | Description |
|---|---|---|
prompt_llm_id | Integer | Prompt-to-LLM link ID. |
prompt | String | Prompt text. |
results | Array | One entry per check date (or per collapsed date range when compact=1), ordered by date ascending. |
Each entry in results:
| Parameter | Type | Description |
|---|---|---|
date | String | Check date. Absent when compact=1. |
date_from | String | Start of the collapsed range. Only present when compact=1. |
date_to | String | End of the collapsed range. Only present when compact=1. |
brands | Array of objects | Brands mentioned in the AI answer, ordered as displayed. Each object: position (1-based), name. |
sources | Array of objects | Source URLs cited in the AI answer, ordered as displayed. Each object: position (1-based), url, domain. |
has_cached_copy | Boolean | Whether the cached HTML copy is still available (stored for 30 days). Derived from the check date age, not from a per-day storage check; in rare cases the cached-copy endpoint can still respond with 404. |
has_answer_text | Boolean | Whether the answer text is still available (stored for 1 year). Fetch it via Get prompt answer. |
cached_copy_url | String or null | URL of the cached HTML copy endpoint. Only present when include_cached_copy_url=1 (default). null when the copy is unavailable. |
ai_overview_present | Boolean | Whether the AI Overview block was present. Only present for Google AI Overview engines. |
organic_urls | Array of objects | Organic search results (top 20). Only present for Google AI Overview engines. Same object shape as sources. |
Response example
{
"site_id": 11270054,
"site_llm_id": 151294,
"date_from": "2026-07-01",
"date_to": "2026-07-08",
"items": [
{
"prompt_llm_id": 1411621,
"prompt": "best seo tool",
"results": [
{
"date": "2026-07-08",
"brands": [
{ "position": 1, "name": "Semrush" },
{ "position": 2, "name": "SE Ranking" }
],
"sources": [
{
"position": 1,
"url": "https://seranking.com/blog/best-seo-tools/",
"domain": "seranking.com"
}
],
"has_cached_copy": true,
"has_answer_text": true,
"cached_copy_url": "https://api4.seranking.com/sites/11270054/airt/v2/llm/151294/prompts/1411621/cached-copy?date=2026-07-08"
}
]
}
]
}Error responses
| Code | Scenario |
|---|---|
400 | Missing or invalid prompt_llm_ids[], invalid date format, date_from greater than date_to, or date range exceeds the limit. |
403 | Access denied to the requested site. |
404 | LLM engine not found for this site, or prompt not found or does not belong to this LLM engine. |
Get competitors check dates
GET https://api.seranking.com/v1/project-management/airt/competitors/dates
Cost: 0. Retrieving competitors data does not consume API credits or subscription quota.
Returns the list of dates within a range on which the prompt was checked and competitors data is available. Use it to avoid requesting empty periods.
Note: Default range: last 30 days. Maximum range: 366 days.
Request parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
site_id | Integer | Yes | N/A | Site ID. |
llm_id | Integer | Yes | N/A | LLM engine ID. |
prompt_llm_id | Integer | Yes | N/A | Prompt-to-LLM link ID from List prompts. |
date_from | String | No | 30 days before date_to | Start date (YYYY-MM-DD format). |
date_to | String | No | Current date | End date (YYYY-MM-DD format). Cannot exceed the current date. |
Request example
curl 'https://api.seranking.com/v1/project-management/airt/competitors/dates?site_id=11270054&llm_id=151294&prompt_llm_id=1411621&date_from=2026-06-09&date_to=2026-07-08' \
-H 'Authorization: Token YOUR_API_KEY'Response parameters
| Parameter | Type | Description |
|---|---|---|
site_id | Integer | Site ID. |
site_llm_id | Integer | LLM engine ID. |
prompt_llm_id | Integer | Prompt-to-LLM link ID. |
date_from | String | Start date of the data range. |
date_to | String | End date of the data range. |
dates | Array of strings | Dates with competitors data, ordered ascending. |
Response example
{
"site_id": 11270054,
"site_llm_id": 151294,
"prompt_llm_id": 1411621,
"date_from": "2026-06-09",
"date_to": "2026-07-08",
"dates": ["2026-07-06", "2026-07-07", "2026-07-08"]
}Error responses
| Code | Scenario |
|---|---|
400 | Invalid date parameters. |
403 | Access denied to the requested site. |
404 | LLM engine or prompt not found. |
Get source metrics
GET https://api.seranking.com/v1/project-management/airt/competitors/source-metrics
Cost: 0. Retrieving competitors data does not consume API credits or subscription quota.
Returns SEO metrics for the source URLs (or their domains) cited in the AI answer for a prompt on a given date:
- domain_trust — Domain Trust score
- ref_domains — number of referring domains
- organic_keywords — number of organic keywords the URL or domain ranks for
For Google AI Overview engines the source list also includes organic results.
Request parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
site_id | Integer | Yes | N/A | Site ID. |
llm_id | Integer | Yes | N/A | LLM engine ID. |
prompt_llm_id | Integer | Yes | N/A | Prompt-to-LLM link ID from List prompts. |
date | String | Yes | N/A | Check date (YYYY-MM-DD format). Available dates come from Get competitors check dates. |
mode | String | No | domain | Metrics aggregation mode: domain (aggregated per source domain) or url (per exact source URL). |
Request example
curl 'https://api.seranking.com/v1/project-management/airt/competitors/source-metrics?site_id=11270054&llm_id=151216&prompt_llm_id=1411240&date=2026-07-08&mode=domain' \
-H 'Authorization: Token YOUR_API_KEY'Response parameters
| Parameter | Type | Description |
|---|---|---|
site_id | Integer | Site ID. |
site_llm_id | Integer | LLM engine ID. |
prompt_llm_id | Integer | Prompt-to-LLM link ID. |
date | String | Check date. |
mode | String | Aggregation mode used: url or domain. |
items | Array | Metrics per source (see below). |
Each item in the items array:
| Parameter | Type | Description |
|---|---|---|
source | String | Source URL (mode=url) or domain (mode=domain). |
domain | String or null | Domain of the source. |
domain_trust | Integer or null | Domain Trust score. |
ref_domains | String or null | Number of referring domains, encoded as a string. Coerce to an integer before arithmetic. |
organic_keywords | Integer or null | Number of organic keywords the source ranks for. |
Response example
{
"site_id": 11270054,
"site_llm_id": 151216,
"prompt_llm_id": 1411240,
"date": "2026-07-08",
"mode": "domain",
"items": [
{
"source": "[www.reddit.com](https://www.reddit.com)",
"domain": "[www.reddit.com](https://www.reddit.com)",
"domain_trust": 98,
"ref_domains": "2532163",
"organic_keywords": 199918377
},
{
"source": "[www.semrush.com](https://www.semrush.com)",
"domain": "[www.semrush.com](https://www.semrush.com)",
"domain_trust": 96,
"ref_domains": "222992",
"organic_keywords": 494418
}
]
}Note: A 200 response with an empty items array means the answer on that date cited no sources (common for ChatGPT prompts where the answer had no source links).
Error responses
| Code | Scenario |
|---|---|
400 | Missing or invalid date, or invalid mode. |
403 | Access denied to the requested site. |
404 | LLM engine or prompt not found. |
