Competitor keyword gap report
Start with a small set of relevant competitors, then test their keywords against what the site already covers. The report classifies possible gaps instead of pretending every competitor term deserves a page.
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 startRun competitor keyword gaps through the report catalog.
seo reports run competitor-keyword-gap --params '{"site":"sc-domain:example.com","competitors":[{"domain":"competitor-one.example","siteType":"business"},{"domain":"competitor-two.example","siteType":"business"}],"countryCode":"GB","languageCode":"en","maxRank":20,"limitPerDomain":100,"candidateLimit":50}' --jsonWhat you get from this report
Compare competitor keywords with Search Console themes, current rankings and repeated page patterns. Exclude irrelevant terms and evidence of existing coverage.
- Best for
- You have classified a small set of relevant competitors.
- Needs
- Connected Search Console property
- You get
- Compare competitor keywords with Search Console themes, current rankings and repeated page patterns. Exclude irrelevant terms and evidence of existing coverage.
- Use next
- Search competitors
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.
Connected Search Console property
Provides returned owner-verified query and page evidence used to find existing topic coverage.
Site and classified competitor domains
Provide limited estimated keyword footprints for the site and up to three explicitly relevant competitors.
Competitor ranking pages
Add repeated path-pattern evidence and representative pages for programmatic SEO research.
Optional site and competitor exports
Combine one to four local ranked-keyword files from the same provider when live provider access is unavailable.
Use a different report for these jobs
These jobs need a different report or a manual review.
You have not identified and classified relevant competitors yet.
Run search competitors on a representative keyword set, inspect the returned domains, and classify only the sites that compete for the same audience or outcome.
You want to expand an existing existing page family rather than research competitor terms.
Run pSEO opportunities to find expansion evidence in owner-verified performance and working templates before introducing an independent competitor dataset.
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 competitor-keyword-gap --jsonOnce the input is valid, run the report through the report catalog.
seo reports run competitor-keyword-gap --params '{"site":"sc-domain:example.com","competitors":[{"domain":"competitor-one.example","siteType":"business"},{"domain":"competitor-two.example","siteType":"business"}],"countryCode":"GB","languageCode":"en","maxRank":20,"limitPerDomain":100,"candidateLimit":50}' --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": "competitor-keyword-gap"
}Run the report after the agent has checked and filled the input.
{
"id": "competitor-keyword-gap",
"params": {
"site": "sc-domain:example.com",
"competitors": [
{
"domain": "competitor-one.example",
"siteType": "business"
},
{
"domain": "competitor-two.example",
"siteType": "business"
}
],
"countryCode": "GB",
"languageCode": "en",
"maxRank": 20,
"limitPerDomain": 100,
"candidateLimit": 50
}
}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(
'competitor-keyword-gap',
{
"site": "sc-domain:example.com",
"competitors": [
{
"domain": "competitor-one.example",
"siteType": "business"
},
{
"domain": "competitor-two.example",
"siteType": "business"
}
],
"countryCode": "GB",
"languageCode": "en",
"maxRank": 20,
"limitPerDomain": 100,
"candidateLimit": 50
},
)
console.log(result)What to do next
Start with relevant candidates whose what each source returned is usable, then inspect the current results and representative pages. Complete the data-source checks before approving a programmatic template, and keep no new page as a valid outcome.
- 01Inspect current results for shortlisted terms.
- 02Compare representative competitor and existing pages.
- 03Complete the returned data-source brief before approving a new programmatic template family.
Related reports
Find domains that repeatedly appear for an explicit keyword set, preserve declared site types, and leave unknown search competitors safely unclassified.
See which pages carry a domain's estimated search footprint, which URL patterns repeat and how matching pages on your own site perform in Search Console.
Combine Search Console quick wins, second-page queries and striking-distance evidence with optional keyword estimates and programmatic SEO clusters.
Sources used by this report
These primary sources define the provider data or search controls used by the result.