Published on March 14, 2026
How to Measure AI Share of Voice with an API (Complete Guide)
TL;DR: AI Share of Voice (SOV) measures how often your brand gets mentioned relative to competitors when AI engines answer questions in your category. The sellm API calculates SOV automatically via the sovPct field in analysis responses, giving you a single number to track over time.
In traditional marketing, share of voice measures how much of the conversation your brand owns compared to competitors. In AI search, the concept is the same but the mechanics are different. When someone asks ChatGPT "best cloud hosting for SaaS startups" and it mentions five brands, each brand's share of voice is determined by whether it was mentioned, where it was positioned, and how often it appears across repeated queries.
As AI search engines become a primary way people discover and evaluate products, tracking your AI share of voice is no longer optional. It's a leading indicator of brand visibility that directly impacts how new customers find you. This guide explains what AI SOV is, how it's calculated, and how to track it programmatically using the sellm API.
What Is AI Share of Voice?
AI Share of Voice is the percentage of AI-generated responses in your category that mention your brand. If you track 50 prompts across multiple AI providers and your brand appears in 30 of the responses, your raw SOV is 60%. But raw mention counts only tell part of the story — position, sentiment, and provider distribution all matter.
The formula at its simplest is:
AI Share of Voice = (Your brand mentions / Total mentions across all brands) x 100
For example, if an AI response to "best cloud hosting for SaaS startups" mentions five brands and yours is one of them, you hold 20% of the share of voice for that specific query. When you aggregate across dozens or hundreds of prompts, you get a reliable picture of your overall AI visibility relative to competitors.
Why SOV Differs from Coverage
Coverage measures whether your brand was mentioned at all — it's a binary yes/no metric. Share of voice goes further by accounting for all brands mentioned in the response. A prompt where your brand is one of two mentioned gives you 50% SOV. A prompt where your brand is one of ten mentioned gives you 10% SOV. Both have 100% coverage, but the share of voice tells a very different story about competitive density.
How SOV Relates to Position and Sentiment
Position tells you where your brand appears in the AI's ranked list — first, third, fifth. Sentiment tells you whether the mention is positive, neutral, or negative. SOV tells you how much of the overall conversation you own. Together, these three metrics paint the full picture: you want high SOV (mentioned often), high position (mentioned early), and positive sentiment (mentioned favorably).
How Sellm Calculates AI Share of Voice
When sellm runs an analysis, it sends your prompt to each AI provider (ChatGPT, Claude, Perplexity, Gemini, Grok), collects the responses, and extracts structured data about every brand mentioned. The response then computes aggregate KPIs, including the sovPct field in the summary, plus per-provider and per-prompt breakdowns.
The sovPct Field
The sovPct field in the analysis summary represents your brand's share of voice as a percentage. It's calculated by dividing the number of times your brand was mentioned across all provider-replicate combinations by the total number of brand mentions (yours plus all competitors) in those same responses.
// Response from GET /v1/async-analysis/{analysisId}
{
"data": {
"status": "succeeded",
"summary": {
"sovPct": 34,
"coveragePct": 72,
"avgPos": 2.8,
"sentiment": 0.72
},
"providerBreakdown": {
"sovByProvider": [
{ "provider": "ChatGPT", "sov": 42 },
{ "provider": "Perplexity", "sov": 25 },
{ "provider": "Claude", "sov": 38 }
],
"coverageByProvider": [...],
"sentimentByProvider": [...]
},
"promptBreakdown": [
{
"prompt": "best cloud hosting for SaaS startups",
"sovPct": 34,
"coverage": 80,
"avgPos": 2.5,
"sentiment": 0.75,
"topCompetitors": ["AWS", "DigitalOcean"],
...
}
],
"results": [...]
}
}
A sovPct of 34 means your brand accounted for 34% of all brand mentions across every provider and replicate in that analysis. If you're tracking five competitors, an even split would be roughly 16.7% each — so 34% means you're significantly outperforming the average.
Per-Provider SOV
SOV can vary dramatically between providers. Your brand might hold 45% SOV in ChatGPT but only 20% in Perplexity, because each model has different training data, retrieval approaches, and ranking behaviors. The sellm API returns per-provider SOV in the providerBreakdown.sovByProvider array, so you can see exactly where you're strong and where you need to improve — all in a single GET request.
// providerBreakdown.sovByProvider from GET /v1/async-analysis/{analysisId}
[
{ "provider": "ChatGPT", "sov": 42 },
{ "provider": "Claude", "sov": 38 },
{ "provider": "Gemini", "sov": 31 },
{ "provider": "Grok", "sov": 29 },
{ "provider": "Perplexity", "sov": 25 }
]
Building a SOV Tracking System with the API
The real value of SOV tracking comes from automation. Instead of manually checking dashboards, you can build a system that submits analyses, polls for results, stores SOV data, and alerts you to meaningful changes. Here's how to set that up with the sellm API.
Step 1: Submit an Analysis
Use the POST /v1/async-analysis endpoint to submit a prompt for analysis across your chosen providers and locations. The API key is scoped to your project, so the analysis automatically runs against your configured brand and competitors.
curl -X POST "https://sellm.io/v1/async-analysis" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "best cloud hosting for SaaS startups",
"providers": ["chatgpt", "claude", "perplexity"],
"replicates": 5,
"locations": ["US"]
}'
// Response (202 Accepted):
// {
// "data": {
// "analysisId": "aa_01abc",
// "projectId": "proj_123",
// "status": "running",
// "creditsReserved": 15,
// ...
// }
// }
Step 2: Poll for Results and Pull SOV
Once the analysis is submitted, poll the GET /v1/async-analysis/{analysisId} endpoint until the status changes from running to succeeded. The summary, provider breakdown, and individual results are all embedded in the response:
// Poll until the analysis finishes
async function waitForAnalysis(analysisId) {
while (true) {
const response = await fetch(
`https://sellm.io/v1/async-analysis/${analysisId}`,
{ headers: { "Authorization": "Bearer YOUR_API_KEY" } }
);
const { data } = await response.json();
if (data.status === "succeeded") {
console.log(`AI Share of Voice: ${data.summary.sovPct}%`);
console.log(`Coverage: ${data.summary.coveragePct}%`);
console.log(`Average Position: ${data.summary.avgPos}`);
return data;
}
if (data.status === "failed") {
throw new Error("Analysis failed");
}
// Still running, wait before polling again
await new Promise(r => setTimeout(r, 5000));
}
}
Step 3: Store Historical SOV Data
To track SOV trends, store the summary data after each analysis completes. A simple approach is appending to a database or even a flat file:
// Store SOV data point for trend analysis
const data = await waitForAnalysis(analysisId);
const dataPoint = {
analysisId: data.analysisId,
date: data.createdAt,
sovPct: data.summary.sovPct,
coveragePct: data.summary.coveragePct,
avgPos: data.summary.avgPos,
};
// Insert into your database
await db.insert("sov_history", dataPoint);
Step 4: Set Up Alerts
SOV drops are worth knowing about immediately. If your SOV drops by more than 5 percentage points between analyses, something has changed — a competitor may have improved their content, an AI model may have been updated, or your own content may have become stale. Build an alert to notify your team:
// Compare current SOV with previous analysis
const previousSov = await db.getLatestSov();
const currentSov = data.summary.sovPct;
const delta = currentSov - previousSov;
if (delta < -5) {
await sendSlackAlert(
`SOV dropped ${Math.abs(delta)}pp: ${previousSov}% -> ${currentSov}%`
);
}
Comparing SOV Across AI Providers
Not all AI providers treat your brand the same way. Each model has different training data, different retrieval-augmented generation approaches, and different tendencies around which brands to recommend. The providerBreakdown in the analysis response reveals platform-specific opportunities and risks without any additional API calls.
// Extract per-provider SOV from analysis response
const data = await waitForAnalysis(analysisId);
const providerSov = {};
for (const entry of data.providerBreakdown.sovByProvider) {
providerSov[entry.provider] = entry.sov;
}
console.log("SOV by provider:", providerSov);
// Example output:
// { ChatGPT: 42, Claude: 38, Perplexity: 25, Gemini: 31, Grok: 29 }
Common patterns you'll observe:
- ChatGPT tends to favor well-known brands — established brands with broad web presence often see higher SOV in ChatGPT responses.
- Perplexity is source-driven — brands with strong content on authoritative domains (G2, review sites, news publications) tend to do well because Perplexity's retrieval model relies heavily on indexed sources.
- Claude favors detailed, nuanced mentions — Claude's responses tend to be longer and more analytical, so brands with rich documentation and comparison content often earn higher positions.
- Gemini reflects Google's index — brands that rank well in traditional Google search often see correlated SOV in Gemini responses.
- Grok surfaces trending brands — integrated with X (Twitter), Grok may favor brands with recent social buzz and discussion.
Tracking SOV Trends Over Time
A single SOV measurement is a snapshot. The real insight comes from watching how SOV changes over weeks and months. By submitting the same prompt on a regular schedule (e.g., weekly via a cron job), you build a time series to compare against.
What SOV Trends Tell You
- Rising SOV: Your content and brand authority are growing in AI models' view. This could be driven by new content, improved third-party coverage, or a competitor losing ground.
- Falling SOV: Competitors are gaining ground, AI models have been updated with data that favors other brands, or your content has gone stale. Investigate the
promptBreakdownin your analysis results to identify which queries you're losing. - Stable SOV: The competitive landscape hasn't shifted much. This can be positive (you're maintaining a strong position) or concerning (you're not growing while the market evolves).
- Volatile SOV: Large swings between analyses suggest that AI model updates are significantly reshuffling brand rankings in your category. This is common in competitive categories and indicates that consistent content investment is needed to maintain visibility.
Building a SOV Trend Dashboard
With historical data stored from each analysis, you can build a simple trend visualization. Here's an example of submitting a weekly analysis and storing the results:
// Submit a new analysis for SOV tracking
const submitRes = await fetch("https://sellm.io/v1/async-analysis", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
prompt: "best cloud hosting for SaaS startups",
providers: ["chatgpt", "claude", "perplexity", "gemini", "grok"],
replicates: 5,
locations: ["US"],
}),
});
const { data: submitted } = await submitRes.json();
// Wait for completion and store the result
const completed = await waitForAnalysis(submitted.analysisId);
const trendPoint = {
date: completed.createdAt,
sovPct: completed.summary.sovPct,
coveragePct: completed.summary.coveragePct,
avgPos: completed.summary.avgPos,
};
await db.insert("sov_trend", trendPoint);
// Query your database for the trend chart
const trendData = await db.query(
"SELECT * FROM sov_trend ORDER BY date DESC LIMIT 12"
);
console.log("12-week SOV trend:", trendData);
Benchmarking Against Competitors
SOV is inherently a competitive metric. Your 35% SOV only means something in the context of what your competitors hold. The sellm API exposes competitor data in analysis results, allowing you to build a complete competitive SOV picture.
Competitor SOV from Analysis Results
Each analysis result includes all brands mentioned in the response via the brandsMentioned array, not just yours. By aggregating across the results array in the GET response, you can compute SOV for every brand in your category:
// Get completed analysis with results
const data = await waitForAnalysis(analysisId);
// Count mentions per brand from the results array
const brandMentions = {};
let totalMentions = 0;
for (const result of data.results) {
for (const brand of result.brandsMentioned || []) {
brandMentions[brand] = (brandMentions[brand] || 0) + 1;
totalMentions++;
}
}
// Calculate SOV for each brand
const brandSov = {};
for (const [brand, count] of Object.entries(brandMentions)) {
brandSov[brand] = ((count / totalMentions) * 100).toFixed(1);
}
console.log("Competitive SOV breakdown:", brandSov);
// Example: { "YourBrand": "34.2", "AWS": "22.1", "DigitalOcean": "18.5", ... }
Identifying SOV Gaps
Once you have competitive SOV data, look for prompts where your competitors dominate but your brand is absent. The promptBreakdown makes this easy — each entry includes topCompetitors and your brand's SOV for that prompt:
// Find prompts where you have low SOV but competitors are strong
const data = await waitForAnalysis(analysisId);
const gaps = data.promptBreakdown.filter(p => p.sovPct === 0 && p.topCompetitors.length > 0);
console.log("Prompts where competitors appear but you don't:");
for (const gap of gaps) {
console.log(` - "${gap.prompt}" (top competitors: ${gap.topCompetitors.join(", ")})`);
}
These gap prompts tell you exactly which topics and questions you need to address with better content, stronger third-party presence, or improved product positioning to reclaim share of voice.
Pricing
AI Share of Voice tracking is included in every sellm plan. The sovPct metric is computed automatically on every analysis at no additional cost. Each prompt analysis costs less than 1 cent.
All plans include API access, per-provider breakdowns, historical trend data, and the ability to trigger manual runs for on-demand SOV snapshots outside your regular weekly schedule.
Start Tracking Your AI Share of Voice
Sign up for Sellm to measure your brand's share of voice across ChatGPT, Claude, Perplexity, Gemini, and Grok. Full API access included on all plans.
Get StartedFrequently Asked Questions
What exactly does sovPct measure?
sovPct is the percentage of total brand mentions (across all providers and replicates in an analysis) that belong to your brand. If there were 100 total brand mentions and your brand appeared 35 times, your sovPct is 35.
Can I track SOV separately for each AI provider?
Yes. The providerBreakdown.sovByProvider array in the analysis response gives you per-provider SOV automatically. Each entry includes the provider name and its sov value, so you can see SOV for ChatGPT, Claude, or any individual provider without extra API calls.
How many prompts do I need for reliable SOV data?
We recommend at least 20-30 prompts covering different aspects of your category for statistically meaningful SOV numbers. With fewer prompts, a single query result can swing your SOV significantly. Each prompt analysis costs less than 1 cent, making it affordable to run comprehensive analyses.
How often is SOV recalculated?
SOV is calculated fresh with every analysis you submit via POST /v1/async-analysis. You can automate this on any schedule (weekly, daily) using a cron job. Each analysis produces an independent sovPct value, giving you a clean time series for trend analysis.
Is SOV tracking included in every plan?
Yes, SOV metrics including sovPct in analysis summaries and per-provider breakdowns via providerBreakdown are included in every API response at no extra cost.