---
title: "Competitive SEO opportunities | SEO Skill"
description: "Turn a topic into a focused keyword and competitor shortlist using demand, current rankings, Ahrefs Domain Rating and optional link evidence."
canonical: "https://seoskill.dev/docs/reports/competitive-opportunities"
language: "en"
---

# 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 seo
```

Run setup after installation.

```
seo start
```

Turn 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"}' --json
```

## What 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.

01

Keeps supplied seeds first, then selects a bounded keyword shortlist using discovery coverage and observed demand.

02

Collects current result pages and identifies recurring ranking domains without assuming they are relevant business competitors.

03

Adds Ahrefs Domain Rating by default and requests paid link summaries only when competitionEvidence is link-summary.

04

Builds an evidence-referenced investigation order and keeps provider metrics separate from current result observations.

05

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.

Keyword research report

](https://seoskill.dev/docs/reports/keyword-research)[

### You already have a small classified competitor set.

Run competitor keyword gaps for a deeper comparison with existing first-party and provider coverage.

Competitor keyword gap report

](https://seoskill.dev/docs/reports/competitor-keyword-gap)[

### 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.

Local SEO keyword research

](https://seoskill.dev/docs/reports/local-search-demand)

## 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 --json
```

Once 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"}' --json
```

### MCP

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 seo
```

Run 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.

1.  01Open the current ranking pages for the first one or two retained keywords and compare their intent and page type.
2.  02Check existing site and Search Console coverage before proposing a new page.
3.  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.

Competitor keyword gap report

](https://seoskill.dev/docs/reports/competitor-keyword-gap)[

Inspect one bounded search snapshot with exact retained organic ranks, market context, result features, provider coverage, cache status, and request cost.

Live SERP results report

](https://seoskill.dev/docs/reports/serp-results)[

Expand a small seed list into bounded market-specific ideas while preserving the discovery method, metric state, provider coverage, cache status, and request cost.

Keyword research report

](https://seoskill.dev/docs/reports/keyword-research)[

Normalize bounded referring URLs from Ahrefs, DataForSEO, Bing Webmaster or a local export without downloading a web-scale index.

Backlink evidence report

](https://seoskill.dev/docs/reports/link-evidence)

## Sources used by this report

These primary sources define the provider data or search controls used by the result.

-   [DataForSEO keyword ideas API reference](https://docs.dataforseo.com/v3/dataforseo_labs-google-keyword_ideas-live/)
-   [DataForSEO live Google SERP API reference](https://docs.dataforseo.com/v3/serp-google-organic-live-advanced/)
-   [Ahrefs Domain Rating API reference](https://docs.ahrefs.com/en/api/reference/public/get-domain-rating-free)
-   [Ahrefs backlink API reference](https://docs.ahrefs.com/en/api/reference/site-explorer/get-all-backlinks)
