# Competitor Domains Finder (SEO) (`sfoln/competitor-domains`)

Find the domains competing with any website in Google organic search: shared keywords, average position, estimated traffic, ranking keywords and top-10 counts per competitor. $0.045 per domain ($45 per 1,000) + $1 per 1,000 competitors.

- Family: SEO & search
- Categories: SEO tools, Lead generation, Developer tools
- Availability: on request (private on Apify). Email contact@sfoln.com with subject "Access request: Competitor Domains Finder (SEO) (sfoln/competitor-domains)" before calling; calls fail until it is public.
- JSON: https://www.sfoln.com/actors/competitor-domains.json
- MCP: https://mcp.apify.com?tools=sfoln/competitor-domains
- REST (sync): POST https://api.apify.com/v2/actors/sfoln~competitor-domains/run-sync-get-dataset-items
- REST (async): POST https://api.apify.com/v2/actors/sfoln~competitor-domains/runs

Competitor Domains Finder (SEO) finds the websites that compete with a domain in Google organic search. For each competitor you get the number of shared keywords, its average position on those keywords, and the size of its whole organic presence: estimated traffic, number of ranking keywords, and top-1, top-3 and top-10 counts (DataForSEO Labs data). Use it to map a market, find content and link opportunities, benchmark clients, or give AI agents competitive context. You pay $0.045 per domain plus $1 per 1,000 competitors delivered.

## Price per delivered record

| Event | Price | Per 1,000 | Charged for |
| --- | --- | --- | --- |
| Competitor query (`competitor-domains-query`) | $0.045 | $45 / 1,000 | Charged once per domain the upstream processed (covers the per-request fee). |
| Competitor domain (`competitor-domain`) | $0.001 | $1 / 1,000 | Charged once per competitor record delivered. |

Pay-per-event, USD, billed by Apify; no platform usage charge. Only records with status `ok` are charged. Cap a run with `maxTotalChargeUsd`. Apify free plan: up to 5 per run.

## Run

```bash
curl -X POST "https://api.apify.com/v2/actors/sfoln~competitor-domains/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains":["dataforseo.com"],"limitPerDomain":5}'
```

