get_product_share_of_voice
get_product_share_of_voice MCP tool: by product category, how often AI answers cite the category and your brand's share of its product mentions against competitors, per engine, with top brands and top products. Inputs, response shape, JSON example.
Updated 2026-10-08
get_product_share_of_voice measures, category by category, how much room your brand takes in AI answers on an e-commerce project. For each category ("Interdental brushes", "Dental floss"), it returns how many answers cite a product of that category, your brand's share of the category's product mentions, the same share per engine, and the brands and products in the lead.
A mention is an answer that cites a product. The share of voice of a product is its part of the mentions of its category. Rejected products are left out.
Product categories are sorted by the AI after each scan. It reuses the categories already in the project, so products of different brands land in the same category. You can change a product's category with update_product; the AI never overwrites a category set by hand.
When to use
Call it to answer "on interdental brushes, how often do AI engines recommend my products rather than my competitors'?". It gives one share per category, so a strong range does not hide a weak one. Then open list_product_prompt_matrix on a category to see the prompts where you lose.
E-commerce projects only (see update_project_settings).
Input
| Field | Type | Default | Description |
|---|---|---|---|
projectId |
string (CUID) | required | Project to query. |
filters.dateRange |
{ from?, to? } (ISO date or datetime) |
all time | Answers of this period only. |
filters.llms |
array of LLM keys | all engines | Answers of these engines only. |
filters.category |
string | all categories | One product category, exactly as list_products returns it in category. "" = products without a category. |
Response
{
"success": true,
"brandName": "GUM",
"results": 412,
"ourShare": 29,
"categories": [
{
"category": "Brossettes interdentaires",
"answers": 96,
"answerRate": 23,
"ourAnswers": 41,
"ourRate": 10,
"mentions": 158,
"ourShare": 34,
"byLlm": [
{ "llm": "CHATGPT", "mentions": 82, "ourShare": 38 },
{ "llm": "COPILOT", "mentions": 51, "ourShare": 25 },
{ "llm": "PERPLEXITY", "mentions": 25, "ourShare": 36 }
],
"brands": [
{ "competitorId": "clc1...", "name": "TePe", "mentions": 61, "ours": false, "share": 39 },
{ "competitorId": null, "name": "GUM", "mentions": 54, "ours": true, "share": 34 },
{ "competitorId": "clc2...", "name": "Curaprox", "mentions": 43, "ours": false, "share": 27 }
],
"products": [
{ "id": "clpr4...", "name": "TePe Original", "competitorId": "clc1...", "brand": "TePe", "ours": false, "mentions": 38, "share": 24 },
{ "id": "clpr1...", "name": "Trav-Ler", "competitorId": null, "brand": "GUM", "ours": true, "mentions": 31, "share": 20 },
{ "id": "clpr5...", "name": "CPS Prime", "competitorId": "clc2...", "brand": "Curaprox", "ours": false, "mentions": 27, "share": 17 }
]
},
{
"category": "Fil dentaire",
"answers": 40,
"answerRate": 10,
"ourAnswers": 6,
"ourRate": 1,
"mentions": 52,
"ourShare": 12,
"byLlm": [
{ "llm": "CHATGPT", "mentions": 34, "ourShare": 15 },
{ "llm": "COPILOT", "mentions": 18, "ourShare": 6 }
],
"brands": [
{ "competitorId": "clc1...", "name": "TePe", "mentions": 46, "ours": false, "share": 88 },
{ "competitorId": null, "name": "GUM", "mentions": 6, "ours": true, "share": 12 }
],
"products": [
{ "id": "clpr8...", "name": "Bridge & Implant Floss", "competitorId": "clc1...", "brand": "TePe", "ours": false, "mentions": 46, "share": 88 },
{ "id": "clpr9...", "name": "Fine Floss", "competitorId": null, "brand": "GUM", "ours": true, "mentions": 6, "share": 12 }
]
}
]
}
Fields:
results: answers of the window, all prompts. It is the denominator ofanswerRateandourRate.ourShare(top level): your brand's share of every product mention, all categories together.categories: one entry per product category, most mentioned first.category: nullgroups the products without a category yet.answersandanswerRate: answers citing a product of the category, and their % of the window's answers.ourAnswersandourRate: answers citing one of your products of the category, and their % of the window's answers.mentions: product mentions of the category. An answer citing three brushes counts three mentions, somentionscan exceedanswers.ourShare: your brand's % of the category's product mentions.byLlmgives the same share per engine.brandsandproducts: the 10 brands and the 10 products with the most mentions in the category.shareis their % of the category's mentions.ours: truemarks your brand.
All rates are whole percentages, or null when there is nothing to divide by.
Error: not_an_ecommerce_project.
Tips and patterns
- Sort your categories by
ourShare: the lowest one with a highanswerRateis where engines talk about the category often and recommend someone else. - Compare
byLlm: a share at 38% on ChatGPT and 25% on Copilot points at the engine to work on first. - A big
category: nullentry means the AI has not sorted some products yet, or could not. Set their category withupdate_product. - Two categories that mean the same thing ("Brossettes" and "Brossettes interdentaires")? Move the products of one into the other with
update_product.
Related tools
list_product_prompt_matrix: which prompt brings up which productlist_products: every product of the project, with its categoryget_product: detail of one productupdate_product: change a product's category