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 limited 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, Ahrefs 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
- Turn a topic into a focused keyword and competitor shortlist using demand, current rankings, Ahrefs Domain Rating and optional link evidence.
- Use next
- Competitor keyword gaps
Every report follows the same rules for missing data and outside estimates.See how report data works.
What you need before you run it
The report uses the information below. Optional sources are only used when you ask for them.
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.
Use a different report for these jobs
These jobs need a different report or a manual review.
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 coverage and provider data.
You need city-level or exact local result evidence.
Start with returned 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 returned 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 competitor keywords with Search Console themes, current rankings and repeated page patterns. Exclude irrelevant terms and evidence of existing coverage.
Inspect exact organic ranks, domains, URLs, titles, snippets and result features for one keyword, location, language and device-specific search snapshot.
Discover market-specific keyword ideas from a small seed list with search volume, difficulty, source overlap, provider coverage, cache status and cost.
Review limited referring URLs, target pages and anchor text from Ahrefs, DataForSEO, Bing Webmaster or a local export, with source limits kept visible.
Sources used by this report
These primary sources define the provider data or search controls used by the result.