---
title: "Search competitor research report | SEO Skill"
description: "Find domains that repeatedly appear for an explicit keyword set, preserve declared site types, and leave unknown search competitors safely unclassified."
canonical: "https://seoskill.dev/docs/reports/serp-competitors"
language: "en"
---

# Search competitor research report

Discover who repeatedly appears across a keyword set before choosing competitors for deeper research. A recurring domain is a search competitor for this sample, not automatically a business competitor.

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

Run search competitors through the report catalog.

```
seo reports run serp-competitors --params '{"keywords":["blue widget","red widget","widget prices"],"targetDomain":"example.com","countryCode":"GB","languageCode":"en","limit":25}' --json
```

## What you get from this report

Identify domains that repeatedly appear across an explicit keyword set while keeping unknown site types unclassified.

Best for

You want to discover search competitors before choosing a small set for deeper research.

Needs

Explicit keyword set and country market

You get

A bounded competitor set with relationship, declared site type, matched keyword count, query-set coverage, position evidence, and provider estimates.

Use next

Ranking pages and patterns

## What you need before you run it

This report uses an explicit set of 2 to 200 keywords and a country-level provider competitor comparison. matched keyword count, query-set coverage, average position, visibility estimate, and sample keyword positions. user-declared site types and relationship labels, with every undeclared type kept unknown.

### Explicit keyword set and country market

Define the bounded query set used to find domains that repeatedly appear in the same search market.

### Target domain and optional site classifications

Separate the target and user-declared business competitors from publishers, directories, communities, marketplaces, and unknown sites.

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

Normalizes and deduplicates 2 to 200 keywords before acquisition and validates the provider response against the requested query count.

02

Measures recurring domains by matched keywords, query-set coverage, average position, visibility estimate, and sample positions.

03

Keeps every undeclared site type unknown instead of guessing whether a search competitor is a business competitor.

## 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 bounded competitor set with relationship, declared site type, matched keyword count, query-set coverage, position evidence, and provider estimates. |
| More detail | Request limits, source coverage, pagination, invalid rows, warnings, cache state, observation time, and local request cost. |
| Read it with | Review unknown domains before selecting competitors. A publisher or directory may reveal search intent without competing for the same customer. |

## What the result cannot prove

The result describes the supplied country-level keyword set, not the whole market or a local pack. Visibility and traffic are provider calculations, not measured audience or sales.

Review unknown domains before selecting competitors. A publisher or directory may reveal search intent without competing for the same customer. Use matched keyword coverage to choose a small relevant set, not to claim complete market share. Run competitor keyword gap only after excluding irrelevant site types.

## Use a different report for these jobs

You have only one query or need a local, device-specific live result snapshot. You want the report to guess what kind of site an unknown domain is.

[

### You need a current view of one query or a city-level and device-specific result.

Run SERP results. This report compares recurring domains across a country-level query set rather than capturing one live result page.

Live SERP results report

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

### You have not reviewed and classified the returned domains.

Inspect representative pages and classify the relevant sites before running a keyword gap. Recurring search visibility alone does not make a domain a business competitor.

Needs more evidence

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

Once the input is valid, run the report through the report catalog.

```
seo reports run serp-competitors --params '{"keywords":["blue widget","red widget","widget prices"],"targetDomain":"example.com","countryCode":"GB","languageCode":"en","limit":25}' --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": "serp-competitors"
}
```

Run the report after the agent has checked and filled the input.

```
{
  "id": "serp-competitors",
  "params": {
    "keywords": [
      "blue widget",
      "red widget",
      "widget prices"
    ],
    "targetDomain": "example.com",
    "countryCode": "GB",
    "languageCode": "en",
    "limit": 25
  }
}
```

### 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(
  'serp-competitors',
  {
  "keywords": [
    "blue widget",
    "red widget",
    "widget prices"
  ],
  "targetDomain": "example.com",
  "countryCode": "GB",
  "languageCode": "en",
  "limit": 25
},
)

console.log(result)
```

## What to do next

Review every unknown site type before choosing competitors for deeper research. Keep publishers, directories, communities and marketplaces distinct, then compare a small relevant set instead of treating result overlap as business equivalence.

1.  01Classify unknown domains as business, publisher, directory, community, or marketplace.
2.  02Run ranking pages for relevant domains.
3.  03Run competitor keyword gap only after excluding irrelevant site types.

## Related reports

[

Find a domain's bounded ranking-page footprint and repeated URL patterns, with optional matching Search Console page evidence.

Organic ranking pages report

](https://seoskill.dev/docs/reports/ranking-pages)[

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)

## Sources used by this report

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

-   [DataForSEO SERP competitors API reference](https://docs.dataforseo.com/v3/dataforseo_labs-google-serp_competitors-live/)
-   [DataForSEO live Google SERP API reference](https://docs.dataforseo.com/v3/serp-google-organic-live-advanced/)
