Competitive SEO opportunities
Start with a topic and see which keywords, ranking domains and pages deserve a closer look. The report orders the investigation so you can spend time on the strongest leads first.
Install and run the report
Install the CLI once, then run seo start to connect your site and Google data. After setup you can run this report yourself or ask your agent to run it.
Install the SEO CLI globally.
npm i -g seoRun setup after installation.
seo startTurn one topic into a bounded keyword and competitor shortlist.
seo reports run competitive-opportunities --params '{"target":"example.com","seeds":["seo reporting software"],"countryCode":"GB","languageCode":"en","keywordProvider":"semrush","serpProvider":"dataforseo"}' --jsonWhat you get from this report
Turn a topic into a focused keyword and competitor shortlist using demand, current rankings, Domain Rating, and optional link evidence.
- Best for
- You are starting with a topic rather than a fixed keyword or competitor list.
- Needs
- Target domain and topic seeds
- You get
- A focused keyword investigation order with target ranks, competitor pages, review reasons, and evidence references.
- Use next
- Competitor keyword gaps
What you need before you run it
This report uses keyword ideas from one connected research provider, with discovery sources, metric states, coverage, cache status, warnings, and cost. Current Google result snapshots for the retained keyword shortlist, including exact ranking domains, URLs, positions, market, device, and observation time. Ahrefs Domain Rating for the target and retained competitors, plus optional paid domain-level link summaries from Ahrefs or DataForSEO.
Target domain and topic seeds
Define the site being compared and the small topic set used to discover candidate keywords.
Country, language, and device
Keep keyword research and current Google results aligned to one explicit market.
Connected research providers
Supply keyword ideas, current result snapshots, free Domain Rating observations, and optional paid link summaries.
How the report finds the opportunity
The report uses existing search and page evidence to build a limited review list. An opportunity is a reason to inspect a page, not a promise of more traffic.
Keeps supplied seeds first, then selects a bounded keyword shortlist using discovery coverage and observed demand.
Collects current result pages and identifies recurring ranking domains without assuming they are relevant business competitors.
Adds Ahrefs Domain Rating by default and requests paid link summaries only when competitionEvidence is link-summary.
Builds an evidence-referenced investigation order and keeps provider metrics separate from current result observations.
Preserves source coverage, cache state, costs, warnings, failures, caps, dates, and missing values across every provider.
Check the evidence behind each opportunity
Start with the query, page and date range behind each suggestion. Thin or partial evidence belongs in the review pile, not the implementation queue.
| Read first | Why it matters |
|---|---|
| Result | A focused keyword investigation order with target ranks, competitor pages, review reasons, and evidence references. |
| More detail | Recurring ranking domains plus Domain Rating and optional referring-domain comparisons for the target and retained competitors. |
| Read it with | Start with the first one or two keywords whose current pages serve the same audience and intent as the site. |
What the result cannot prove
The investigation order combines several distinct evidence types. It is not a ranking promise, traffic forecast, or universal difficulty score. Provider estimates, failed requests, caps, missing values, cache state, costs, and observation dates remain visible in their source sections. Recurring result domains still need a relevance and site-type review before deeper competitor work.
Start with the first one or two keywords whose current pages serve the same audience and intent as the site. Use Domain Rating and link counts to decide what deserves inspection. Confirm the choice against existing pages, Search Console, and URL-level links. Request paid link summaries or URL-level links only when they can change the shortlist.
Use a different report for these jobs
You need local results for a city or precise location. You already have a classified competitor set and need a full keyword-gap comparison.
You only need keyword ideas and market estimates.
Run keyword research without current result and competitor enrichment.
You already have a small classified competitor set.
Run competitor keyword gaps for a deeper comparison with existing first-party and provider coverage.
You need city-level or exact local result evidence.
Start with retained local demand, then request a fixed local result market only when that context changes the work.
Use the report with an agent or in code
The command above is enough for most work. These options let an agent, script or application run the same report with explicit input and structured output.
CLI
Use the report catalog when an agent, script or CI job needs predictable JSON instead of the normal terminal output. Check the current input first, then run the report with the validated parameters.
Check the current input before the agent or script runs the report.
seo reports describe competitive-opportunities --jsonOnce the input is valid, run the report through the report catalog.
seo reports run competitive-opportunities --params '{"target":"example.com","seeds":["seo reporting software"],"countryCode":"GB","languageCode":"en","keywordProvider":"semrush","serpProvider":"dataforseo","competitionEvidence":"domain-rating"}' --jsonMCP
An MCP agent follows the same two-step flow. It inspects the current schema, fills the required fields and only then runs the report.
Ask the MCP server for the current report input.
{
"id": "competitive-opportunities"
}Run the report after the agent has checked and filled the input.
{
"id": "competitive-opportunities",
"params": {
"target": "example.com",
"seeds": [
"seo reporting software"
],
"countryCode": "GB",
"languageCode": "en",
"keywordProvider": "semrush",
"serpProvider": "dataforseo",
"competitionEvidence": "domain-rating"
}
}TypeScript
Install the package in a Node 22 project when your application needs to run the report directly. The result includes the same evidence, warnings and limits returned through the CLI and MCP server.
Add the SEO package to your project.
npm install seoRun the report from your TypeScript application.
import { executeReport } from 'seo/mcp'
const result = await executeReport(
'competitive-opportunities',
{
"target": "example.com",
"seeds": [
"seo reporting software"
],
"countryCode": "GB",
"languageCode": "en",
"keywordProvider": "semrush",
"serpProvider": "dataforseo",
"competitionEvidence": "domain-rating"
},
)
console.log(result)What to do next
Open the current pages behind the first one or two leads and confirm that they serve the same intent. Check existing site and Search Console coverage, then request deeper link evidence only when it can change the decision.
- 01Open the current ranking pages for the first one or two retained keywords and compare their intent and page type.
- 02Check existing site and Search Console coverage before proposing a new page.
- 03Request paid link summaries or URL-level links only when they can change the shortlist.
Related reports
Compare up to three explicit competitors with retained Search Console themes, the site's provider footprint, and repeated ranking-page patterns.
Inspect one bounded search snapshot with exact retained organic ranks, market context, result features, provider coverage, cache status, and request cost.
Expand a small seed list into bounded market-specific ideas while preserving the discovery method, metric state, provider coverage, cache status, and request cost.
Normalize bounded referring URLs from Ahrefs, DataForSEO, Bing Webmaster or a local export without downloading a web-scale index.
Sources used by this report
These primary sources define the provider data or search controls used by the result.