Automated summary
This skill compares a site's existing content inventory against 2-3 competitors to find topics they rank for that you don't cover yet, then outputs a prioritized list of posts to write or update.
Strengths
- Chains three skills (content cataloging, domain analysis, traffic analysis) to build a full picture of both your site and the competitors.
- Classifies gaps into four types (hard, soft, positioning, informational) and ranks them by commercial intent.
- Filters gaps by a commercial intent score of 3 or higher, avoiding generic high-traffic recommendations that won't convert.
- Delivers something immediately usable: a prioritized opportunity table plus starter editorial briefs.
Limitations
- Relies on third-party scrapers (Apify Semrush/Ahrefs) and API keys, and may return thin data for low-traffic competitors.
- Topic coverage on your own site is inferred from titles and URL slugs, so some sub-topics may be missed.
- Keyword difficulty estimates and production budget are not part of the final prioritization.
Use it when a seed or Series A team wants to start a blog and pick its first topics based on where competitors already rank, instead of guessing from a blank keyword list.
Avoid it if you only need a technical on-page SEO audit, or if you have no access to a paid domain-analysis tool.
Security analysis
CautionThis is an orchestration skill: it shells out to python/node scripts and calls Apify SEO APIs using an env-var token, then writes a markdown report locally. No destructive commands, no piping remote content to a shell, no sending secrets to suspicious endpoints. The only meaningful risk is reliance on external, unpinned upstream scripts and paid API credentials, which is legitimate use of powerful tools — hence caution rather than safe.
- •Requires APIFY_API_TOKEN and makes paid third-party (Apify/Semrush) network calls (~$3-10 per run) — credentials and cost exposure
- •Executes external scripts via bash by relative path (skills/site-content-catalog/scripts/catalog_site.py, skills/seo-domain-analyzer/src/cli.js, skills/seo-traffic-analyzer/scripts/analyze_seo.py) that are not bundled with this skill — trust depends on unpinned upstream skills
- •Writes output files into a local clients/<client-name>/ directory (benign)
Examples
Find SEO content gaps between https://acme.io and these competitors: https://rival.com, https://othertool.com. Our ICP is B2B sales ops managers at Series A startups. Output a prioritized list of posts we should write.We're starting a blog from scratch at https://ourstartup.com. Compare us against https://competitor-a.com and https://competitor-b.com and tell me the top 10 topics to focus on first, ranked by commercial intent.What keywords is https://competitor.com ranking for that https://mysite.com is missing? Use our site content catalog first so you don't recommend things we already published.name: seo-opportunity-finder description: > Find quick-win SEO content opportunities by comparing your site's existing content against competitor keyword rankings. Chains site-content-catalog and seo-domain-analyzer to build a content inventory, then identifies gaps — topics competitors rank for that you don't cover yet. Outputs a prioritized list of posts to write or update. Use when a seed/Series A team wants to start winning organic traffic without guessing. tags: [seo]
SEO Opportunity Finder
Identify the highest-leverage content gaps between your site and competitors. Combines a crawl of your existing content with competitor keyword/traffic analysis to surface a prioritized list of posts worth writing.
Core principle: Don't start from a blank keyword list. Start by knowing what you have, then find what competitors have that you don't — and pick the gaps most likely to convert.
When to Use
- "Find SEO content gaps vs our competitors"
- "What topics should we write about to rank?"
- "We're starting a blog — where should we focus first?"
- "What keywords are [competitor] ranking for that we're missing?"
Phase 0: Intake
- Your website URL (e.g.,
https://yourcompany.com) - 2-3 competitor URLs to compare against
- Primary ICP — who are you trying to attract? (This filters for commercial intent vs. general traffic)
- Any topics/keyword themes that are definitely in scope? (Optional — helps prioritize output)
Phase 1: Catalog Your Existing Content
Run site-content-catalog to build an inventory of your current pages and posts:
python3 skills/site-content-catalog/scripts/catalog_site.py \
--url <your_site_url> \
--output json
Extract from results:
- All blog post titles and URLs
- Inferred topics/themes per post
- Estimated content age (from URL slugs or metadata if available)
This prevents recommending content you've already written.
Phase 2: Analyze Competitor SEO Footprint
Run seo-domain-analyzer for each competitor:
# Uses Apify Semrush/Ahrefs scrapers
node skills/seo-domain-analyzer/src/cli.js analyze --domain <competitor_domain>
Collect for each competitor:
- Top ranking keywords (by estimated traffic volume)
- Top pages by organic traffic
- Domain authority / DR score
- Keyword categories they're winning in
If seo-domain-analyzer returns limited data (low-traffic competitor), supplement with seo-traffic-analyzer:
python3 skills/seo-traffic-analyzer/scripts/analyze_seo.py \
--url <competitor_url> \
--output summary
Phase 3: Identify Gaps
Compare your content inventory (Phase 1) against competitor keyword/topic coverage (Phase 2):
Gap Classification
| Type | Definition | Priority | |------|------------|----------| | Hard gap | Competitor has a page/post on topic, you have nothing | High | | Soft gap | You have content on topic but it's thin (< 500 words, old, no depth) | Medium | | Positioning gap | Competitor owns a keyword cluster that maps to your ICP's exact problem | High | | Informational gap | High traffic, low commercial intent — good for awareness, not conversion | Low |
Commercial Intent Filter
For each gap topic, score commercial intent (1-5):
- 5 — Directly maps to your product (e.g., "best AI SDR tools for startups")
- 4 — Problem-aware but not product-specific (e.g., "how to scale outbound SDR")
- 3 — Adjacent pain point (e.g., "cold email open rates benchmark 2026")
- 2 — Educational, tangential (e.g., "what is lead scoring")
- 1 — Generic traffic, low conversion potential
Prioritize gaps with score ≥ 3.
Phase 4: Synthesize & Output
Produce a prioritized opportunity table + editorial brief starters:
# SEO Opportunity Report — [Your Company] vs [Competitors]
Generated: [DATE]
## Your Content Snapshot
- Total indexed pages: [N]
- Blog posts: [N]
- Main topic clusters: [list]
## Competitor Benchmarks
| Domain | DR | Est. Monthly Organic Traffic | Top Keyword Clusters |
|--------|----|-----------------------------|----------------------|
| [comp1] | [X] | [X] | [topics] |
| [comp2] | [X] | [X] | [topics] |
## Top 10 Content Opportunities
### 1. [Topic/Title Suggestion]
- **Keyword target:** [keyword phrase]
- **Why it matters:** [what problem it solves for ICP]
- **Competitor owning it:** [competitor URL]
- **Est. monthly searches:** [range]
- **Commercial intent score:** [1-5]
- **Recommended format:** [listicle / how-to / comparison / landing page]
- **Estimated effort:** [hours or word count target]
### 2. [Topic/Title Suggestion]
...
## Quick Wins (update existing posts)
| Your Post | Issue | What to Add |
|-----------|-------|-------------|
| [URL] | [thin/outdated] | [recommendation] |
## Recommended Content Calendar (Next 90 Days)
| Month | Post | Intent Score | Est. Traffic Potential |
|-------|------|-------------|----------------------|
| Month 1 | [post 1] | [score] | [range] |
| Month 1 | [post 2] | [score] | [range] |
| Month 2 | [post 3] | [score] | [range] |
...
Save to clients/<client-name>/intelligence/seo-opportunities-[YYYY-MM-DD].md.
Cost
| Component | Cost | |-----------|------| | Site content catalog | Free (sitemap crawl) | | SEO domain analyzer (per competitor) | ~$1-3 (Apify Semrush scraper) | | Traffic analyzer (supplement) | ~$0.10-0.50 (web search probes) | | Total per run | ~$3-10 for 3 competitors |
Tools Required
- Apify API token —
APIFY_API_TOKENenv var - Upstream skills:
site-content-catalog,seo-domain-analyzer,seo-traffic-analyzer
Trigger Phrases
- "Find our SEO content gaps"
- "What should we write about to rank?"
- "Compare our content coverage to [competitor]"
- "Run SEO opportunity finder for [client]"
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/seo-opportunity-finder-msh3uul2/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/seo-opportunity-finder-msh3uul2' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/seo-opportunity-finder-msh3uul2/download' --output '.skill-downloads/seo-opportunity-finder-msh3uul2/SKILL.md.part' && mv '.skill-downloads/seo-opportunity-finder-msh3uul2/SKILL.md.part' '.skill-downloads/seo-opportunity-finder-msh3uul2/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/seo-opportunity-finder-msh3uul2/SKILL.md' && test -s '.skill-downloads/seo-opportunity-finder-msh3uul2/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/seo-opportunity-finder' && cp -R '.skill-downloads/seo-opportunity-finder-msh3uul2' '.claude/skills/seo-opportunity-finder'Codex
test -f '.skill-downloads/seo-opportunity-finder-msh3uul2/SKILL.md' && test -s '.skill-downloads/seo-opportunity-finder-msh3uul2/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/seo-opportunity-finder' && cp -R '.skill-downloads/seo-opportunity-finder-msh3uul2' '.agents/skills/seo-opportunity-finder'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/seo-opportunity-finder-msh3uul2'openskills read 'seo-opportunity-finder-msh3uul2'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/seo-opportunity-finder-msh3uul2/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
Writing Fragments
Content
Mine raw writing fragments through a relentless interview, without imposing structure. Capture ideas, quotes, and leading words for later use.
UI Copywriting & Auditing
Content
Write or audit user-facing UI copy including buttons, errors, empty states, and tooltips across the monorepo, following the design system source of truth.
Music MIDI Extraction
Content
Extracts the MIDI or score from an existing music production via the CogMusic MCP tool and confirms availability.