list_bulk_audits

list_bulk_audits MCP tool: bulk GEO Audit campaigns of a workspace, with status, target count, LLMs, credits and progress. Inputs, response shape, JSON example.

Updated 2026-09-21

list_bulk_audits returns the bulk GEO Audit campaigns of your workspace, newest first. A bulk campaign runs one mutualised scan across N target brands and produces one report per target, so the campaign is the parent and each target is an ordinary GEO Audit.

When to use

Use it as the entry point of anything campaign-level: finding the campaign an agent should monitor, spotting the ones stuck at competitor curation, or tallying how many targets a batch produced. The targets themselves are not returned here: list them with list_geo_audits({ filters: { bulkAuditId } }).

Input

Field Type Default Description
limit integer (1-100) 20 Max campaigns per page.
cursor string - Opaque cursor from a previous page's pageInfo.nextCursor.
filters.status string[] - Any of PENDING, REVIEWING, CONFIGURING, SCANNING, CURATING, GENERATING, COMPLETED. Omit to return every status.
filters.dateRange {from?, to?} - ISO date or datetime, applied on the campaign's createdAt.

Bulk campaigns are workspace-scoped, like single GEO Audits, so this tool takes no projectId and rejects API keys restricted to specific projects.

Response

{
  "data": [
    {
      "id": "clx_bulk_42",
      "segmentTopic": "Plumbers in Lyon",
      "label": "Plumbers in Lyon",
      "status": "CURATING",
      "targetCount": 12,
      "llms": ["CHATGPT", "PERPLEXITY"],
      "occurrences": 1,
      "creditsCost": 420,
      "progress": { "received": 120, "expected": 120 },
      "createdAt": "2026-09-14T09:12:00.000Z",
      "completedAt": null
    }
  ],
  "pageInfo": { "hasMore": false, "nextCursor": null, "totalCount": 1 }
}

Field notes:

  • status follows the campaign lifecycle: PENDING (targets collected, brands being extracted) → REVIEWING (low-confidence targets awaiting review) → CONFIGURING (LLMs, personas and prompts being picked) → SCANNING (shared scan running) → CURATING (paused for campaign-level competitor curation) → GENERATING (segment insights being written) → COMPLETED.
  • label is the inferred segmentTopic, falling back to the first target's normalised domain when the topic has not been inferred yet. It is null on a campaign with no target.
  • creditsCost is what was charged when the shared scan was triggered.
  • progress counts scan results received against expected, across the whole campaign.

Tips and patterns

  • Poll on CURATING. That status is the only point where an agent can act: call list_bulk_audit_competitors, then select_bulk_audit_competitors to unblock insight generation for all targets at once.
  • Filter server-side. filters.status: ["CURATING"] is cheaper than paging through every campaign and filtering client-side.
  • Campaign, then targets. Read the campaign with get_bulk_audit, then page its targets with list_geo_audits({ filters: { bulkAuditId } }). That list accepts filters.status too, so you can pull only the finished targets.

Related tools

You can see where you stand today.

Free trial. Start tracking your AI visibility, no credit card.