list_geo_audits
list_geo_audits MCP tool: list GEO Audits (one-shot white-label audits) for the workspace with status, prospect URL and progress, newest first.
Updated 2026-09-21
list_geo_audits returns the GEO Audits (one-shot white-label audits) for the workspace, newest first. Each row carries the status, the audited prospect URL, the brand name, the target country and language, the selected LLMs and a progress counter. Unlike Page Audits, GEO Audits are workspace-scoped, not tied to a single project, so this tool takes no projectId.
When to use
- For agencies producing many audits via the MCP: list the whole workspace and read the state of every audit without opening the UI.
- To find audits stuck at competitor selection (filter with
filters.status: ["REVIEWING"]) before they can move to insight generation. - To group a batch: pass
filters.bulkAuditIdto get one campaign's targets,filters.scopeto include (or isolate) campaign targets across every campaign, orfilters.dateRangeto pull back the audits launched in a given window. - To track which audits have reached
COMPLETEDand are ready to read withget_geo_audit.
This tool lists the one-shot GEO Audits only. It does not return Page Audits (OptimizationReport); use list_page_audits for those.
Input
| Field | Type | Default | Description |
|---|---|---|---|
cursor |
string | - | Cursor returned in pageInfo.nextCursor. |
limit |
int | 20 | Max items, 1–100. |
filters.status |
enum[] | - | Any of PENDING, SCANNING, REVIEWING, GENERATING, COMPLETED. Omit to return all. |
filters.dateRange |
{ from?, to? } |
- | Filters on createdAt. Date (2026-09-01) or ISO datetime. |
filters.bulkAuditId |
string (CUID) | - | Returns that bulk campaign's targets instead of single audits. |
filters.scope |
single | bulk_children | all |
single |
Which audits to consider: standalone audits only, campaign targets across every campaign, or both. Ignored when bulkAuditId is set. |
Without filters.bulkAuditId, the tool returns single audits only, mirroring the list shown in the app; a campaign's children are never mixed in. Widen that with filters.scope. filters.status applies in every case, so scope: "bulk_children" with status: ["COMPLETED"] returns every finished campaign target of the workspace.
Response
{
"data": [
{
"id": "clx_audit_42",
"prospectUrl": "https://prospect.com",
"domain": "prospect.com",
"brandName": "Prospect",
"status": "REVIEWING",
"country": "US",
"language": "en",
"llms": ["CHATGPT", "PERPLEXITY"],
"creditsCost": 24,
"shareSlug": "prospect-9f3a",
"reportUrl": "https://mentionable.ai/share/audit/prospect-9f3a",
"bulkAuditId": null,
"bulkLabel": null,
"progress": { "received": 6, "expected": 24 },
"createdAt": "2026-06-20T09:00:00.000Z",
"completedAt": null
}
],
"pageInfo": { "hasMore": false, "nextCursor": null, "totalCount": 1 }
}
Field notes:
domainis the prospect host without protocol,www.or trailing slash. It is the join key for an external prospect base, so you never clean upprospectUrlat import time.reportUrlis absolute: the workspace's own domain in white-label,mentionable.aiotherwise. Prefer it over rebuilding a URL fromshareSlug.bulkAuditIdandbulkLabelare set on the targets of a bulk campaign (bulkLabelis the campaign's inferred segment topic) andnullon single audits.statusfollows the GEO Audit lifecycle:PENDING(created, scan not started),SCANNING(LLM scans running),REVIEWING(scans done, paused for competitor selection),GENERATING(competitors picked, insights being written),COMPLETED(frozen, report ready).progress.received/progress.expectedcount scan results. They let you estimate how far aSCANNINGaudit is fromREVIEWING.completedAtisnulluntil the audit reachesCOMPLETED.
Tips and patterns
- Pagination: the cursor is the audit's
id. Stable across page boundaries. - Pair with
get_geo_audit: this tool returns metadata only. To read the recommendations, content ideas and selected competitors, callget_geo_auditwith theid. - Group without guessing:
filters.bulkAuditIdreplaces regrouping a batch bycreatedAtwindow. On single audits launched one by one,filters.dateRangedoes the same job. - Sweep every report at once:
filters.scope: "all"plus a status filter is the one call that covers single audits and campaign targets together, e.g. to collect everyCOMPLETEDreport URL of the workspace. - Watch for
REVIEWING: an audit parked atREVIEWINGwaits for a human (or an agent) to confirm competitors. Surface these so they don't stall silently.
Related tools
- get_geo_audit: fetch a single GEO Audit (full content when COMPLETED).
- list_page_audits: list Page Audits (page-level optimizations), a different object.