Conductor's Data API (v1)
Product
Plan
Getting Started
Overview
Conductor’s Data API empowers organization's like yours to seamlessly integrate traditional and search insights directly into your existing data ecosystems. By automating data delivery, gain rapid, on-demand access to the metrics that matter most—powering custom dashboards, business intelligence tools, and cross-channel reporting without manual effort.
This API unlocks flexible, secure data sharing at scale, ensuring everyone in your organization is equipped with timely, actionable intelligence. Accelerate decision-making and drive measurable results by connecting Conductor’s data wherever their teams work best.
Note
Conductor provides APIs for several different uses across its Conductor Monitoring and Conductor Intelligence products. This article describes Conductor's Data API, which replaces the legacy Conductor Intelligence Reporting API. If you are looking for information about a different API offering, consider the following articles:
Resources
The endpoints documented below let you analyze how your brand appears in traditional organic search and in AI-generated search responses across engines like Google, ChatGPT, Perplexity, Google AIO, and more. There are five endpoints:
/data-api/v1/async/keyword_rankings
What It Includes: Rank and contextual data for your tracked keywords
Key Question It Answers: “For which tracked keywords do I appear in search?”
/data-api/v1/async/highest_ranking_url_per_keyword
What It Includes: Rank and contextual data for your highest-ranking results
Key Question It Answers: "For which tracked keywords do I rank best in search?”
/data-api/v1/async/ai_search_brands
What It Includes: Brand and product mentions in AI responses
Key Question It Answers: "Which brands are AI engines recommending for my topics?"
/data-api/v1/async/ai_search_citations
What It Includes: URLs and domains cited as sources
Key Question It Answers: "Which websites are AI engines citing as sources?"
/data-api/v1/async/ai_search_sentiments
What It Includes: Sentiment analysis of brand mentions
Key Question It Answers: “What is AI saying about my brand — positive, negative, or neutral?”
Authentication
Conductor uses a signed URL parameter to securely authenticate users. To create this signed parameter, you'll need the following building blocks:
- An API Key
- An API Secret
- The current time (expressed as seconds since the UNIX epoch:
unixEpochTimeSeconds)
Additionally, you'll need to add a header to your request that will allow access to this API.
We'll deal with the first two building blocks of the signed URL parameter before moving on to the third. Then we'll cover how to use all of them to build your full request, below. Finally, we'll cover the required request header.
1. Generate your Conductor API Key and Secret
If you want to build connections with Conductor's public API, you'll need to generate a Key and Secret to use to make calls to the API.
- Click here or follow the path Integrations > API in Conductor.
- Click Generate API Key.
- Click to copy your API Key and Secret to use in building your API calls.
Temporarily save these values so you can reference them below—but be sure to delete or erase your notes after. You can always retrieve these values from the platform again.
2. Generate Your Signed URL Parameter
A signature is a one-way MD5 hash of three values:
- A user's API key
- A user's Secret
- The current time expressed as seconds since the UNIX epoch (
unixEpochTimeSeconds)
Your programming environment must provide the ability to do the following, which is part of the standard library for most programming languages:
- Get the current UNIX time in seconds.
- Compute MD5 hashes.
Note that, to allow for reasonable clock drift between your servers and Conductor's servers, the Conductor API considers a signature matching if it was signed within 5 minutes of the time on Conductor's servers.
Code Example
Review the Python sample below for computing the signature:
Python
import hashlib
import time
def compute_signature(api_key: str, secret: str) -> str:
# Create the string to sign (api_key + secret + timestamp)
timestamp = str(int(time.time())) # Unix timestamp in seconds
string_to_sign = f"{api_key}{secret}{timestamp}"
# Compute MD5 signature
signature = hashlib.md5(string_to_sign.encode('utf-8')).hexdigest()
return signature
# Example usage:
api_key = "your-api-key"
secret = "your-secret"
signature = compute_signature(api_key, secret)
3. Build Your Request URL
You can build request URLs based on the building blocks you now have:
-
Base URL:
https://api-universal.conductor.com - Request Path: This is your desired endpoint. Each endpoint is documented below.
-
Query Parameters:
-
apiKey
This is your API Key generated in the platform. -
sig
This is the signature you generated above.
-
https://api-universal.conductor.com/{REQUEST PATH}?apiKey={YOUR API KEY}&sig={YOUR SIGNATURE}4. Include the x-api-gateway-key Request Header
Finally, you'll need to add the following header to your request: x-api-gateway-key
For its value, assign the API Key you generated above. Thus, for example:
'x-api-gateway-key': '{YOUR API KEY}'Use this request URL and the request header to authenticate your calls to the Data API.
Asynchronous Request Requirement
Calls made to Conductor's Data API require asynchronous requests. The asynchronous request workflow follows these steps:
- You make an initial request to an endpoint.
- Conductor returns an initial 202 response that includes an
executionId. - You poll the endpoint with the
executionIdand any optional pagination included in your request body.
Pagination
Include pageSize and nextPageId in your request body as you make asynchronous polling calls.
Quick Start
Here is a complete example Python script you can use to fetch brand data from the /data-api-v1/async/ai_search_brands endpoint described below.
import hashlib, time, requests
from urllib.parse import urlencode
# --- Your credentials ---
API_KEY = "your_api_key_here"
SECRET = "your_secret_here"
ACCOUNT = "your_account_id"
# --- Generate auth ---
epoch = str(int(time.time()))
sig = hashlib.md5((API_KEY + SECRET + epoch).encode()).hexdigest()
url = f"https://api-universal.conductor.com/data-api/v1/async/ai_search_brands?apiKey={API_KEY}&sig={sig}"
headers = {
"x-api-key": API_KEY,
"x-api-gateway-key": API_KEY,
"Content-Type": "application/json",
}
body = {
"account_id": ACCOUNT,
"start_date": "2026-02-01",
"end_date": "2026-02-07",
}
# --- Submit and poll ---
resp = requests.post(url, headers=headers, json=body)
data = resp.json()
execution_id = data.get("executionId")
while data.get("executionState") == "IN_PROGRESS":
time.sleep(3)
# Re-generate auth (signature is time-sensitive)
epoch = str(int(time.time()))
sig = hashlib.md5((API_KEY + SECRET + epoch).encode()).hexdigest()
url = f"https://api-universal.conductor.com/data-api/v1/async/ai_search_brands?apiKey={API_KEY}&sig={sig}"
body["executionId"] = execution_id
resp = requests.post(url, headers=headers, json=body)
data = resp.json()
# --- Parse results ---
schema = data["schema"]
field_names = [f["name"] for f in schema]
rows = [dict(zip(field_names, row)) for row in data["results"]]
print(f"Got {len(rows)} rows")
for row in rows[:3]:
print(row["brand_or_product_name"], "-", row["prompt"])Data API and Platform Configuration
Base URL
Conductor Data API is available on the following URL:
https://api-universal.conductor.comAI and Organic Search Visibility Resources
These datasets provide enterprise-level insights into how your brand appears across both traditional search engine results pages (SERPs) and modern AI-driven search experiences. These endpoints allow marketing teams to track keyword rankings, monitor highest-performing pages, and analyze brand visibility, citations, and sentiment within AI search engines.
Get Foundational Keyword Data
/data-api/v1/async/keyword_rankings
This endpoint returns rank data for your tracked keywords across all accounts your organization manages in Conductor. This data is the foundation for organic search performance analysis, enabling teams to track visibility and growth over time.
Request Parameters
- For initial requests: Include parameters from the list below.
- For asynchronous polling: Include
executionIdand optional pagination parameters
(pageSize,nextPageId).
account_id
Type: string | Example: "12345"
Required. The unique identifier(s) for the Conductor account(s) you are requesting data for.
start_date
Type: string (YYYY-MM-DD) | Example: "2026-01-25"
Required. The start date for the reporting period in YYYY-MM-DD format.
end_date
Type: string (YYYY-MM-DD) | Example: "2026-01-26"
Required. The end date for the reporting period in YYYY-MM-DD format.
collection_frequency
Type: string (enum) | Example: "DAILY"
Optional. The frequency at which rank data is collected. Supported values typically include DAILY or WEEKLY.
web_property_ids
Type: array[number] | Example: [12345, 78901]
Optional. An array of unique identifiers for the web properties to include in the request.
search_engine_names
Type: array[string] | Example: ["GOOGLE_en_US"]
Optional. An array of search engine identifiers (e.g., GOOGLE_en_US) to filter the results.
devices
Type: array[string] | Example: ["DESKTOP", "SMARTPHONE"]
Optional. Filters the results by specific device types. Supported values include DESKTOP, SMARTPHONE, and TABLET.
locodes
Type: array[string] | Example: ["US", "DE"]
Optional. An array of location codes used to filter results by specific geographic regions.
keyword_group_ids
Type: array[number] | Example: [1000, 2000, 3000]
Optional. Filters the request to only include data for keywords belonging to these specific keyword group IDs.
keyword_group_breakdown
Type: boolean | Example: true
Optional. If set to true, the response will provide data broken down by keyword group.
result_types
Type: array[string] | Example: ["AIO_REFERENCE_RESULT", "STANDARD_LINK"]
Optional. Filters results to include only specific SERP result types, such as standard links or AI Overviews (AIO).
includeMsv
Type: boolean | Example: true
Optional. When set to true, the response will include search volume metrics (MSV), CPC, and competition data.
limit
Type: integer | Example: 100
Optional. The maximum number of records to return in a single response.
Example Request Body
{
"account_id": "13540",
"start_date": "2026-01-25",
"end_date": "2026-01-26",
"collection_frequency": "DAILY",
"web_property_ids": [
12345,
78901
],
"search_engine_names": [
"GOOGLE_en_US"
],
"devices": [
"DESKTOP",
"SMARTPHONE"
],
"locodes": [
"US",
"DE"
],
"keyword_group_ids": [
1000,
2000,
3000
],
"keyword_group_breakdown": true,
"result_types": [
"AIO_REFERENCE_RESULT",
"STANDARD_LINK"
],
"includeMsv": true,
"limit": 100
}Response Schema
account_id
Type: integer | Example: 12345
The unique identifier in Conductor for the platform account associated with the data.
account_name
Type: string | Example: "Grand Budapest Hotel"
The name of the Conductor account associated with the result.
organization_id
Type: string | Example: "ABCDEGFH12345"
The unique identifier for the parent organization in Conductor.
organization_name
Type: string | Example: "Grand Budapest Hotel"
The name of the parent organization.
web_property_id
Type: integer | Example: 56789
The unique identifier for the specific tracked website or property.
web_property_name
Type: string | Example: "gbh.com"
The name of the tracked web property.
time_period_start
Type: date | Example: "2025-11-02"
The initial date (inclusive) of the reporting period.
time_period_end
Type: date | Example: "2025-11-08"
The final date (inclusive) of the reporting period.
collection_date
Type: date | Example: "2025-11-08"
The date on which data was collected for the keyword.
search_engine_name
Type: string | Example: “GOOGLE_en_US”
The search engine identifier (e.g., GOOGLE_en_US) associated with the result.
search_engine
Type: string | Example: “GOOGLE”
The search engine used for the collection.
search_engine_country_code
Type: string | Example: "US"
The country code of the search engine used for the collection.
search_engine_language_code
Type: string | Example: "en"
The language code of the search engine used for the collection.
locode
Type: string | Example: "US"
The geographic location code where the search was initiated.
device
Type: string (enum) | Example: "SMARTPHONE"
The device type used to generate the search results.
Enum values: DESKTOP, SMARTPHONE, TABLET.
query
Type: string | Example: "spa"
The original search query or keyword associated with the result.
title
Type: string | Example: "Top 10 Hong Kong Spa & massages 2025"
The title of the search result, citation, or AI response summary.
normalized_url
Type: string | Example: "https://www.example.com/en-HK/..."
The URL of the search result, normalized to ensure consistent reporting across different tracking instances.
root_domain
Type: string | Example: "example.com"
The root domain of the result URL.
subdomain
Type: string | Example: "www.example.com"
The subdomain associated with the result URL.
result_type
Type: string (enum) | Example: "STANDARD_LINK"
The classification of the search result type.
Enum values: STANDARD_LINK, AIO_REFERENCE_RESULT, GOOGLE_ANSWER_BOX, IMAGE_RESULT, VIDEO_RESULT, NEWS_RESULT, PLACES_GROUP, PAA_RESULT.
rank_standard
Type: integer | Example: 3
The standard rank position, which only includes traditional "blue link" results and excludes universal search elements.
rank_true
Type: integer | Example: 6
The "True Rank" position, accounting for all elements on the SERP, including universal results and AI overviews.
rank_result_type
Type: integer | Example: 3
The rank position of the result within its specific result type (e.g., the 3rd image in an image pack).
keyword_group_ids
Type: string | Example: "[1394476, 1394513]"
A list of unique identifiers for the keyword groups to which the query belongs.
keyword_group_names
Type: string | Example: "Branded, High Volume"
A list of names for the keyword groups associated with the query.
average_search_volume
Type: integer | Example: 12000
The average monthly search volume for the keyword, based on an average of the last 12 months of data.
cpc
Type: number (float) | Example: 1.25
The estimated Cost Per Click (CPC) for the query in the local currency.
competition
Type: number (float) | Example: 0.75
The competitive density for the query in paid search, represented as a value between 0 and 1.
approximate_search_volume
Type: integer | Example: 12000
The actual, approximate search volume for the keyword.
msv_month
Type: date | Example: "YYYY-MM"
The month to which monthly search volume data is related.
|
200 - Query completed successfully (returned when polling with queryExecutionId) Example
|
|
202 - Query accepted and is being processed asynchronously Example
|
|
400 - Invalid request parameters Example
|
| 401 - Unauthorized - Missing or invalid authentication |
| 403 - Forbidden - Insufficient permissions |
| 500 - Internal server error |
Get Highest Ranking Page Data for Tracked Keywords
/data-api/v1/async/highest_ranking_url_per_keyword
Identifies the single highest-ranking URL for every tracked keyword within the specified time period. This is vital for enterprise teams to ensure the correct landing pages are capturing traffic and to identify internal keyword cannibalization.
Request Parameters
- For initial requests: Include parameters from the list below.
- For asynchronous polling: Include
executionIdand optional pagination parameters
(pageSize,nextPageId).
account_id
Type: string | Example: "13540"
Required. The unique identifier(s) for the Conductor account(s) you are requesting data for.
start_date
Type: string (YYYY-MM-DD) | Example: "2026-01-25"
Required. The start date for the reporting period in YYYY-MM-DD format.
end_date
Type: string (YYYY-MM-DD) | Example: "2026-01-26"
Required. The end date for the reporting period in YYYY-MM-DD format.
collection_frequency
Type: string (enum) | Example: "DAILY"
Optional. The frequency at which rank data is collected. Supported values typically include DAILY or WEEKLY.
web_property_ids
Type: array[number] | Example: [12345, 78901]
Optional. An array of unique identifiers for the web properties to include in the request.
search_engine_names
Type: array[string] | Example: ["GOOGLE_en_US"]
Optional. An array of search engine identifiers (e.g., GOOGLE_en_US) to filter the results.
devices
Type: array[string] | Example: ["DESKTOP", "SMARTPHONE"]
Optional. Filters the results by specific device types. Supported values include DESKTOP, SMARTPHONE, and TABLET.
locodes
Type: array[string] | Example: ["US", "DE"]
Optional. An array of location codes used to filter results by specific geographic regions.
keyword_group_ids
Type: array[number] | Example: [1000, 2000, 3000]
Optional. Filters the request to only include data for keywords belonging to these specific keyword group IDs.
keyword_group_breakdown
Type: boolean | Example: true
Optional. If set to true, the response will provide data broken down by keyword group.
result_types
Type: array[string] | Example: ["AIO_REFERENCE_RESULT", "STANDARD_LINK"]
Optional. Filters results to include only specific SERP result types, such as standard links or AI Overviews (AIO).
includeMsv
Type: boolean | Example: true
Optional. When set to true, the response will include search volume metrics (MSV), CPC, and competition data.
limit
Type: integer | Example: 100
Optional. The maximum number of records to return in a single response.
Example Request Body
{
"account_id": "13540",
"start_date": "2026-01-25",
"end_date": "2026-01-26",
"collection_frequency": "DAILY",
"web_property_ids": [
12345,
78901
],
"search_engine_names": [
"GOOGLE_en_US"
],
"devices": [
"DESKTOP",
"SMARTPHONE"
],
"locodes": [
"US",
"DE"
],
"keyword_group_ids": [
1000,
2000,
3000
],
"keyword_group_breakdown": true,
"result_types": [
"AIO_REFERENCE_RESULT",
"STANDARD_LINK"
],
"includeMsv": true,
"limit": 100
}Response Schema
account_id
Type: integer | Example: 12345
The unique identifier in Conductor for the platform account associated with the data.
account_name
Type: string | Example: "Grand Budapest Hotel"
The name of the Conductor account associated with the result.
organization_id
Type: string | Example: "ABCDEGFH12345"
The unique identifier for the parent organization in Conductor.
organization_name
Type: string | Example: "Grand Budapest Hotel"
The name of the parent organization.
web_property_id
Type: integer | Example: 56789
The unique identifier for the specific tracked website or property.
web_property_name
Type: string | Example: "gbh.com"
The name of the tracked web property.
time_period_start
Type: date | Example: "2025-11-02"
The initial date (inclusive) of the reporting period.
time_period_end
Type: date | Example: "2025-11-08"
The final date (inclusive) of the reporting period.
collection_date
Type: date | Example: "2025-11-08"
The date on which data was collected for the keyword.
search_engine_name
Type: string | Example: “GOOGLE_en_US”
The search engine identifier (e.g., GOOGLE_en_US) associated with the result.
search_engine
Type: string | Example: “GOOGLE”
The search engine used for the collection.
search_engine_country_code
Type: string | Example: "US"
The country code of the search engine used for the collection.
search_engine_language_code
Type: string | Example: "en"
The language code of the search engine used for the collection.
locode
Type: string | Example: "US"
The geographic location code where the search was initiated.
device
Type: string (enum) | Example: "SMARTPHONE"
The device type used to generate the search results.
Enum values: DESKTOP, SMARTPHONE, TABLET.
query
Type: string | Example: "spa"
The original search query or keyword associated with the result.
title
Type: string | Example: "Top 10 Hong Kong Spa & massages 2025"
The title of the search result, citation, or AI response summary.
normalized_url
Type: string | Example: "https://www.example.com/en-HK/..."
The URL of the search result, normalized to ensure consistent reporting across different tracking instances.
root_domain
Type: string | Example: "example.com"
The root domain of the result URL.
subdomain
Type: string | Example: "www.example.com"
The subdomain associated with the result URL.
result_type
Type: string (enum) | Example: "STANDARD_LINK"
The classification of the search result type.
Enum values: STANDARD_LINK, AIO_REFERENCE_RESULT, GOOGLE_ANSWER_BOX, IMAGE_RESULT, VIDEO_RESULT, NEWS_RESULT, PLACES_GROUP, PAA_RESULT.
rank_standard
Type: integer | Example: 3
The standard rank position, which only includes traditional "blue link" results and excludes universal search elements.
rank_true
Type: integer | Example: 6
The "True Rank" position, accounting for all elements on the SERP, including universal results and AI overviews.
rank_result_type
Type: integer | Example: 3
The rank position of the result within its specific result type (e.g., the 3rd image in an image pack).
keyword_group_ids
Type: string | Example: "[1394476, 1394513]"
A list of unique identifiers for the keyword groups to which the query belongs.
keyword_group_names
Type: string | Example: "Branded, High Volume"
A list of names for the keyword groups associated with the query.
average_search_volume
Type: integer | Example: 12000
The average monthly search volume for the keyword, based on an average of the last 12 months of data.
cpc
Type: number (float) | Example: 1.25
The estimated Cost Per Click (CPC) for the query in the local currency.
competition
Type: number (float) | Example: 0.75
The competitive density for the query in paid search, represented as a value between 0 and 1.
approximate_search_volume
Type: integer | Example: 12000
The actual, approximate search volume for the keyword.
msv_month
Type: date | Example: "YYYY-MM"
The month to which monthly search volume data is related.
|
200 - Query completed successfully (returned when polling with queryExecutionId) Example
|
|
202- Query accepted and is being processed asynchronously Example
|
|
400 - Invalid request parameters Example
|
| 401 - Unauthorized - Missing or invalid authentication |
| 403 - Forbidden - Insufficient permissions |
| 500 - Internal server error |
Get AI Search Data about Brands
/data-api/v1/async/ai_search_brands
Extracts brand and product mentions from AI search engine responses (e.g., ChatGPT, Gemini). This allows marketing teams to quantify their "Share of Model" and understand how often they are recommended by AI compared to competitors.
Request Parameters
- For initial requests: Include parameters from the list below.
- For asynchronous polling: Include
executionIdand optional pagination parameters
(pageSize,nextPageId).
account_id
Type: string | Example: "101"
Required. The unique identifier(s) for the Conductor account(s) you are requesting AI Search data for.
start_date
Type: string (YYYY-MM-DD) | Example: "2025-11-02"
Required. The start date for the AI search reporting period.
end_date
Type: string (YYYY-MM-DD) | Example: "2025-11-29"
Required. The end date for the AI search reporting period.
collection_frequency
Type: string (enum) | Example: "WEEKLY"
Optional. The frequency of data collection. Supported values include DAILY and WEEKLY.
web_property_ids
Type: array[number] | Example: [122556, 987654]
Optional. An array of unique identifiers for the web properties to be included in the request.
ai_search_engines
Type: array[string] | Example: ["chatgptsearch", "perplexity"]
Optional. Filters the results to specific AI engines. Supported values typically include chatgpt, perplexity, googlegemini, and mscopilot.
locodes
Type: array[string] | Example: ["US", "CA", "US NYC", "US-TX"]
Optional. Limits the results to specific location codes representing where the AI search prompts were initiated.
topics
Type: array[string] | Example: ["marketing automation", "website optimization"]
Optional. Filters the request to specific high-level topics or categories.
prompts
Type: array[string] | Example: ["best crm", "top crm"]
Optional. Filters the response to specific text prompts entered into AI search engines.
prompt_type
Type: string | Example: "branded"
Optional. Filters based on whether the prompt is classified as branded or unbranded.
intents
Type: array[string] | Example: ["Education", "Purchase"]
Optional. Filters the AI search data by detected search intent categories.
personas
Type: array[string] | Example: ["young adults", "developers"]
Optional. Filters results by the specific user personas associated with the search prompts.
brand_or_product_names
Type: array[string] | Example: ["Conductor", "Conductor AI"]
Optional. Filters based on specific brands or product names mentioned in AI responses.
brand_or_product_attributions
Type: array[string] | Example: ["You", "Partner", "SEO Competitor", "Other"]
Optional. Filters results by the attribution type of the brand or product mentioned.
Example Request Body
{
"account_id": "101",
"start_date": "2025-11-02",
"end_date": "2025-11-29",
"collection_frequency": "WEEKLY",
"web_property_ids": [
122556,
987654
],
"ai_search_engines": [
"chatgptsearch",
"perplexity"
],
"locodes": [
"US",
"CA",
"US NYC",
"US-TX"
],
"topics": [
"marketing automation",
"website optimization"
],
"prompts": [
"best crm",
"top crm"
],
"prompt_type": "branded",
"intents": [
"Education",
“Purchase”
],
"personas": [
"young adults",
"developers"
],
"brand_or_product_names": [
"Conductor",
"Conductor AI"
],
"brand_or_product_attributions": [
"You",
"Partner",
"SEO Competitor",
"Other"
]
}Response Schema
organization_id
Type: string | Example: "ABCDEGFH12345"
The unique identifier for the parent organization in Conductor.
organization_name
Type: string | Example: "Grand Budapest Hotel"
The name of the parent organization.
account_id
Type: integer | Example: 12345
The unique identifier in Conductor for the platform account associated with the data.
account_name
Type: string | Example: "Grand Budapest Hotel"
The name of the Conductor account associated with the result.
web_property_id
Type: integer | Example: 56789
The unique identifier for the specific tracked website or property.
web_property_name
Type: string | Example: "gbh.com"
The name of the tracked web property.
time_period_start
Type: date | Example: "2025-11-02"
The initial date (inclusive) of the reporting period.
time_period_end
Type: date | Example: "2025-11-08"
The final date (inclusive) of the reporting period.
collection_frequency
Type: string (enum) | Example: "WEEKLY"
The frequency at which the data is tracked and updated in the platform.
Enum values: DAILY, WEEKLY.
locode
Type: string | Example: "US"
The geographic location code where the search was initiated.
language
Type: string | Example: "en_US"
The language setting used for the search or AI prompt.
ai_search_engine
Type: string (enum) | Example: "chatgpt"
The specific AI search platform where the data was collected.
Enum values: perplexity, googlegemini, googleaio, googleaimode, chatgpt, chatgptsearch, mscopilot.
topic
Type: string | Example: "bali honeymoon escapes"
The broad thematic category to which the tracked prompt belongs.
prompt
Type: string | Example: "aman resorts bali honeymoon"
The exact question or command entered into the AI search engine.
prompt_type
Type: string (enum) | Example: "branded"
Indicates whether the generated prompt is classified as branded or unbranded.
Enum values: branded, unbranded.
intent
Type: string (enum) | Example: "Education"
The detected purpose behind the user's search prompt as classified by Conductor's AI.
Enum values: Brand/Service Navigation, Comparison, Education, Pricing, Purchase, Recommendations, Support, Other.
persona
Type: string | Example: "Marketing Manager"
The specific user persona assigned to the prompt to guide the AI search context.
brand_or_product_name
Type: string | Example: "Adidas"
The name of the brand or product identified within the AI-generated response.
brand_or_product_entity_type
Type: string | Example: "brand"
Identifies whether the entity extracted from the AI response is a brand or a specific product.
brand_or_product_attribution
Type: string (enum) | Example: "competitor"
Classification of the brand or product mentioned in the AI response relative to your organization.
Enum values: you, competitor, other.
ai_response_collected
Type: boolean | Example: true
Indicates whether an AI response was successfully retrieved from the engine for the given prompt during the collection period.
web_search_triggered
Type: boolean | Example: false
Indicates whether the AI search engine triggered a live web crawl or search to formulate the response.
|
200 - Query completed successfully (returned when polling with queryExecutionId) Example
|
|
202 - Query accepted and is being processed asynchronously Example
|
|
400 - Invalid request parameters Example
|
| 401 - Unauthorized - API key missing or invalid |
| 403 - Forbidden - Insufficient permissions |
| 429 - Too many requests |
| 500 - Internal server error |
Get AI Search Data about Citations
/data-api/v1/async/ai_search_citations
Provides data on the specific URLs cited by AI search engines as sources. Understanding which pages are being used as "authority sources" helps teams optimize content for better AI citation rates and referral traffic.
Request Parameters
- For initial requests: Include parameters from the list below.
- For asynchronous polling: Include
executionIdand optional pagination parameters
(pageSize,nextPageId).
account_id
Type: string | Example: "101"
Required. The unique identifier(s) for the Conductor account(s) you are requesting AI Search data for.
start_date
Type: string (YYYY-MM-DD) | Example: "2025-11-02"
Required. The start date for the AI search reporting period.
end_date
Type: string (YYYY-MM-DD) | Example: "2025-11-29"
Required. The end date for the AI search reporting period.
collection_frequency
Type: string (enum) | Example: "WEEKLY"
Optional. The frequency of the data collection. Supported values include DAILY and WEEKLY.
web_property_ids
Type: array[number] | Example: [122556, 987654]
Optional. An array of unique identifiers for the web properties to be included in the request.
ai_search_engines
Type: array[string] | Example: ["chatgptsearch", "perplexity"]
Optional. Filters the results to specific AI engines. Supported values typically include chatgpt, perplexity, googlegemini, and mscopilot.
locodes
Type: array[string] | Example: ["US", "CA", "US NYC"]
Optional. Limits the results to specific location codes representing where the AI search prompts were initiated.
languages
Type: array[string] | Example: ["en_US", "hant_TW"]
Optional. Filters the response based on the language settings used for the AI prompts.
topics
Type: array[string] | Example: ["marketing automation", "website optimization"]
Optional. Filters the request to specific high-level topics or categories.
prompts
Type: array[string] | Example: ["best crm", "top crm"]
Optional. Filters the response to specific text prompts entered into AI search engines.
prompt_type
Type: string | Example: "branded"
Optional. Filters based on whether the prompt is classified as branded or unbranded.
intents
Type: array[string] | Example: ["Education", "Purchase"]
Optional. Filters the AI search data by the detected search intent (e.g., Commercial, Informational).
personas
Type: array[string] | Example: ["young adults", "developers"]
Optional. Filters results by the specific user personas associated with the search prompts.
root_domains
Type: array[string] | Example: ["conductor.com", "abc.com"]
Optional. Filters results by the root domains mentioned or cited in the AI responses.
domains
Type: array[string] | Example: ["blog.conductor.com", "about.conductor.com"]
Optional. Filters results by specific subdomains mentioned in the AI responses.
citation_urls
Type: array[string] | Example: ["https://www.conductor.com/blog/..."]
Optional. Filters the response to include citations for specific source URLs.
citation_attributions
Type: array[string] | Example: ["You", "Partner", "SEO Competitor"]
Optional. Filters based on the ownership of the cited sources (e.g., You, Competitor, Other).
Example Request Body
{
"account_id": "101",
"start_date": "2025-11-02",
"end_date": "2025-11-29",
"collection_frequency": "WEEKLY",
"web_property_ids": [
122556,
987654
],
"ai_search_engines": [
"chatgptsearch",
“perplexity”
],
"locodes": [
"US",
"CA",
"US NYC",
“US-TX”
],
"languages": [
"en_US",
“hant_TW”
],
"topics": [
"marketing automation",
“website optimization”
],
"prompts": [
"best crm",
“top crm”
],
"prompt_type": "branded",
"intents": [
"Education",
“Purchase”
],
"personas": [
"young adults",
“developers”
],
"root_domains": [
"conductor.com",
“abc.com”
],
"domains": [
"blog.conductor.com",
“about.conductor.com”
],
"citation_urls": [
“https://www.conductor.com/blog/...”
],
"citation_attributions": [
"You",
"Partner",
“SEO Competitor”
]
}Response Schema
organization_id
Type: string | Example: "ABCDEGFH12345"
The unique identifier for the parent organization in Conductor.
organization_name
Type: string | Example: "Grand Budapest Hotel"
The name of the parent organization.
account_id
Type: integer | Example: 12345
The unique identifier in Conductor for the platform account associated with the data.
account_name
Type: string | Example: "Grand Budapest Hotel"
The name of the Conductor account associated with the result.
web_property_id
Type: integer | Example: 56789
The unique identifier for the specific tracked website or property.
web_property_name
Type: string | Example: "gbh.com"
The name of the tracked web property.
time_period_start
Type: date | Example: "2025-11-02"
The initial date (inclusive) of the reporting period.
time_period_end
Type: date | Example: "2025-11-08"
The final date (inclusive) of the reporting period.
collection_frequency
Type: string (enum) | Example: "WEEKLY"
The frequency at which the data is tracked and updated in the platform.
Enum values: DAILY, WEEKLY.
locode
Type: string | Example: "US"
The geographic location code where the search was initiated.
language
Type: string | Example: "en_US"
The language setting used for the search or AI prompt.
ai_search_engine
Type: string (enum) | Example: "chatgpt"
The specific AI search platform where the data was collected.
Enum values: perplexity, googlegemini, googleaio, googleaimode, chatgpt, chatgptsearch, mscopilot.
topic
Type: string | Example: "bali honeymoon escapes"
The broad thematic category to which the tracked prompt belongs.
prompt
Type: string | Example: "aman resorts bali honeymoon"
The exact question or command entered into the AI search engine.
prompt_type
Type: string (enum) | Example: "branded"
Indicates whether the generated prompt is classified as branded or unbranded.
Enum values: branded, unbranded.
intent
Type: string (enum) | Example: "Education"
The detected purpose behind the user's search prompt as classified by Conductor's AI.
Enum values: Brand/Service Navigation, Comparison, Education, Pricing, Purchase, Recommendations, Support, Other.
persona
Type: string | Example: "Marketing Manager"
The specific user persona assigned to the prompt to guide the AI search context.
citation_title
Type: string | Example: "The Ultimate Guide to SEO"
The title of the webpage that was cited as a source in the AI response.
citation_url
Type: string | Example: "https://www.conductor.com/blog/seo-guide"
The specific URL referenced by the AI engine to generate its response.
citation_domain
Type: string | Example: "conductor.com"
The root domain of the source cited by the AI search engine.
citation_web_property_segment
Type: string | Example: "conductor.com"
The web property segment classification for the cited source.
citation_attribution
Type: string (enum) | Example: "YOU"
The attribution category of the cited URL.
Enum values: YOU, COMPETITOR, OTHER.
ai_response_collected
Type: boolean | Example: true
Indicates whether an AI response was successfully retrieved from the engine for the given prompt during the collection period.
web_search_triggered
Type: boolean | Example: false
Indicates whether the AI search engine triggered a live web crawl or search to formulate the response.
|
200 - Query completed successfully (returned when polling with queryExecutionId) Example
|
|
202 - Query accepted and is being processed asynchronously Example
|
|
400 - Invalid request parameters Example
|
| 401 - Unauthorized - API key missing or invalid |
| 403 - Forbidden - Insufficient permissions |
| 429 - Too many requests |
| 500 - Internal server error |
Get AI Search Data about Sentiment
/data-api/v1/async/ai_search_sentiments
Extracts the sentiment (Positive, Negative, Neutral) and specific descriptive snippets associated with your brand in AI responses. This is critical for Reputation Management and understanding the "opinion" AI models have of your products.
Request Parameters
- For initial requests: Include parameters from the list below.
- For asynchronous polling: Include
executionIdand optional pagination parameters
(pageSize,nextPageId).
account_id
Type: string | Example: "101"
Required. The unique identifier(s) for the Conductor account(s) you are requesting AI search sentiment data for.
start_date
Type: string (YYYY-MM-DD) | Example: "2024-03-01"
Required. The start date for the reporting period in YYYY-MM-DD format.
end_date
Type: string (YYYY-MM-DD) | Example: "2024-03-15"
Required. The end date for the reporting period in YYYY-MM-DD format.
collection_frequency
Type: string (enum) | Example: "WEEKLY"
Optional. The frequency at which the sentiment data was collected.
limit
Type: integer | Example: 10000
Optional. The maximum number of sentiment records to return in the response.
web_property_ids
Type: array[number] | Example: [122556, 987654]
Optional. An array of unique identifiers for the web properties to include in the request.
ai_search_engines
Type: array[string] | Example: ["chatgptsearch"]
Optional. Filters results to specific AI search engines.
locodes
Type: array[string] | Example: ["US", "CA", "US NYC", "US-TX"]
Optional. Limits results to specific location codes representing where the AI search prompt was initiated.
topics
Type: array[string] | Example: ["marketing automation", "website optimization"]
Optional. Filters the response to specific high-level topics or categories.
prompts
Type: array[string] | Example: ["best crm", "top crm"]
Optional. Filters the response to specific text prompts entered into AI search engines.
prompt_type
Type: string | Example: "branded"
Optional. Filters based on whether the search prompt is classified as branded or unbranded.
intents
Type: array[string] | Example: ["Education", "Purchase"]
Optional. Filters AI search results by detected user intent categories.
personas
Type: array[string] | Example: ["young adults", "developers"]
Optional. Filters results by specific user personas associated with the search prompts.
sentiment_brands
Type: array[string] | Example: ["Conductor", "Conductor AI"]
Optional. Filters based on the specific brands for which sentiment was extracted.
sentiment_values
Type: array[string] | Example: ["positive"]
Optional. Filters results by specific sentiment values (e.g., positive, negative, neutral).
sentiment_categories
Type: array[string] | Example: ["pricing"]
Optional. Filters by the category of the detected sentiment.
sentiment_source_domains
Type: array[string] | Example: ["example.com"]
Optional. Filters results by the source domains that provided the sentiment data.
Example Request Body
{
"account_id": "101",
"start_date": "2024-03-01",
"end_date": "2024-03-15",
"collection_frequency": "WEEKLY",
"limit": 10000,
"web_property_ids": [
122556,
987654
],
"ai_search_engines": [
"chatgptsearch"
],
"locodes": [
"US",
"CA",
"US NYC",
"US-TX"
],
"topics": [
"marketing automation",
"website optimization"
],
"prompts": [
"best crm",
"top crm"
],
"prompt_type": "branded",
"intents": [
"Education",
"Purchase"
],
"personas": [
"young adults",
"developers"
],
"sentiment_brands": [
"Conductor",
“Conductor AI”
],
"sentiment_values": [
"positive"
],
"sentiment_categories": [
"pricing"
],
"sentiment_source_domains": [
"example.com"
]
}
Response Schema
organization_id
Type: string | Example: "ABCDEGFH12345"
The unique identifier for the parent organization in Conductor.
organization_name
Type: string | Example: "Grand Budapest Hotel"
The name of the parent organization.
account_id
Type: integer | Example: 12345
The unique identifier in Conductor for the platform account associated with the data.
account_name
Type: string | Example: "Grand Budapest Hotel"
The name of the Conductor account associated with the result.
web_property_id
Type: integer | Example: 56789
The unique identifier for the specific tracked website or property.
web_property_name
Type: string | Example: "gbh.com"
The name of the tracked web property.
time_period_start
Type: date | Example: "2025-11-02"
The initial date (inclusive) of the reporting period.
time_period_end
Type: date | Example: "2025-11-08"
The final date (inclusive) of the reporting period.
collection_frequency
Type: string (enum) | Example: "WEEKLY"
The frequency at which the data is tracked and updated in the platform.
Enum values: DAILY, WEEKLY.
locode
Type: string | Example: "US"
The geographic location code where the search was initiated.
language
Type: string | Example: "en_US"
The language setting used for the search or AI prompt.
ai_search_engine
Type: string (enum) | Example: "chatgpt"
The specific AI search platform where the data was collected.
Enum values: perplexity, googlegemini, googleaio, googleaimode, chatgpt, chatgptsearch, mscopilot.
topic
Type: string | Example: "bali honeymoon escapes"
The broad thematic category to which the tracked prompt belongs.
prompt
Type: string | Example: "aman resorts bali honeymoon"
The exact question or command entered into the AI search engine.
prompt_type
Type: string (enum) | Example: "branded"
Indicates whether the generated prompt is classified as branded or unbranded.
Enum values: branded, unbranded.
intent
Type: string (enum) | Example: "Education"
The detected purpose behind the user's search prompt as classified by Conductor's AI.
Enum values: Brand/Service Navigation, Comparison, Education, Pricing, Purchase, Recommendations, Support, Other.
persona
Type: string | Example: "Marketing Manager"
The specific user persona assigned to the prompt to guide the AI search context.
sentiment_brand
Type: string | Example: "Nike"
The specific brand mentioned in the AI response for which sentiment was analyzed.
sentiment_value
Type: string (enum) | Example: "positive"
The polarity of the detected sentiment.
Enum values: positive, negative, neutral.
sentiment_score
Type: integer | Example: 8
A numeric score representing the strength of the sentiment, typically on a scale of 1 to 10.
sentiment_category
Type: string (enum) | Example: "Quality"
The category of the detected sentiment.
Enum values: Health, Quality, Price, User-friendliness, Popularity, Ethics, Service, Experience, Misc.
sentiment_snippet
Type: string | Example: "Offers intuitive tools that simplify SEO."
The specific raw text segment from the AI response used to derive the sentiment.
sentiment_source_url
Type: string | Example: "https://reddit.com/r/seo/..."
The specific URL cited by the AI search engine that provided the context for the sentiment.
sentiment_source_domain
Type: string | Example: "techradar.com"
The root domain of the source used by the AI to form the sentiment-based response.
ai_response_collected
Type: boolean | Example: true
Indicates whether an AI response was successfully retrieved from the engine for the given prompt during the collection period.
web_search_triggered
Type: boolean | Example: false
Indicates whether the AI search engine triggered a live web crawl or search to formulate the response.
|
200 - Query completed successfully (returned when polling with queryExecutionId) Example
|
|
202 - Query accepted and is being processed asynchronously Example
|
|
400 - Invalid request parameters Example
|
| 401 - Unauthorized - API key missing or invalid |
| 403 - Forbidden - Insufficient permissions |
| 429 - Too many requests |
| 500 - Internal server error |
Reference
Endpoint-Specific Filters
Each endpoint includes request parameters that can filter data before it is sent.
Keyword-Only Filters
-
search_engine_names- Type: array
- Filter to see data only for specific search engines: ["GOOGLE_en_US"]
-
devices- Type: array
- ["DESKTOP", "SMARTPHONE"]
-
locodes- Type: array
- ["US", "DE"]
-
keyword_group_ids- Type: array[number]
- Filter to see data only for specific keyword groups: [1000, 2000, 2000]
-
result_types- Type: array
- Filter to see data only for specific result types: ["AIO_REFERENCE_RESULT", “STANDARD_LINK"]
Brand-Only Filters
-
brand_or_product_attributions- Type: array
- Filter by attribution:
["You"],["SEO Competitor"],["other"]
-
brand_or_product_names- Type: array
- Filter by brand/product name:
["nike", "adidas"]
Citation-Only Filters
-
citation_attributions- Type: array
- Filter by attribution:
["You"],["other"]
-
root_domains- Type: array
- Filter by root domain:
["example.com"]
-
domains- Type: array
- Filter by subdomain:
["www.example.com"]
-
citation_urls- Type: array
- Filter by specific URLs
Sentiment-Only Filters
-
sentiment_values- Type: array
- Filter by sentiment value:
["positive"],["negative"],["neutral"]
-
sentiment_brands- Type: array
- Filter sentiment for specific brands
-
sentiment_categories- Type: array
- Filter by sentiment category:
["experience", "pricing", "support"]
-
sentiment_source_domains- Type: array
- Filter by source domain:
["wikipedia.org"]
Response Format
All endpoints return data in the same structure—an array of arrays with a separate schema definition. This is more compact than an array of objects.
{
"results": [
["Example Co", "D7F290...", "Example Co", "13540", ...],
["Example Co", "D7F290...", "Example Co", "13540", ...],
...
],
"schema": [
{"name": "organization_name", "type": "string"},
{"name": "organization_id", "type": "string"},
...
],
"executionState": null, // null = complete, "IN_PROGRESS" = still running
"executionId": "enga:...",
"requestId": "...",
"nextPageId": "..." // non-null if more pages available
}Parsing Results into Rows
field_names = [f["name"] for f in data["schema"]]
rows = [dict(zip(field_names, row)) for row in data["results"]]
# Now each row is a dict: {"organization_name": "Example Co", "account_id": "13540", ...}Tips and Best Practices
Authentication
- Generate a fresh signature for every request, including poll requests—the timestamp-based signature expires quickly.
- The
x-api-gateway-keyheader is required and use the API key value. - The
apiKeyandsiggo as query parameters in the URL, not in the body.
Request Format
- All endpoints use POST with a JSON body.
- Array filters (topics, engines, etc.) must be JSON arrays even for single values:
["chatgpt"]not"chatgpt". -
prompt_typeandcollection_frequencyare strings, not arrays.
Async Handling
- Expect 15-60 seconds for results depending on query complexity.
- Poll every 3-5 seconds—no need to hammer the API!
- Set a maximum poll limit (e.g. 20 attempts) to avoid infinite loops.
- Check
executionState:"IN_PROGRESS"means keep polling,nullmeans data is ready.
Performance
- Use filters to narrow results. Unfiltered queries can return very large datasets.
- The default limit appears to be 999 rows per page. Use
nextPageIdfor pagination. - Narrow date ranges and specific topics yield faster responses.
- The "all filters combined" approach may return 0 rows if the combination is too specific.
Common Gotchas
- Missing
x-api-gateway-keyreturns HTTP 500, not 401. - The
domainsfilter (citations) expects subdomains like www.examples.com; useroot_domainsfor example.com. - Response data uses array-of-arrays format: you must zip with the schema to get named fields.