OpenSEO Competitor Analysis
Goal
Analyze one competitor deeply enough to decide what to learn from, avoid, counter-position against, or outrank.
Use this for a named competitor. For identifying the market leaders first, use competitive-landscape.
Required inputs
projectId
- Competitor domain
- User's domain when comparison is requested
- Optional topic/category/location/language
Project context
The project-context tools are free and shared with the app and other agents.
- Call
get_project_context first and ground the analysis in it — the saved competitors say whether this domain is already known and what was concluded about it before.
- This skill needs competitors. If none are saved, run a minimal inline setup: save the competitor being analyzed, and ask the user (or infer from
find_serp_competitors and confirm) whether there are others, write them back with update_project_context (addCompetitors), then continue the analysis. Never front-load the full interview; suggest seo-project-setup at the end for the rest.
- 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.
- On finish, write back what is durable with
update_project_context — an addCompetitors upsert for this domain with a short note on its strengths and where it is vulnerable — and append a research log entry: { appendResearchLog: { summary: "Competitor analysis: <domain>. Verdict: <conclusion>" } }.
OpenSEO MCP tools
get_domain_overview: baseline organic traffic and keyword count.
get_search_console_performance: when comparing to the user's own domain and Search Console is connected, use it as the first-party baseline (real clicks/impressions/CTR/position) instead of estimating the user's own performance from third-party data.
get_ranked_keywords: exact keyword, URL, rank, intent, traffic, CPC, and SERP-type rows for the competitor domain or page.
get_backlinks_overview: backlink/referring-domain profile.
find_serp_competitors: validate whether the named competitor is a real search competitor across the target keyword set.
search_local_businesses, get_local_serp_results, and get_google_business_questions: use for local SEO competitors when Maps/local-pack visibility, nearby businesses, categories, or Google Q&A matter.
get_serp_results: validate direct head-to-head SERPs for important keywords.
research_keywords: expand gaps or category terms when needed.
Workflow
- Call
get_domain_overview for the competitor, passing provided location/language when supported.
- If comparing to the user, call
get_domain_overview for the user's domain too — and if Search Console is connected, get_search_console_performance for the user's real baseline.
- Call
get_ranked_keywords for the competitor. Use filters like maxRank, minSearchVolume, excludeBrandTerms, and resultTypes to keep rows relevant.
- If comparing to the user, call
get_ranked_keywords for the user's domain/page too, or use get_serp_results for the shared terms when a lighter check is enough.
- For local SEO, use
search_local_businesses and get_local_serp_results around the relevant business location(s) before drawing local-pack conclusions. Add get_google_business_questions only when Q&A evidence matters.
- Use
find_serp_competitors when the competitor was supplied by the user but its search overlap is unclear.
- Group competitor keywords into themes:
- Product/category terms
- Alternatives/comparisons
- Templates/tools/calculators
- Educational guides
- Branded demand
- Local/neighborhood terms when relevant
- Call
get_backlinks_overview for the competitor, especially if authority appears to explain rankings. Continue without backlink evidence if it is unavailable.
- Use
get_serp_results for important shared or target keywords to compare positioning, passing provided location/language when supported.
- Produce an actionable plan:
- What they are doing well
- Where they are vulnerable
- Which pages/keywords to pursue
- What to avoid copying
Output format
Start with:
- Competitor snapshot
- Biggest lesson
- Best opportunity to beat them
Then include:
| Area |
Competitor pattern |
Evidence |
OpenSEO opportunity |
Include sections for:
- Top keyword themes
- Content/page types working for them
- Backlink/authority notes
- Head-to-head SERP observations
- Priority actions for the user
Guardrails
- Do not treat all competitor keywords as desirable. Filter for business fit.
- Separate evidence from inference.
- Do not infer competitor page/content-type patterns from keyword rows alone; use SERP or web evidence for page-level claims.
- For local SEO, do not infer Maps/local-pack strength from national organic domain metrics alone; use local business and local SERP tools when the location is known or reasonably discoverable.
- Do not recommend copying content; recommend a stronger angle or better answer to the same intent.
- If the user's domain is unavailable, frame the analysis as competitor-only.
1---2name: competitor-analysis3description: Analyze one competitor's organic footprint, ranking keywords, content themes, backlinks, and gaps.4---5
6# OpenSEO Competitor Analysis
7
8## Goal
9
10Analyze one competitor deeply enough to decide what to learn from, avoid, counter-position against, or outrank.
11
12Use this for a named competitor. For identifying the market leaders first, use `competitive-landscape`.
13
14## Required inputs
15
16- `projectId`
17- Competitor domain
18- User's domain when comparison is requested
19- Optional topic/category/location/language
20
21## Project context
22
23The project-context tools are free and shared with the app and other agents.
24
251. Call `get_project_context` first and ground the analysis in it — the saved competitors say whether this domain is already known and what was concluded about it before.
262. This skill needs competitors. If none are saved, run a minimal inline setup: save the competitor being analyzed, and ask the user (or infer from `find_serp_competitors` and confirm) whether there are others, write them back with `update_project_context` (`addCompetitors`), then continue the analysis. Never front-load the full interview; suggest `seo-project-setup` at the end for the rest.
273. 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.
284. On finish, write back what is durable with `update_project_context` — an `addCompetitors` upsert for this domain with a short note on its strengths and where it is vulnerable — and append a research log entry: `{ appendResearchLog: { summary: "Competitor analysis: <domain>. Verdict: <conclusion>" } }`.
29
30## OpenSEO MCP tools
31
32- `get_domain_overview`: baseline organic traffic and keyword count.
33- `get_search_console_performance`: when comparing to the user's own domain and Search Console is connected, use it as the first-party baseline (real clicks/impressions/CTR/position) instead of estimating the user's own performance from third-party data.
34- `get_ranked_keywords`: exact keyword, URL, rank, intent, traffic, CPC, and SERP-type rows for the competitor domain or page.
35- `get_backlinks_overview`: backlink/referring-domain profile.
36- `find_serp_competitors`: validate whether the named competitor is a real search competitor across the target keyword set.
37- `search_local_businesses`, `get_local_serp_results`, and `get_google_business_questions`: use for local SEO competitors when Maps/local-pack visibility, nearby businesses, categories, or Google Q&A matter.
38- `get_serp_results`: validate direct head-to-head SERPs for important keywords.
39- `research_keywords`: expand gaps or category terms when needed.
40
41## Workflow
42
431. Call `get_domain_overview` for the competitor, passing provided location/language when supported.
442. If comparing to the user, call `get_domain_overview` for the user's domain too — and if Search Console is connected, `get_search_console_performance` for the user's real baseline.
453. Call `get_ranked_keywords` for the competitor. Use filters like `maxRank`, `minSearchVolume`, `excludeBrandTerms`, and `resultTypes` to keep rows relevant.
464. If comparing to the user, call `get_ranked_keywords` for the user's domain/page too, or use `get_serp_results` for the shared terms when a lighter check is enough.
475. For local SEO, use `search_local_businesses` and `get_local_serp_results` around the relevant business location(s) before drawing local-pack conclusions. Add `get_google_business_questions` only when Q&A evidence matters.
486. Use `find_serp_competitors` when the competitor was supplied by the user but its search overlap is unclear.
497. Group competitor keywords into themes:
50 - Product/category terms
51 - Alternatives/comparisons
52 - Templates/tools/calculators
53 - Educational guides
54 - Branded demand
55 - Local/neighborhood terms when relevant
568. Call `get_backlinks_overview` for the competitor, especially if authority appears to explain rankings. Continue without backlink evidence if it is unavailable.
579. Use `get_serp_results` for important shared or target keywords to compare positioning, passing provided location/language when supported.
5810. Produce an actionable plan:
59 - What they are doing well
60 - Where they are vulnerable
61 - Which pages/keywords to pursue
62 - What to avoid copying
63
64## Output format
65
66Start with:
67
68- Competitor snapshot
69- Biggest lesson
70- Best opportunity to beat them
71
72Then include:
73
74| Area | Competitor pattern | Evidence | OpenSEO opportunity |
75| ---- | ------------------ | -------- | ------------------- |
76
77Include sections for:
78
79- Top keyword themes
80- Content/page types working for them
81- Backlink/authority notes
82- Head-to-head SERP observations
83- Priority actions for the user
84
85## Guardrails
86
87- Do not treat all competitor keywords as desirable. Filter for business fit.
88- Separate evidence from inference.
89- Do not infer competitor page/content-type patterns from keyword rows alone; use SERP or web evidence for page-level claims.
90- For local SEO, do not infer Maps/local-pack strength from national organic domain metrics alone; use local business and local SERP tools when the location is known or reasonably discoverable.
91- Do not recommend copying content; recommend a stronger angle or better answer to the same intent.
92- If the user's domain is unavailable, frame the analysis as competitor-only.