Systems Lab

Agent skill

seo-sea-keyword-gap-analyzer

This skill should be used when the user asks to \"compare organic and paid keywords\", \"find SEO SEA cannibalization\", \"stop bidding on organic rankings\", mentions \"keyword overlap between GSC and Google Ads\", \"paid-only keyword dependencies\", or \"budget savings from organic\".

activeSelf-containedInstructions only1,123 words

Filed under Content and SEO.

From Ad-Superpowers/ad-superpowers-plugin · 120 skills · 5 · pushed 2026-09-10

What it does when it runs

This skill should be used when the user asks to \"compare organic and paid keywords\", \"find SEO SEA cannibalization\", \"stop bidding on organic rankings\", mentions \"keyword overlap between GSC and Google Ads\", \"paid-only keyword dependencies\", or \"budget savings from organic\". Do NOT use for: general GSC performance analysis (use gsc-performance-analyzer), Google Ads campaign optimization (use Google Ads platform skills), or competitor keyword research (use competitor-analysis-toolkit).

Read from the skill and the 0 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
None found.
Hosts it reaches
No third-party host appears in the skill or its bundled files.
Tool permissions it declares
No allowed-tools in the frontmatter. It only issues instructions, so there is nothing to bound.
Actions present in the files
None. Instructions only.

Ask about seo-sea-keyword-gap-analyzer

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/Ad-Superpowers/ad-superpowers-plugin.git /tmp/ad-superpowers-plugin
git -C /tmp/ad-superpowers-plugin sparse-checkout set "plugin/skills/seo-sea-keyword-gap-analyzer"
mkdir -p ~/.claude/skills/seo-sea-keyword-gap-analyzer
cp -R "/tmp/ad-superpowers-plugin/plugin/skills/seo-sea-keyword-gap-analyzer/." ~/.claude/skills/seo-sea-keyword-gap-analyzer/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

Or take the whole library

This repo ships a .claude-plugin manifest, so Claude Code can install all 120 skills at once. Plugin skills are invoked as /<plugin>:<skill>, so they never collide with your own.

/plugin marketplace add Ad-Superpowers/ad-superpowers-plugin
/plugin

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Reproduced in full from Ad-Superpowers/ad-superpowers-plugin/blob/9b6385d2d2d228e4dac096a1d6bc5715c04fa736/plugin/skills/seo-sea-keyword-gap-analyzer/SKILL.md, which is licensed MIT (repository). 1,123 words, 22 headings.

SEO vs SEA Keyword Gap Analyzer

Purpose

Help agencies and advertisers identify where organic and paid search overlap, where gaps exist, and how to optimize budget allocation between SEO and SEA. This analysis typically saves 10-30% of wasted ad spend by identifying keywords where organic rankings make paid ads unnecessary.

When to Use This Skill

Invoke when user mentions:

  • Gap analysis: "Compare my organic and paid keywords"
  • Cannibalization: "Am I paying for clicks I'd get for free?"
  • Budget optimization: "Where can I save on Google Ads?"
  • Content opportunities: "What keywords convert via ads but have no content?"
  • SEO vs SEA: "Should I bid on keywords where I rank #1?"
  • Organic/paid overlap: "Which keywords appear in both GSC and Google Ads?"

Required Tools

ToolPurpose
gsc_search_analyticsOrganic keyword data (queries, clicks, impressions, CTR, position)
google_ads_run_gaqlPaid keyword data via GAQL query (clicks, impressions, cost, conversions)

Part 1: Data Collection Framework

Step 1: Organic Data (GSC)

gsc_search_analytics(
    site_url="<property>",
    dimensions=["query"],
    days=28,
    row_limit=5000
)

Key fields: query, clicks, impressions, ctr, position

Step 2: Paid Data (Google Ads)

google_ads_run_gaql(
    customer_id="<account>",
    query="SELECT campaign.name, ad_group.name,
        ad_group_criterion.keyword.text,
        ad_group_criterion.keyword.match_type,
        metrics.impressions, metrics.clicks, metrics.ctr,
        metrics.average_cpc, metrics.cost_micros,
        metrics.conversions
    FROM keyword_view
    WHERE segments.date DURING LAST_30_DAYS
    ORDER BY metrics.impressions DESC LIMIT 500"
)

Key fields: keyword.text, clicks, impressions, cost_micros (÷ 1,000,000), conversions


Part 2: Four-Quadrant Gap Classification

The SEO-SEA Matrix

                        ORGANIC STRONG              ORGANIC WEAK
                     (Position ≤ 5)              (Position > 10 or absent)
                 ┌─────────────────────────┬──────────────────────────┐
  PAID ACTIVE    │  Q1: CANNIBALIZATION     │  Q2: PAID-ONLY           │
  (Running ads)  │  → Test pausing ads      │  → Content opportunity   │
                 │  → Potential savings      │  → Build organic content │
                 │  Priority: HIGH           │  Priority: MEDIUM        │
                 ├─────────────────────────┼──────────────────────────┤
  PAID INACTIVE  │  Q3: ORGANIC WINNERS     │  Q4: BLIND SPOTS         │
  (No ads)       │  → No action needed      │  → Assess search volume  │
                 │  → Monitor rankings      │  → Decide: SEO or SEA?   │
                 │  Priority: LOW            │  Priority: VARIES        │
                 └─────────────────────────┴──────────────────────────┘

