competitor-gap
Find keywords a competitor ranks for that the user's site doesn't — the content gap, prioritized by volume and winnability. Use when asked "what does competitor.com rank for", "keyword gap vs X", "steal competitor keywords", or "why do they outrank us".
Install
npx skills add https://github.com/Ryze-AI-Adgent/open-seo-mcp-skills/tree/main/skills/competitor-gap
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install ryze-ai-adgent-open-seo-mcp-skills@llmmart
git clone https://github.com/Ryze-AI-Adgent/open-seo-mcp-skills.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole ryze-ai-adgent/open-seo-mcp-skills collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Competitor Gap
Requires
The free Ryze MCP connector (https://connector.get-ryze.ai/mcp). Claude Code: claude mcp add ryze --transport http https://connector.get-ryze.ai/mcp. claude.ai / Desktop / Cursor: add it as a custom connector with the same URL. Setup: https://www.get-ryze.ai/how-to-connect-claude-to-google-meta-ads-mcp
Their rankings are estimates (DataForSEO), yours are real (GSC). Diff them.
Workflow
- Competitor's keywords. Via the workspace's DataForSEO tools — Labs
ranked_keywordsfor the competitor domain (request shape:native__get_provider_docs, providerdataforseo). Pull top ~500 by volume. If DataForSEO isn't exposed in this workspace, check for connectedahrefs/semrushproviders and use their organic-keywords endpoint instead; if none, stop and say which connection is missing. - Competitor overview. Labs
domain_rank_overview— their estimated organic traffic and keyword count, for context. - Your keywords.
google_search_console__runRawSearchAnalytics, dimension["query"], last 90 days, high rowLimit — the full set of queries the user's site gets impressions for. - Diff into three buckets:
- Gap — competitor ranks top 20, you have zero impressions → new content needed
- Behind — you both rank but they're ≥ 5 spots ahead → improve existing page
- Ahead — you outrank them (report briefly; it's the moat)
- Prioritize the Gap and Behind buckets by volume × relevance to the user's product. Drop branded competitor terms unless the user wants comparison pages — then list them separately as "vs / alternative" page candidates.
Output
Verdict (how big the gap is, in keywords and estimated traffic), then: Gap table (keyword, their position, volume, suggested page), Behind table (keyword, their pos, your pos, your page, fix), and a top-10 action list. Note explicitly which numbers are estimates (theirs) vs real (yours).
Files (open-seo-mcp-skills)
-
SKILL.md 2.2 KB
--- name: competitor-gap description: Find keywords a competitor ranks for that the user's site doesn't — the content gap, prioritized by volume and winnability. Use when asked "what does competitor.com rank for", "keyword gap vs X", "steal competitor keywords", or "why do they outrank us". --- # Competitor Gap ## Requires The free Ryze MCP connector (`https://connector.get-ryze.ai/mcp`). Claude Code: `claude mcp add ryze --transport http https://connector.get-ryze.ai/mcp`. claude.ai / Desktop / Cursor: add it as a custom connector with the same URL. Setup: https://www.get-ryze.ai/how-to-connect-claude-to-google-meta-ads-mcp Their rankings are estimates (DataForSEO), yours are real (GSC). Diff them. ## Workflow 1. **Competitor's keywords.** Via the workspace's DataForSEO tools — Labs `ranked_keywords` for the competitor domain (request shape: `native__get_provider_docs`, provider `dataforseo`). Pull top ~500 by volume. If DataForSEO isn't exposed in this workspace, check for connected `ahrefs`/`semrush` providers and use their organic-keywords endpoint instead; if none, stop and say which connection is missing. 2. **Competitor overview.** Labs `domain_rank_overview` — their estimated organic traffic and keyword count, for context. 3. **Your keywords.** `google_search_console__runRawSearchAnalytics`, dimension `["query"]`, last 90 days, high rowLimit — the full set of queries the user's site gets impressions for. 4. **Diff into three buckets:** - **Gap** — competitor ranks top 20, you have zero impressions → new content needed - **Behind** — you both rank but they're ≥ 5 spots ahead → improve existing page - **Ahead** — you outrank them (report briefly; it's the moat) 5. **Prioritize** the Gap and Behind buckets by volume × relevance to the user's product. Drop branded competitor terms unless the user wants comparison pages — then list them separately as "vs / alternative" page candidates. ## Output Verdict (how big the gap is, in keywords and estimated traffic), then: Gap table (keyword, their position, volume, suggested page), Behind table (keyword, their pos, your pos, your page, fix), and a top-10 action list. Note explicitly which numbers are estimates (theirs) vs real (yours).
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.