list_competitors

list_competitors MCP tool: tracked competitors with mention totals, average position, LLM presence and prompt coverage. Filter by status, AI verdict, source, mentions threshold.

Updated 2026-10-07

list_competitors returns the competitors tracked on a project, with mention totals, average ranking position, the LLMs where they are mentioned and how many of your prompts they show up on. Three statuses are supported: CONFIRMED, SUGGESTED (auto-detected, awaiting moderation), REJECTED.

Each row also carries the verdict given by the AI or by a person. On an e-commerce project (a brand selling products online, see update_project_settings), entities cited in answers are sorted into competitor brands, retailers (where the buyer is sent: Amazon, pharmacies, marketplaces) and products (product names). Retailers and products are never CONFIRMED, so they stay out of the default list.

When to use

Reach for this tool whenever the user asks "who am I competing against in AI answers?", "who is gaining visibility on my prompts?", "list new competitors I need to review". The default filters.status: ["CONFIRMED"] returns the validated set; switch to ["SUGGESTED"] to triage the auto-detection queue, or filter by verdict to list the retailers or products of an e-commerce project. Combine with bulk_update_competitor_status to act on the result.

Input

Field Type Default Description
projectId string (CUID) required Project to query.
cursor string - Pagination cursor.
limit integer 20 1 to 100.
filters.status enum[] ["CONFIRMED"], or every status when filters.verdict is set CONFIRMED, SUGGESTED, REJECTED.
filters.verdict enum[] - COMPETITOR, NOT_COMPETITOR, UNSURE, RETAILER, PRODUCT. RETAILER and PRODUCT exist on e-commerce projects only and are never CONFIRMED.
filters.source string[] - Filter by detection source.
filters.minMentions integer 0 Minimum total mentions.
filters.nameContains string - Case-insensitive substring on canonical name.
sortBy enum mentions_desc mentions_desc, created_desc, name_asc.

Response

Each row is a competitor with aliases, status, verdict, source and a stats block. verdict is one of COMPETITOR, NOT_COMPETITOR, UNSURE, RETAILER, PRODUCT, or null when the entity has not been judged yet. The top-level summary.byStatus lets the agent see the moderation backlog without a second call.

{
  "data": [
    {
      "id": "clxcomp001",
      "canonicalName": "Otterly",
      "aliases": ["Otterly.ai", "OtterlyAI"],
      "status": "CONFIRMED",
      "verdict": "COMPETITOR",
      "source": "auto-detected",
      "createdAt": "2026-02-15T00:00:00.000Z",
      "stats": {
        "totalMentions": 89,
        "averagePosition": 2.3,
        "llmsWhereMentioned": ["CHATGPT", "PERPLEXITY"],
        "promptCoverage": 12
      }
    }
  ],
  "pageInfo": { "hasMore": false, "nextCursor": null, "totalCount": 7 },
  "summary": {
    "totalCompetitors": 7,
    "byStatus": { "CONFIRMED": 7, "SUGGESTED": 12, "REJECTED": 3 }
  }
}

Tips and patterns

  • Sort by mentions_desc for competitive intel; sort by created_desc to surface newcomers in the auto-detection queue.
  • averagePosition is computed across runs where the competitor was mentioned. A low totalMentions makes it noisy.
  • promptCoverage is the count of distinct prompts where the competitor showed up. Pair it with list_prompts to see which prompts overlap.
  • List the retailers of an e-commerce project with filters.verdict: ["RETAILER"] (and products with ["PRODUCT"]). The status filter then defaults to every status, so nothing is hidden.
  • A competitor that is really a retailer or a product can be moved with bulk_update_competitor_status and its kind field.
  • Pull filters.status: ["SUGGESTED"] periodically and feed the IDs into bulk_update_competitor_status to keep the dataset clean.

Related tools

You can see where you stand today.

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