competitor-analysis — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited competitor-analysis (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Part of Agent Skills™ by googleadsagent.ai™
The Competitor Analysis skill transforms Google Ads auction data into actionable competitive intelligence. By systematically analyzing auction insights, ad preview results, and competitive metrics, this skill maps the competitive landscape across every campaign and keyword. It identifies who you're competing against, how often they appear alongside your ads, and where you're winning or losing the visibility battle.
The skill goes beyond raw auction insights data by building competitor profiles that track behavior over time. It detects when competitors increase aggression (rising overlap rates and position-above rates), identifies seasonal competitive patterns, and estimates competitor budget and bidding strategies based on impression share trends. When combined with ad copy analysis, it reveals competitor messaging strategies, offer structures, and unique selling propositions.
Market share estimation ties the analysis together. By correlating your impression share, click share, and conversion share against auction insights data, the skill calculates your estimated market share and identifies the specific competitors and keywords where share gains are most achievable. This powers strategic decisions about where to compete aggressively, where to defend position, and where to cede ground in favor of more profitable segments.
flowchart TD
A[Google Ads API] --> B[Auction Insights Extraction]
B --> C[Impression Share Data]
B --> D[Overlap Rate Data]
B --> E[Position Above Rate]
B --> F[Outranking Share]
B --> G[Top of Page Rate]
C --> H[Competitor Profiler]
D --> H
E --> H
F --> H
G --> H
I[Ad Preview & SERP Data] --> J[Competitor Ad Analyzer]
J --> J1[Headline Patterns]
J --> J2[Offer Structures]
J --> J3[Extension Usage]
J --> J4[Landing Page Analysis]
H --> K[Competitive Landscape Model]
J1 --> K
J2 --> K
J3 --> K
J4 --> K
K --> L[Market Share Estimation]
K --> M[Trend Analysis]
K --> N[Threat Detection]
L --> O[Strategic Recommendations]
M --> O
N --> O
O --> P[Defend Positions]
O --> Q[Attack Opportunities]
O --> R[Concede & Redirect]Auction insights extraction and competitor profiling:
async function analyzeCompetitors(customerId, config) {
const { granularity = 'campaign', lookbackDays = 90 } = config;
const auctionInsights = await getAuctionInsights(customerId, granularity, lookbackDays);
const competitors = buildCompetitorProfiles(auctionInsights);
return {
competitors: competitors.sort((a, b) => b.threatScore - a.threatScore),
marketShare: estimateMarketShare(auctionInsights),
trends: analyzeTrends(auctionInsights, lookbackDays),
opportunities: identifyOpportunities(competitors),
threats: identifyThreats(competitors)
};
}
function buildCompetitorProfiles(auctionInsights) {
const competitors = {};
for (const row of auctionInsights) {
if (row.domain === 'You') continue;
if (!competitors[row.domain]) {
competitors[row.domain] = {
domain: row.domain,
impressionShare: [],
overlapRate: [],
positionAboveRate: [],
outrankingShare: [],
topOfPageRate: [],
campaigns: new Set()
};
}
const comp = competitors[row.domain];
comp.impressionShare.push(row.impressionShare);
comp.overlapRate.push(row.overlapRate);
comp.positionAboveRate.push(row.positionAboveRate);
comp.outrankingShare.push(row.outrankingShare);
comp.topOfPageRate.push(row.topOfPageRate);
comp.campaigns.add(row.campaignName);
}
return Object.values(competitors).map(comp => ({
...comp,
avgImpressionShare: average(comp.impressionShare),
avgOverlapRate: average(comp.overlapRate),
avgPositionAboveRate: average(comp.positionAboveRate),
avgOutrankingShare: average(comp.outrankingShare),
threatScore: calculateThreatScore(comp),
campaigns: [...comp.campaigns]
}));
}
function calculateThreatScore(competitor) {
const overlapWeight = 0.3;
const posAboveWeight = 0.3;
const outrankWeight = 0.25;
const isWeight = 0.15;
return (
average(competitor.overlapRate) * overlapWeight +
average(competitor.positionAboveRate) * posAboveWeight +
average(competitor.outrankingShare) * outrankWeight +
average(competitor.impressionShare) * isWeight
) * 100;
}Market share estimation and strategic recommendations:
function estimateMarketShare(auctionInsights) {
const yourData = auctionInsights.filter(r => r.domain === 'You');
const avgImpressionShare = average(yourData.map(r => r.impressionShare));
const avgTopOfPage = average(yourData.map(r => r.topOfPageRate));
return {
estimatedSearchMarketShare: avgImpressionShare,
topOfPagePresence: avgTopOfPage,
absoluteTopPresence: average(yourData.map(r => r.absoluteTopOfPageRate)),
shareGrowthOpportunity: 1 - avgImpressionShare,
primaryLossReason: avgImpressionShare < 0.5
? determineLossReason(yourData)
: 'market_leader_position'
};
}
function generateCompetitiveStrategy(competitors, marketShare) {
const strategies = [];
for (const comp of competitors) {
if (comp.avgPositionAboveRate > 0.6 && comp.avgOverlapRate > 0.8) {
strategies.push({
competitor: comp.domain,
strategy: 'defend',
actions: [
'Increase bids on overlapping keywords',
'Improve ad copy to differentiate messaging',
'Add competitor name as negative keyword if brand bidding detected',
'Strengthen landing page experience for shared keywords'
]
});
} else if (comp.avgImpressionShare < 0.3 && comp.avgOverlapRate > 0.5) {
strategies.push({
competitor: comp.domain,
strategy: 'attack',
actions: [
'Increase budget on campaigns where this competitor appears',
'Target their branded terms if policy-compliant',
'Analyze their ad copy for messaging gaps you can exploit',
'Extend coverage to keywords they rank for but you don\'t'
]
});
}
}
return strategies;
}Competitor Analysis runs as a continuous intelligence layer within Buddy™ Agent. The platform pulls auction insights data daily, building a longitudinal competitive database that reveals trends invisible in point-in-time snapshots. Buddy™ detects competitive shifts — a new entrant appearing across multiple campaigns, an existing competitor increasing aggression, or a competitor withdrawing from a segment.
When Buddy™ detects competitive threats (rising position-above rates, declining outranking share), it triggers proactive notifications with specific defensive recommendations. Conversely, when it detects competitor withdrawal (declining overlap rates), it recommends budget reallocation to capture the vacated impression share.
The skill feeds into the Budget Optimization skill (competitive pressure increases justify budget defense), the Ad Copy Generation skill (competitor messaging gaps inform copy strategy), and the Keyword Research skill (competitor coverage gaps reveal expansion opportunities).
| Platform | Supported |
|---|---|
| Claude Code | ✅ |
| Cursor | ✅ |
| Codex | ✅ |
| Gemini | ✅ |
competitor analysis, auction insights, impression share, overlap rate, position above rate, outranking share, competitive intelligence, market share, google ads competition, competitive strategy, competitor ads, competitive landscape, search competition, bid competition, competitive monitoring
© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.