mcpField
C
competitor-analysis

competitor-analysis

github.com/itallstartedwithaidea营销与增长4496 次安装29 周前更新
代码仓库

关于 competitor-analysis

competitor-analysis 是将 Google Ads 竞价数据转化为竞争情报的 Agent 技能。它持续整理竞争对手画像、估算市场份额,并识别曝光度和竞争行为的变化。

主要功能

  1. 01分析竞价洞察数据
  2. 02持续构建竞争对手画像
  3. 03检测竞争趋势变化
  4. 04估算市场份额
  5. 05分析广告文案策略
  6. 06识别曝光机会

适用场景

  1. 01调查 CPC 上升和竞争压力
  2. 02跟踪竞争对手重叠率与排名趋势
  3. 03寻找有份额增长潜力的关键词
  4. 04为广告文案和预算决策提供依据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/itallstartedwithaidea/agent-skills --skill competitor-analysis

安装后在 Claude Code 中输入/competitor-analysis确认已加载。

详细介绍

竞争对手分析

属于 Agent Skills™,由 googleadsagent.ai™ 提供

描述

竞争对手分析技能将 Google Ads 竞价数据转化为可执行的竞争情报。通过系统地分析竞价洞察、广告预览结果和竞争指标,该技能可以描绘出每个广告系列和关键字的竞争格局。它会识别你正在与哪些对手竞争、他们的广告与你的广告同时出现的频率,以及你在争夺曝光度的过程中是胜是负。

该技能不止于原始竞价洞察数据,还会建立竞争对手档案,追踪他们随时间的行为变化。它可以检测竞争对手何时加大攻势(重叠率和排名高于率上升),识别季节性竞争模式,并根据曝光份额趋势估算竞争对手的预算和出价策略。结合广告文案分析后,还能揭示竞争对手的营销信息策略、优惠结构和独特卖点。

市场份额估算将分析结果融为一体。通过将你的曝光份额、点击份额和转化份额与竞价洞察数据相关联,该技能可以估算你的市场份额,并识别最有可能提升份额的具体竞争对手和关键字。这有助于制定战略决策,确定在哪些领域积极竞争、在哪些领域守住阵地,以及在哪些领域让出空间以转向利润更高的细分市场。

适用场景

  • 用户询问“竞争对手分析”或“竞争格局”
  • 用户提到“竞价洞察”或“我在和谁竞争”
  • 用户想知道“为什么我的 CPC 在上涨”(竞争压力)
  • 用户询问“曝光份额”或“市场份额”
  • 用户提到“竞争对手广告”或“竞争对手在做什么”
  • 用户想了解“竞争定位”或“竞争策略”
  • 用户询问“重叠率”或“超越份额”
  • 用户提到“曝光份额正在被竞争对手抢走”

架构

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]

实现

竞价洞察提取和竞争对手画像:

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;
}

市场份额估算和战略建议:

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;
}

与 Buddy™ Agent 集成

竞争对手分析作为持续情报层,在 Buddy™ Agent 中运行。该平台每天提取竞价洞察数据,建立纵向竞争数据库,揭示特定时间点快照中无法发现的趋势。Buddy™ 可以检测竞争格局变化——新进入者出现在多个广告系列中、现有竞争对手加大攻势,或竞争对手退出某个细分市场。

当 Buddy™ 检测到竞争威胁(排名高于率上升、超越份额下降)时,会触发主动通知,并提供具体的防御建议。相反,当它检测到竞争对手撤出(重叠率下降)时,会建议重新分配预算,以获取空出的曝光份额。

该技能为预算优化技能提供信息(竞争压力增大时,需要加强预算防御),为广告文案生成技能提供信息(竞争对手营销信息的空白有助于制定文案策略),并为关键字研究技能提供信息(竞争对手覆盖空白揭示了拓展机会)。

最佳实践

  1. 从广告系列和关键字两个层面查看拍卖洞察,了解不同的竞争视角
  2. 每月跟踪竞争对手趋势,在其影响效果之前发现战略转变
  3. 将竞争应对重点放在质量得分具有优势的关键字上
  4. 不要在所有方面都卷入竞价战——根据利润率和转化数据选择要争取的领域
  5. 分析竞争对手的广告文案和着陆页,寻找差异化机会
  6. 密切关注新进入者——新竞争对手初期的激进举措往往预示着持续投入
  7. 使用因排名(而非预算)导致的展示次数份额损失,区分竞争问题和预算问题
  8. 为排名前 3–5 的竞争对手制定应对方案,以便快速响应
  9. 在预算规划周期中考虑季节性竞争模式
  10. 将拍卖洞察与第三方数据(SEMrush、SpyFu)结合,全面了解竞争态势

平台兼容性

平台支持情况
Claude Code✅
Cursor✅
Codex✅
Gemini✅

相关技能

  • 关键字研究 - 竞争对手关键字挖掘有助于发现覆盖缺口和拓展机会
  • 广告文案生成 - 对竞争对手营销信息的分析有助于制定广告文案差异化策略
  • 预算优化 - 竞争压力数据可指导预算防御和重新分配决策
  • 主动情报 - 通过自主网页搜索获取实时竞争情报

关键词

竞争对手分析、拍卖洞察、展示次数份额、重叠率、排名高于率、超越份额、竞争情报、市场份额、Google Ads 竞争、竞争策略、竞争对手广告、竞争格局、搜索竞争、竞价竞争、竞争监测


© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License

评论

支持 Markdown