Classification Rules

QuadrantOrganic PositionPaid StatusAction
Q1: Cannibalization≤ 5Active + spendingTest pausing ads, monitor organic
Q2: Paid-Only> 10 or absentActive + spendingCreate content to reduce CPC dependency
Q3: Organic Winners≤ 5Not biddingNo ads needed — free traffic
Q4: Blind Spots> 10 or absentNot biddingEvaluate: worth SEO or SEA investment?

Position Thresholds

CategoryPosition RangeInterpretation
Strong organic1-3Dominant — ads rarely needed
Good organic4-5Solid — test reducing ads
Striking distance6-10Invest in SEO, keep ads
Weak organic11-20Ads needed, plan content
Not ranking> 20 or absentFully dependent on ads

Part 3: Cannibalization Analysis (Q1)

When to Pause Ads

Pause ads on keywords where ALL of these are true:

  1. Organic position ≤ 3
  2. Organic CTR > 20%
  3. The keyword is not a branded competitor term
  4. Not in a highly competitive auction (CPC < €2 or below industry average)

Incremental Lift Test

Before pausing, estimate incremental value:

  • Rule of thumb: When organic is #1, paid ads add 10-20% incremental clicks
  • High-competition verticals: Paid may add 30-50% incremental
  • Branded terms: Organic captures 80-90% without ads

Savings Estimation

potential_savings = sum(
    keyword.monthly_cost
    for keyword in q1_keywords
    if keyword.organic_position <= 3
    and keyword.organic_ctr > 0.20
    and keyword.is_branded == False
)

Part 4: Content Gap Opportunities (Q2)

Prioritization Framework

Score each paid-only keyword:

FactorWeightScoring
Monthly conversions30%High (>10): 3, Medium (3-10): 2, Low (<3): 1
CPC25%High (>€3): 3, Medium (€1-3): 2, Low (<€1): 1
Monthly cost25%High (>€500): 3, Medium (€100-500): 2, Low (<€100): 1
Content feasibility20%Easy (informational): 3, Medium (commercial): 2, Hard (transactional): 1

Content ROI Estimate

monthly_organic_potential = keyword.paid_clicks × 0.6  # Assume 60% capture rate
time_to_rank = 3-6 months (informational) / 6-12 months (commercial)
content_cost = €200-500 per article
break_even_months = content_cost / (keyword.cpc × monthly_organic_potential)

Keywords with break-even < 6 months are high-priority content opportunities.


Part 5: Output Format

================================================================================
                   SEO vs SEA KEYWORD GAP ANALYSIS
                   Property: [site_url]
                   Google Ads: [customer_id]
                   Period: Last 28 days
================================================================================

EXECUTIVE SUMMARY
─────────────────
Total organic keywords analyzed: [X]
Total paid keywords analyzed: [Y]
Overlap: [Z] keywords ([%])

POTENTIAL MONTHLY SAVINGS: €[amount]
CONTENT OPPORTUNITIES: [N] keywords worth €[monthly CPC] in ads

QUADRANT BREAKDOWN:
| Quadrant | Keywords | Monthly Spend | Action |
|----------|----------|--------------|--------|
| Q1: Cannibalization | [N] | €[X] | Test pausing |
| Q2: Paid-Only | [N] | €[X] | Create content |
| Q3: Organic Winners | [N] | €0 | Monitor |
| Q4: Blind Spots | [N] | €0 | Evaluate |

─────────────────────────────────────────────────────────
Q1: CANNIBALIZATION — Test Pausing These Ads
─────────────────────────────────────────────────────────
| Keyword | Org Pos | Org CTR | Paid Cost/mo | Paid Conv | Action |
|---------|---------|---------|-------------|-----------|--------|
| [kw]    | 1.2     | 28%     | €450        | 12        | Pause  |
| [kw]    | 2.5     | 22%     | €280        | 8         | Test   |

─────────────────────────────────────────────────────────
Q2: CONTENT OPPORTUNITIES — Write Content for These
─────────────────────────────────────────────────────────
| Keyword | CPC | Paid Cost/mo | Conversions | Content Priority |
|---------|-----|-------------|-------------|-----------------|
| [kw]    | €4.20 | €890      | 22          | HIGH            |
| [kw]    | €2.80 | €560      | 15          | HIGH            |

─────────────────────────────────────────────────────────
RECOMMENDATIONS
─────────────────────────────────────────────────────────
1. IMMEDIATE: Pause ads on [N] cannibalized keywords → Save ~€[X]/month
2. SHORT-TERM: Create content for top [N] paid-only keywords → Reduce CPC dependency
3. ONGOING: Monitor Q3 organic winners for ranking drops

Part 6: Industry Benchmarks

Expected Organic vs Paid Distribution

Industry% Organic Traffic% Paid TrafficOverlap Rate
E-commerce35-45%55-65%20-30%
SaaS/B2B50-65%35-50%15-25%
Local Services40-55%45-60%25-35%
Finance30-40%60-70%30-40%
Health45-60%40-55%20-30%
Education55-70%30-45%10-20%

Healthy Cannibalization Rates

  • < 15% overlap: Good balance — organic and paid target different terms
  • 15-30% overlap: Normal — review highest-spend overlaps
  • > 30% overlap: High — significant savings opportunity

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what seo-sea-keyword-gap-analyzer does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.