competitive-landscape
Map SEO market leaders, winning content themes, keyword coverage, backlinks, and strategic gaps.
By every-app · 4,238 installs
npx skills add every-app/open-seo --skill competitive-landscape
Source repository · Upstream listing
OpenSEO Competitive Landscape
Goal
Answer: "Who is winning this SEO market, what content is working for them, and where are the openings?"
Use this when the user wants a market level view across several competitors. For a deep dive on one domain, use competitor analysis .
Required inputs
projectId
Topic, seed keywords, market/category, or user's domain
Optional known competitors
Optional location/language
Project context
The project context tools are free and shared with the app and other agents.
1. Call get project context first and ground the market read in it — the saved competitors are the starting roster, and the business and positioning decide who counts as a competitor.
2. This skill needs competitors. If none are saved, run a minimal inline setup: ask the user who they compete with, or infer a shortlist from find serp competitors and the site and confirm it, write it back with update project context ( addCompetitors ), then continue the landscape work. Never front load the full interview; suggest seo project setup at the end for the rest.
3. Before spending credits, check the research log. If the same research ran within the last 30 days, reuse that result and say so instead of re buying it.
4. On finish, write back what is durable with update project context — every confirmed competitor via addCompetitors with a short note on why they matter, plus removeCompetitors for entries you added that turned out irrelevant (leave rows the user added alone) — and append a research log entry: { appendResearchLog: { summary: "Competitive landscape: <market/query set . Verdict: <conclusion " } } .
Deliver as a report
Deliver through the seo report skill, saving with skill: "competitive landscape" . If that skill is not available, say so and stop before writing HTML.
OpenSEO MCP tools
research keywords : discover representative market queries.
get keyword metrics : validate known query sets with volume, difficulty, intent, and trends.
get serp results : identify recurring ranking domains across target queries.
find serp competitors : compare domains competing across supplied keywords; use this before manual SERP counting when a keyword set is available.
get domain overview : size organic footprint for candidate leaders.
get search console performance : when the user's own domain is in the comparison and Search Console is connected, anchor their position with first party clicks/impressions/CTR rather than third party estimates.
get ranked keywords : find exact ranking keywords, URLs, ranks, intents, and SERP result types for leaders.
get backlinks overview : compare backlink/referring domain strength where relevant.
search local businesses , get local serp results , and get google business questions : use for local SEO markets where proximity, Maps rankings, business categories, reviews, or Google Q&A affect who is winning.
Workflow
1. Define the market query set:
Use provided keywords, or call research keywords to build 5 10 representative queries.
Include mixed intent: informational, commercial, comparison, and tool/software terms when applicable.
For local SEO, include neighborhood/city/service area queries and identify the priority locations or coordinates.
2. If the query set is already known, use get keyword metrics to validate relative demand and difficulty and find serp competitors to identify recurring domains at scale.
3. For local SEO, call search local businesses and get local serp results for the highest priority location(s) before synthesizing winners. Use get serp results as a complement for organic pages, not as the only local evidence.
4. Call get serp results for representative queries when live SERP composition, ranking URLs, or SERP features need inspection. Send at most 10 queries per call.
5. Identify recurring domains and group them by type:
Direct product competitors
Publishers/media
Marketplaces/directories
Communities/forums
Documentation/resources
6. For the strongest recurring domains, call get domain overview ; default to the top 3 5 domains before expanding.
7. For direct competitors and relevant publishers, call get ranked keywords .
8. Use get backlinks overview when backlink authority appears important or the user asks why a domain is winning. Backlinks may be unavailable if the account has not enabled that data; continue with SERP/domain evidence if it fails.
9. Synthesize patterns: content types, themes, SERP formats, local pack signals, authority advantages, and underserved angles.
Output format
h1 : the market or category.
If a report template applies (see seo report ), its sections and tone replace this list.
Sections in this order:
1. The market read — one or two opening sentences naming the leaders, the most winnable area, and the biggest barrier.
2. Who is winning — a table of domain, type, organic footprint, winning themes, and the gap. Label domain types explicitly.
3. Why they win — one finding per pattern, the Fix pointing at what the user should do instead.
4. Gaps and openings — a table of theme, demand, and who currently owns it, plus a bar chart when a handful of themes carry the demand.
5. What to do next — an ordered list ending in the next workflow to run: competitor analysis, keyword clustering, or a content brief.
6. How this report was made — opens with the skill link line from seo report , pointing at https://openseo.so/docs/skills/competitive landscape ("OpenSEO Competitive Landscape skill"), then the query set used, and a note calling the read directional when the query set was small.
Guardrails
Distinguish SEO competitors from business competitors.
Do not overstate exact traffic when OpenSEO returns estimates.
If using a small query set, call the result directional.
Do not assume a publisher is a product competitor; label domain types clearly.
For local markets, distinguish organic page winners from Maps/local pack winners.