# Related Keywords Finder (`sfoln/related-keywords`)

Expand a seed keyword into Google's "searches related to" keywords, up to 3 levels deep, with search volume, CPC, competition, keyword difficulty and search intent from DataForSEO Labs. $0.70 per 1,000 keywords + $0.045 per seed keyword. For topic clusters and briefs.

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

Related Keywords Finder expands a seed keyword into the keywords Google shows as “searches related to”, up to three levels deep. Each keyword comes with Google search volume, CPC, paid competition, keyword difficulty and search intent (DataForSEO Labs data). Unlike phrase-match suggestions, related keywords don't have to contain the seed, so they surface synonyms, adjacent topics and questions. Use them for topic clusters, content briefs and PPC research, or give them to AI agents.

## Price per delivered record

| Event | Price | Per 1,000 | Charged for |
| --- | --- | --- | --- |
| Seed keyword query (`related-keywords-query`) | $0.045 | $45 / 1,000 | Charged once per seed keyword the upstream processed (covers the per-request fee). |
| Related keyword (`related-keyword`) | $0.0007 | $0.70 / 1,000 | Charged once per related keyword 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~related-keywords/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"seedKeywords":["coffee grinder"]}'
```

MCP client configuration:

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

Example prompt: Find keywords related to "coffee grinder" two levels deep and list the 20 with the highest search volume, with their keyword difficulty and intent.

## Input

Enter seed keywords. Each seed expands into Google related searches, `depth` levels deep.

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `seedKeywords` (required) | array | — | Seed keywords: Seed keywords, one per line. Accounts on the Apify free plan can process up to 5 seed keywords per run. |
| `depth` | integer | `1` | Depth: Levels of “related searches” to follow: 1 = up to 8 keywords, 2 = up to 72, 3 = up to 584. |
| `limitPerSeed` | integer | `100` | Keywords per seed: Maximum keywords returned per seed, in the order DataForSEO returns them. Each keyword is billed as related-keyword. |
| `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. |
| `maxSeeds` | integer | `100` | Max seeds: Safety cap on how many seed keywords are processed in this run. |
| `concurrency` | integer | `3` | Concurrency: How many seeds are processed in parallel. |
| `includeRaw` | boolean | `false` | Include raw upstream response: Attach the unmodified DataForSEO item to each result record. |

Example input:

```json
{
  "seedKeywords": [
    "coffee grinder"
  ]
}
```

## 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: keyword = one related keyword; summary = one per seed. |
| `seed` | string | Seed: Seed keyword. |
| `keyword` | string | Keyword: Related keyword. |
| `depth` | integer | null | Depth: Level in the related-searches graph (1 = directly related to the seed). |
| `searchVolume` | integer | null | Search volume: Average monthly Google searches. |
| `cpc` | number | null | CPC (USD): Average cost per click. |
| `competition` | number | null | Competition: Paid competition 0–1. |
| `competitionLevel` | string | null | Competition level: LOW \| MEDIUM \| HIGH. |
| `keywordDifficulty` | integer | null | Keyword difficulty: Organic ranking difficulty 0–100. |
| `intent` | string | null | Search intent: informational \| navigational \| commercial \| transactional. |
| `relatedKeywords` | array | Related to: Google related searches shown for this keyword. |
| `locationCode` | integer | null | Location code: DataForSEO location code. |
| `languageCode` | string | null | Language: Language code. |
| `limitRequested` | integer | Limit requested: limitPerSeed as requested (summary records only). |
| `limitUsed` | integer | Limit used: Keywords requested upstream after the depth maximum, the free-plan cap and budget sizing (summary records only). |
| `keywordsReturned` | integer | Keywords returned: Summary records only. |
| `totalAvailable` | integer | null | Total available: Summary records only. |
| `queryCharged` | boolean | Seed fee charged: Whether related-keywords-query was charged (summary records only). |
| `input` | string | object | null | Input: Seed keyword. |
| `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: related-keyword (keyword 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": "keyword",
  "seed": "coffee grinder",
  "keyword": "best coffee grinder",
  "depth": 1,
  "searchVolume": 9900,
  "cpc": 0.8,
  "competition": 1,
  "competitionLevel": "HIGH",
  "keywordDifficulty": 22,
  "intent": "commercial",
  "relatedKeywords": [
    "best burr grinder",
    "coffee grinder electric"
  ],
  "locationCode": 2840,
  "languageCode": "en",
  "input": "coffee grinder",
  "status": "ok",
  "charged": true,
  "chargedEvent": "related-keyword",
  "source": "dataforseo",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}
```

## Related

- [Keyword Suggestions & Research Tool](https://www.sfoln.com/actors/keyword-suggestions.md) (`sfoln/keyword-suggestions`)
- [Keyword Difficulty Checker](https://www.sfoln.com/actors/keyword-difficulty.md) (`sfoln/keyword-difficulty`)
- [Ranked Keywords Checker for Any Domain](https://www.sfoln.com/actors/ranked-keywords.md) (`sfoln/ranked-keywords`)
- [Competitor Domains Finder (SEO)](https://www.sfoln.com/actors/competitor-domains.md) (`sfoln/competitor-domains`)

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