Overview
Competitor Tracking helps you understand how your brand stacks up against competitors in AI search results. Track competitor mentions, analyze share of voice, and identify visibility gaps to inform your SEO and content strategy.
Key Features
Multi-Competitor Tracking Track multiple competitors per brand (plan-based limits)
Share of Voice See what percentage of AI mentions go to you vs competitors
Gap Analysis Identify visibility gaps between your brand and competitors
Leaderboard View Ranked comparison of all brands by mention count
Adding Competitors
Select a Brand
Navigate to the brand you want to track competitors for
Add Competitor
Click “Add Competitor” and provide:
Competitor Name : The name to track in AI responses
Website URL : The competitor’s website
Verify Limits
The system checks your plan’s competitor limit before adding
Competitor limits vary by plan. The API validates limits before allowing new competitors: // From: apps/api/src/controllers/competitor.controller.ts:36-44
const planLimits = PLAN_LIMITS [ req . user ! . plan_id ];
const currentCount = await competitorService . getCompetitorCount ( brandId );
if ( currentCount >= planLimits . competitors ) {
res . status ( 403 ). json ({
error: `You have reached the maximum number of competitors ( ${ planLimits . competitors } ) for your plan`
});
}
Competitor Comparison
Get comprehensive comparison data for your brand vs all competitors:
API Endpoint
// API: GET /api/brands/:brandId/competitors/comparison
{
"brand" : {
"id" : "brand-123" ,
"name" : "Acme Corp" ,
"websiteUrl" : "https://acme.com" ,
"mentions" : 156 ,
"shareOfVoice" : "45.2" ,
"visibilityGap" : "0" ,
"rank" : 1
},
"competitors" : [
{
"id" : "comp-456" ,
"name" : "Competitor A" ,
"websiteUrl" : "https://competitor-a.com" ,
"mentions" : 89 ,
"shareOfVoice" : "25.8" ,
"visibilityGap" : "19.4" ,
"rank" : 2
}
],
"leaderboard" : [
// All brands ranked by mentions
]
}
Share of Voice Calculation
Share of voice represents the percentage of total mentions your brand receives:
// From: apps/api/src/services/competitor.service.ts:160-190
const totalMentions = comparison . reduce (( sum , c ) => sum + c . mentions , 0 );
// Calculate share of voice percentage
const shareOfVoice = totalMentions > 0
? (( brandMentions . length / ( totalMentions + brandMentions . length )) * 100 ). toFixed ( 2 )
: '0' ;
// Calculate visibility gap (your SOV - competitor SOV)
const visibilityGap = ( Number ( brandSOV ) - Number ( competitorSOV )). toFixed ( 2 );
Understanding Share of Voice Metrics
Share of Voice (SOV) measures the percentage of total AI mentions across all tracked brands:
High SOV (40%+) : Strong market presence in AI search
Medium SOV (20-40%) : Competitive visibility
Low SOV (under 20%) : Opportunity to improve
Visibility Gap shows the difference between your SOV and each competitor’s:
Positive Gap : You’re ahead of this competitor
Negative Gap : Competitor has higher visibility
Gap Size : Indicates how much you’re leading/trailing
Competitor Mention Detection
OpenSight extracts and analyzes competitor mentions from AI responses:
// From: packages/analyzer/src/mention-extractor.ts:89-122
export function extractCompetitorMentions (
text : string ,
competitors : Array <{ name : string ; url : string }>
) : CompetitorMention [] {
const mentions : CompetitorMention [] = [];
const sentences = text . split ( / [ .!?\n ] + / ). filter ( s => s . trim (). length > 0 );
for ( const competitor of competitors ) {
const mentionData = extractMentions ( text , competitor . name , competitor . url );
if ( mentionData . mentioned && mentionData . position !== null ) {
// Find sentence containing the mention
let sentenceIndex = mentionData . position - 1 ;
const sentenceWithMention = sentences [ sentenceIndex ];
// Analyze sentiment of the specific sentence
const sentimentResult = analyzeSentiment ( sentenceWithMention || '' );
mentions . push ({
name: competitor . name ,
position: mentionData . position ,
sentiment: sentimentResult . label
});
}
}
return mentions ;
}
Sentiment Analysis
Each competitor mention includes sentiment analysis:
Positive Sentiment
Neutral Sentiment
Negative Sentiment
Sentiment score > 0.05 indicates favorable mention Example: “Competitor A is a leading provider with excellent customer service”
Sentiment score between -0.05 and 0.05 Example: “Competitor A offers similar features”
Sentiment score < -0.05 indicates unfavorable mention Example: “Competitor A struggles with performance issues”
Leaderboard View
The leaderboard ranks all brands (yours + competitors) by total mentions:
// From: apps/api/src/services/competitor.service.ts:192-200
const leaderboardItems = [
brandData ,
... comparisonWithSOV ,
]. sort (( a , b ) => b . mentions - a . mentions );
const leaderboard = leaderboardItems . map (( item , index ) => ({
... item ,
rank: index + 1 ,
}));
Leaderboard Metrics
Each entry includes:
Rank : Position in the leaderboard (1 = most mentions)
Name : Brand or competitor name
Mentions : Total mention count across all AI engines
Share of Voice : Percentage of total mentions
Visibility Gap : Difference from your brand’s SOV
Managing Competitors
List Competitors
GET /api/brands/:brandId/competitors
Returns all competitors for a brand, ordered by creation date:
// From: apps/api/src/services/competitor.service.ts:11-35
const competitorList = await db
. select ()
. from ( competitors )
. where ( eq ( competitors . brandId , brandId ))
. orderBy ( desc ( competitors . createdAt ));
Remove Competitor
DELETE /api/brands/:brandId/competitors/:competitorId
Removing a competitor will delete all historical comparison data. This action cannot be undone.
// From: apps/api/src/controllers/competitor.controller.ts:69-83
export async function removeCompetitor (
req : Request ,
res : Response ,
next : NextFunction
) : Promise < void > {
const { brandId , competitorId } = req . params ;
await competitorService . removeCompetitor ( brandId , competitorId , req . user ! . id );
res . json ({ success: true });
}
Duplicate Detection
The system prevents adding duplicate competitors:
// From: apps/api/src/services/competitor.service.ts:50-64
const existing = await db
. select ()
. from ( competitors )
. where (
and (
eq ( competitors . brandId , brandId ),
eq ( competitors . websiteUrl , input . websiteUrl )
)
)
. limit ( 1 );
if ( existing . length ) {
throw new Error ( 'This competitor URL already exists for this brand' );
}
Use Cases
Track your position relative to competitors:
Monitor rank changes over time
Identify when competitors gain/lose visibility
Adjust strategy based on competitive landscape
Inform content decisions:
Find topics where competitors dominate
Identify gaps where you can improve
Create content that outperforms competitor mentions
Understand competitor strengths:
See which AI engines favor competitors
Analyze sentiment of competitor mentions
Track new competitors entering your space
Grow your AI search presence:
Set SOV targets vs competitors
Track progress toward visibility goals
Measure ROI of content optimization efforts
Best Practices
Choose the Right Competitors
Direct Competitors : Companies offering similar products/services
Market Leaders : Industry giants users might compare you to
Rising Challengers : Emerging competitors gaining traction
Monitor Regularly
Check comparison data weekly
Set up alerts for new competitor mentions (see Alerts & Notifications )
Review sentiment trends monthly
Act on Insights
Identify Gaps
Find queries where competitors outrank you
Create Better Content
Develop content that addresses those queries more comprehensively
Track Improvement
Monitor SOV changes after publishing new content
API Reference
Add Competitor
POST /api/brands/:brandId/competitors
Content-Type : application/json
{
"name" : "Competitor Name" ,
"website_url" : "https://competitor.com"
}
Get Competitor Comparison
GET /api/brands/:brandId/competitors/comparison
Returns:
Your brand’s metrics
All competitors with share of voice
Leaderboard ranking
List Competitors
GET /api/brands/:brandId/competitors
Remove Competitor
DELETE /api/brands/:brandId/competitors/:competitorId
Next Steps
Brand Monitoring Track your brand’s visibility metrics
Alerts Get notified when competitors gain visibility
AI Engines Learn which engines track competitors
Content Scoring Optimize content to outrank competitors