MCP client configuration:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/competitor-domains"
    }
  }
}
```

Example prompt: Which 20 websites compete most with dataforseo.com in Google organic search? Show shared keywords and estimated traffic for each.

## Input

Enter domains. Each domain returns up to `limitPerDomain` organic competitors, in the order DataForSEO returns them.

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `domains` (required) | array | — | Domains: Domains or URLs, one per line (URLs are reduced to their domain). Accounts on the Apify free plan can process up to 5 domains per run. |
| `limitPerDomain` | integer | `20` | Competitors per domain: Maximum competitors returned per domain. Each competitor is billed as competitor-domain. |
| `location` | string | `"2840"` | Location: DataForSEO location code (2840 = United States, 2826 = United Kingdom, 2276 = Germany) or full location name (e.g. "United Kingdom"). |
| `languageCode` | string | `"en"` | Language code: Language code, e.g. en, de, fr, es. |
| `excludeTopDomains` | boolean | `false` | Exclude top domains: Drop very large generic sites (Wikipedia, Amazon, YouTube…) from the competitor list. |
| `maxDomains` | integer | `100` | Max domains: Safety cap on how many domains are processed in this run. |
| `concurrency` | integer | `3` | Concurrency: How many domains are processed in parallel. |
| `includeRaw` | boolean | `false` | Include raw upstream response: Attach the unmodified DataForSEO item to each result record. |

Example input:

```json
{
  "domains": [
    "dataforseo.com"
  ],
  "limitPerDomain": 5
}
```

## Output

One record per input item with `status` (`ok` is charged; `not_found`, `error`, `skipped_*` are free) and `charged`. The run stores an `OUTPUT` summary record.

| Field | Type | Meaning |
| --- | --- | --- |
| `recordType` | string | Record type: competitor = one competitor; summary = one per input domain. |
| `domain` | string | Domain: Your (input) domain. |
| `competitorDomain` | string | Competitor: Competing domain. |
| `intersections` | integer | null | Shared keywords: Keywords both domains rank for. |
| `avgPosition` | number | null | Avg position: Competitor’s average position on the shared keywords. |
| `sumPosition` | integer | null | Sum of positions: Sum of the competitor’s positions on the shared keywords. |
| `organicEtv` | number | null | Organic traffic: Competitor’s estimated monthly organic traffic (whole domain). |
| `organicKeywords` | integer | null | Organic keywords: Keywords the competitor ranks for (whole domain). |
| `organicPos1` | integer | null | Pos 1: Keywords at position 1 (whole domain). |
| `organicPos2_3` | integer | null | Pos 2–3: Keywords at positions 2–3. |
| `organicPos4_10` | integer | null | Pos 4–10: Keywords at positions 4–10. |
| `organicTrafficValueUsd` | number | null | Traffic value (USD): Estimated monthly ad cost of the competitor’s organic traffic. |
| `sharedKeywordsEtv` | number | null | Shared keyword traffic: Competitor’s estimated traffic from the shared keywords only. |
| `sharedKeywordsCount` | integer | null | Shared keyword rankings: Competitor’s rankings counted on the shared keywords. |
| `limitRequested` | integer | Limit requested: limitPerDomain as requested (summary records only). |
| `limitUsed` | integer | Limit used: Competitors requested upstream after the free-plan cap and budget sizing (summary records only). |
| `competitorsReturned` | integer | Competitors returned: Summary records only. |
| `totalAvailable` | integer | null | Total available: Summary records only. |
| `targetOrganicKeywords` | integer | null | Target organic keywords: Keywords the input domain itself ranks for (summary records only). |
| `targetOrganicEtv` | number | null | Target organic traffic: Estimated monthly organic traffic of the input domain itself (summary records only). |
| `queryCharged` | boolean | Domain fee charged: Whether competitor-domains-query was charged (summary records only). |
| `input` | string | object | null | Input: Domain or URL as entered. |
| `status` | string | Status: ok \| not_found \| error \| skipped_invalid \| skipped_budget \| skipped_free_plan |
| `charged` | boolean | Charged: Whether this record incurred a pay-per-event charge. |
| `chargedEvent` | string | Charged event: competitor-domain (competitor records). |
| `warnings` | array | Warnings: Non-fatal notes (limit reduced, budget reached...). |
| `error` | object | Error: {code, message, provider?} when status is not ok. |
| `source` | string | Source: Upstream data source. |
| `fetchedAt` | string | Fetched at: ISO timestamp. |

Example record:

```json
{
  "recordType": "competitor",
  "domain": "dataforseo.com",
  "competitorDomain": "semrush.com",
  "intersections": 1830,
  "avgPosition": 23.46,
  "sumPosition": 42930,
  "organicEtv": 9500000.5,
  "organicKeywords": 2100000,
  "organicPos1": 9000,
  "organicPos2_3": 12000,
  "organicPos4_10": 40000,
  "organicTrafficValueUsd": 4000000,
  "sharedKeywordsEtv": 1200,
  "sharedKeywordsCount": 1830,
  "input": "dataforseo.com",
  "status": "ok",
  "charged": true,
  "chargedEvent": "competitor-domain",
  "source": "dataforseo",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}
```

## Related

- [Website Traffic Checker – SEO Overview](https://www.sfoln.com/actors/domain-seo-overview.md) (`sfoln/domain-seo-overview`)
- [Backlink Checker API – Anchors & Domains](https://www.sfoln.com/actors/backlinks-list.md) (`sfoln/backlinks-list`)
- [Ranked Keywords Checker for Any Domain](https://www.sfoln.com/actors/ranked-keywords.md) (`sfoln/ranked-keywords`)
- [SEO Competitor Analysis – Traffic & Keywords](https://www.sfoln.com/actors/seo-competitor-snapshot.md) (`sfoln/seo-competitor-snapshot`)

Publisher: SFOLN LLC, contact@sfoln.com. Catalogue: https://www.sfoln.com/catalog.json. Agent guide: https://www.sfoln.com/agents.md.
