mcpField
C
competitor-analysis

competitor-analysis

github.com/itallstartedwithaideaマーケティング・グロース4496 回インストール29 週間前に更新
リポジトリ

competitor-analysis について

competitor-analysisは、Google Adsのオークションデータを競合インテリジェンスとして分析するエージェントスキルです。競合の推移をプロファイルし、市場シェアを推定して、露出や競争状況の変化を捉えます。

主な機能

  1. 01オークション分析データの解析
  2. 02競合プロファイルの継続的な作成
  3. 03競争トレンドの検出
  4. 04市場シェアの推定
  5. 05広告メッセージの分析
  6. 06露出機会の特定

活用シーン

  1. 01CPC上昇と競争圧力の調査
  2. 02競合との重複率や掲載順位の推移の追跡
  3. 03シェア拡大の余地があるキーワードの発見
  4. 04広告文や予算の判断材料の作成

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/competitor-analysisを入力して読み込まれたか確認します。

詳細

競合分析

googleadsagent.ai™ による Agent Skills™ の一部です

説明

競合分析スキルは、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

コメント