Built-in tool
Measure AI Visibility
Measure aggregate AI visibility for a domain, brand, or keyword: total mentions, AI search volume, platform split, and top cited/source domains.
Endpoint
Parameters
| Name | Type | Required | Note |
|---|---|---|---|
| targetstring · required | string | required | Domain, brand, or keyword to measure. |
| platformstring · optional | string | optional | AI platform to measure; "all" combines available platforms. One of: Default: |
| target_typestring · optional | string | optional | Interpret the target as a domain or keyword/brand phrase. Leave empty to detect it from the Target: something shaped like a hostname ("nike.com") is measured as a domain, and anything else — a phrase, or a bare word like "nike" — as a brand/keyword. One of: |
| language_namestring · optional | string | optional | Language for localized data. Defaults to English. Each country collects only certain languages, so not every pairing exists. One of: Default: |
| location_namestring · optional | string | optional | Country for localized data. Defaults to United States. AI answer data is collected in 94 countries — fewer than the other SEO actions cover. One of: Default: |
Response schema
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"elements"
],
"properties": {
"elements": {
"type": "array",
"items": {
"type": "object",
"required": [
"target",
"target_type",
"platform"
],
"properties": {
"target": {
"type": "string"
},
"mentions": {
"type": [
"number",
"null"
]
},
"platform": {
"type": "string"
},
"by_platform": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": [
"string",
"null"
]
},
"mentions": {
"type": [
"number",
"null"
]
},
"ai_search_volume": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": true
}
},
"target_type": {
"type": "string"
},
"ai_search_volume": {
"type": [
"number",
"null"
]
},
"top_source_domains": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": [
"string",
"null"
]
},
"mentions": {
"type": [
"number",
"null"
]
},
"ai_search_volume": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": true
}
},
"top_search_result_domains": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": [
"string",
"null"
]
},
"mentions": {
"type": [
"number",
"null"
]
},
"ai_search_volume": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
},
"returned": {
"type": "number",
"description": "How many rows this run returned, after any Limit was applied."
},
"truncated": {
"type": "boolean"
},
"suggestion": {
"type": "string"
},
"totalCount": {
"type": "number",
"description": "How many records the provider says MATCH in total, independent of Limit — routinely in the millions (spotify.com has 2,583,327 ranking pages). It is a match count, NOT how many this endpoint will serve: Limit caps what one call returns, so do not compare it against the row count to judge completeness and do not paginate towards it. Absent when the provider sent no count."
},
"totalElements": {
"type": "number",
"description": "DEPRECATED — despite the name this is the count RETURNED by this run, not a grand total, so it equals your Limit on a limited run. Kept at that value deliberately: ENG-17058 asked for depth 5 to report 5, and it is a live number in existing flows. Use `returned` for this number or `totalCount` for how many records match."
}
},
"additionalProperties": true
}