OpenSEO Competitor Analysis
SkillDev toolsDeep-dive ONE competitor's organic footprint — exact ranking keywords and URLs, content themes, backlink profile, and exploitable gaps — with findings written into brand/competitors.md. Use this skill when the user names a competitor and wants to know what to learn from them, counter, or outrank, including head-to-head comparisons against the user's own domain. For market-level mapping first, use openseo-competitive-landscape. Triggers: "analyze competitor", "competitor keywords", "competitor backlinks", "beat <competitor>", "competitor seo teardown".
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the OpenSEO Competitor Analysis skill
What this skill tells your AI
The instructions your AI receives, as published by moizibnyousaf/marketing-cli in skills/openseo-competitor-analysis/SKILL.md and read by ahel’s review.
Analyze one competitor deeply enough to decide what to learn from, avoid, counter-position against, or outrank. Findings merge into brand/competitors.md — mktg's competitor memory that competitive-intel maintains qualitatively and this skill now grounds in measured rows.
On Activation
- Catalog + binding:
mktg catalog info openseo --json --fields configured+.seo/openseo.json. No OpenSEO → hand off tocompetitive-intel(Exa qualitative), labeling metricsunknown. - Brand grounding: read
brand/competitors.md+brand/positioning.md(tolerate templates). If the competitor isn't named, ask — never guess the domain.
OpenSEO MCP Tools
get_domain_overview: baseline organic traffic + keyword count (both domains when comparing).get_ranked_keywords: exact keyword/URL/rank/intent/traffic rows. UsemaxRank,minSearchVolume,excludeBrandTerms,resultTypesfilters to keep rows relevant.get_backlinks_overview: backlink/referring-domain profile (may be unavailable — continue without it).find_serp_competitors: validate the named competitor actually overlaps in search.get_serp_results: head-to-head SERP checks for the important shared terms.get_search_console_performance: when comparing to the user's domain and GSC is connected, the USER's baseline is first-party — never estimate your own side from third-party data.research_keywords: expand gap terms.
Workflow
get_domain_overviewfor the competitor (and the user's domain when comparing).get_ranked_keywordsfor the competitor with sensible filters; same for the user, orget_serp_resultsfor shared terms when a lighter check suffices.find_serp_competitorswhen the supplied competitor's search overlap is unclear.- Group keywords into themes: product/category, alternatives/comparisons, templates/tools, educational guides, branded demand.
get_backlinks_overviewwhen authority appears to explain rankings.get_serp_resultsfor the important head-to-head terms.- Synthesize the plan: what they do well, where they're vulnerable, which pages/keywords to pursue, what NOT to copy.
- Merge into
brand/competitors.md(preserve existing sections; date the entry; confirm before overwriting populated competitor entries). - Hand off:
competitor-alternativesfor "X vs Y" pages,seo-contentfor gap-driven briefs,openseo-keyword-clusteringfor page mapping.
Output Format
Start with: snapshot, biggest lesson, best opportunity to beat them. Then:
| Area | Competitor pattern | Evidence | OpenSEO opportunity |
|---|
Anti-Patterns
- Treating every competitor keyword as desirable — because ranking for a term and PROFITING from a term are different things; filter through positioning before anything lands in a plan.
- Inferring page-level content strategy from keyword rows alone — because a keyword list can't tell you WHY a page works (structure, depth, format). Use SERP/web evidence for page-level claims.
- Estimating the user's own performance from third-party data when GSC exists — because first-party clicks/impressions/position are free and exact; third-party estimates of your own site are the worst data in the room.
- Recommending "copy what they do" — because imitation pages lose to the original on authority and freshness. Recommend a stronger angle on the same intent, never a replica.
- Separating evidence from inference nowhere — because "they rank for X" (evidence) and "their content strategy is Y" (inference) carry different confidence and must read differently in
brand/competitors.md.
Close the loop
After writing files, log completion so mktg plan / mktg status count the work (bare mktg run only logs loaded):
mktg run openseo-competitor-analysis --complete --writes <paths written> --result success --json
Adapted from every-app/open-seo .agents/skills/competitor-analysis (MIT). Workflow upstream; mktg brand-memory writes and handoff wiring added here.
Signals
- GitHub stars
- 31
- Forks
- 5
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
openseo-competitor-analysis- Source
- github.com/moizibnyousaf/marketing-cli