get_geo_audit
get_geo_audit MCP tool: fetch a single GEO Audit by id. Status and progress while running, full content once COMPLETED.
Updated 2026-07-23
get_geo_audit fetches a single GEO Audit (one-shot white-label audit) by id. While the audit is still running, the response carries the status, a progress counter and a hint about what the audit is waiting for. Once COMPLETED, the response includes the full frozen content: selected competitors, personas, recommendations, content ideas and the audit context.
When to use
After finding an audit with list_geo_audits, call this tool to read its content or to check what it is waiting for. The status field tells you where the audit is in its lifecycle, including whether it is parked at competitor selection (REVIEWING).
Input
| Field | Type | Description |
|---|---|---|
auditId |
string (CUID) | The audit id returned by list_geo_audits. The tool returns audit_not_found if no audit with this id exists in the workspace. |
include.pageContent |
boolean | Include the scraped page markdown in auditContext.pages. Off by default (heavy field, several KB per page); withheld pages carry a markdownLength hint instead. |
maxPageChars |
integer | When include.pageContent is true, truncate each page's markdown to this many characters (sets markdownTruncated: true). |
GEO Audits are workspace-scoped, so this tool takes no projectId.
Response
Still running
{
"success": true,
"auditId": "clx_audit_42",
"status": "REVIEWING",
"prospectUrl": "https://prospect.com",
"brandName": "Prospect",
"createdAt": "2026-06-20T09:00:00.000Z",
"isComplete": false,
"progress": { "received": 24, "expected": 24 },
"message": "Scans done. The audit is paused at competitor selection — confirm/reject competitors before insights can be generated."
}
The message is status-specific. REVIEWING means the audit is waiting on competitor selection before it can move to insight generation.
Completed
{
"success": true,
"auditId": "clx_audit_42",
"status": "COMPLETED",
"prospectUrl": "https://prospect.com",
"brandName": "Prospect",
"createdAt": "2026-06-20T09:00:00.000Z",
"isComplete": true,
"brandAliases": ["Prospect Inc"],
"country": "US",
"language": "en",
"llms": ["CHATGPT", "PERPLEXITY"],
"creditsCost": 24,
"shareSlug": "prospect-9f3a",
"selectedCompetitors": ["Acme", "Globex"],
"personas": [ /* [{ id, name, description }] */ ],
"recommendations": [ /* [{ category, severity, title, description, action, metric? }] */ ],
"contentIdeas": [ /* [{ title, angle }] */ ],
"auditContext": { /* { pages: [{ url, markdownLength }], siteMeta, scannedAt } — page markdown is opt-in via include.pageContent */ },
"completedAt": "2026-06-20T09:12:00.000Z"
}
Not found
{
"success": false,
"error": "audit_not_found",
"message": "No GEO audit with this id exists in your workspace. Verify the auditId returned by list_geo_audits."
}
Tips and patterns
- Branch on
isComplete, not onstatus. The frozen content fields (recommendations,contentIdeas, …) only appear whenisComplete: true. - Read
progresswhileSCANNINGto estimate how close the audit is toREVIEWING. REVIEWINGneeds a decision: confirming or rejecting competitors is handled by a dedicated write flow, not by this read tool.
Related tools
- list_geo_audits — list every GEO Audit in the workspace (newest first) without polling individual ids.
- get_page_audit — fetch a Page Audit, a different object.