How to Measure Share of Voice Across Social Platforms
"Are we winning?" is a hard question for a brand to answer honestly. Your own follower count going up feels like winning, until you realize a competitor grew twice as fast, or that the whole category is talking about a rival while you post into the void. Share of voice (SOV) is the metric that cuts through that. It measures how much of the conversation in your space belongs to you versus everyone else, and it's the difference between "we posted a lot" and "people are actually talking about us."
Here's how to measure it across platforms with public data, and, just as importantly, how not to fool yourself while doing it.
What share of voice actually means
At its simplest, share of voice is your brand's slice of the total conversation:
SOV = your brand's mentions / (your mentions + all tracked competitors' mentions)
The word "mentions" is doing a lot of work there, and how you define it decides whether your number means anything. You can measure SOV by raw mention count, by engagement on those mentions (a weighted version that rewards mentions people actually cared about), or by reach. Raw counts are easiest; engagement-weighted is usually more honest, because ten mentions nobody engaged with matter less than one that blew up.
Pick one definition and hold it constant. SOV is only useful as a trend and a comparison, so consistency matters more than picking the "perfect" formula.
Collecting the mentions
You measure SOV by searching each platform for your brand and each competitor, then counting and weighting what comes back. SociaVault's search endpoints span the platforms that matter. Base https://api.sociavault.com/v1, x-api-key header, 1 credit per call, data under data:
const API_KEY = process.env.SOCIAVAULT_API_KEY;
const BASE = "https://api.sociavault.com/v1";
async function get(path, params) {
const qs = new URLSearchParams(params).toString();
const res = await fetch(`${BASE}${path}?${qs}`, {
headers: { "x-api-key": API_KEY },
});
if (!res.ok) throw new Error(`${path} failed: ${res.status}`);
return (await res.json()).data;
}
// Mentions of a brand across platforms
async function mentions(brand) {
const [tiktok, reddit, twitter] = await Promise.all([
get("/scrape/tiktok/search/keyword", { query: brand }),
get("/scrape/reddit/search", { query: brand, timeframe: "week" }),
get("/scrape/twitter/search", { query: brand, type: "Latest" }),
]);
return { tiktok, reddit, twitter };
}
Do that for your brand and each competitor over the same time window, that last part is non-negotiable, and you have the raw material for a comparable number.
Computing SOV honestly
Turn each brand's results into a single weighted score, then divide. An engagement-weighted count beats a raw count because it reflects mentions that actually landed:
def brand_weight(results):
"""Sum an engagement proxy across a brand's mentions."""
total = 0
for platform_data in results.values():
items = platform_data.get("items", []) if isinstance(platform_data, dict) else (platform_data or [])
for post in items:
likes = post.get("like_count") or post.get("digg_count") or 0
comments = post.get("comment_count") or 0
total += 1 + likes + (comments * 2) # a mention is worth at least 1
return total
def share_of_voice(brand_results, competitor_results):
me = brand_weight(brand_results)
everyone = me + sum(brand_weight(c) for c in competitor_results)
return round(100 * me / everyone, 1) if everyone else 0.0
Read fields defensively (like counts differ by platform, TikTok uses digg_count), and log a raw response to confirm before trusting field names. Track the resulting percentage over time; a rising SOV means you're winning the conversation, a falling one means a competitor is, even if your own numbers look fine in isolation.
Making it a real metric
A one-time SOV number is a curiosity. A monthly SOV trend is a KPI. Run the collection on a schedule (the same monitoring dashboard pattern works here), store each period's score, and watch the direction. Segment it too: SOV per platform often tells a sharper story than a blended number, you might dominate Reddit and be invisible on TikTok, which is a content decision hiding inside an average.
The honest limits
- You're sampling, not censusing. Search returns a strong sample of mentions, not every single one. That's fine for a consistent trend, but don't present it as an exact count of all conversation.
- Consistency beats precision. The absolute SOV number matters less than its movement over time. Keep the definition, platforms, and time window identical between measurements or the comparison is meaningless.
- Ambiguous brand names wreck it. If your brand is a common word, keyword search catches unrelated noise. Use distinctive queries or filter results, and sanity-check the raw mentions.
- Engagement weighting is a proxy. Likes and comments approximate impact; they aren't reach or sentiment. A viral negative mention still counts as "voice", pair SOV with a sentiment read before celebrating.
- Platform coverage isn't uniform. Each platform exposes different fields and volumes. A blended cross-platform SOV hides real per-platform differences, so segment when it matters.
Frequently Asked Questions
What is share of voice on social media?
It's your brand's portion of the total conversation in your category, your mentions divided by your mentions plus competitors'. It reframes success from "how much did we post" to "how much of the conversation do we actually own" versus rivals.
How do I calculate share of voice?
Search each platform for your brand and each competitor over the same time window, count (ideally engagement-weight) the mentions, then divide your total by the combined total. Track the resulting percentage over time rather than as a one-off.
Should I count raw mentions or weight by engagement?
Engagement-weighting is usually more honest, because ten ignored mentions matter less than one that took off. Whichever you choose, keep it consistent across measurements, SOV is meaningful as a trend, so a stable definition beats a "perfect" one.
Why measure share of voice per platform?
Because a blended number hides where you're winning and losing. You might own the conversation on Reddit and be invisible on TikTok. Segmenting SOV by platform turns a vague average into a specific content decision.
How accurate is SOV from public data?
It's a strong, consistent sample rather than an exact census of every mention. That's fine for tracking direction over time, but don't treat it as a precise count, and watch out for ambiguous brand names inflating it with unrelated noise.
How much does measuring SOV cost with the API?
Each platform search is 1 credit, so one SOV snapshot across a few platforms for your brand and competitors is a handful of credits. Running it monthly stays inexpensive, and you start with 50 free credits, no card.
Want to know whether you're actually winning the conversation? Start free with 50 credits, no card required and measure your first share-of-voice snapshot today.
Found this helpful?
Share it with others who might benefit
Ready to Try SociaVault?
Start extracting social media data with our powerful API. No credit card required.