# Keyword Suggestions & Research Tool (`sfoln/keyword-suggestions`)

Turn a seed keyword into hundreds of long-tail keyword ideas that contain it, each with Google search volume, CPC, competition, keyword difficulty, search intent and 12-month trend. $0.045 per seed ($45 per 1,000) + $0.70 per 1,000 suggestions.

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

Keyword Suggestions & Research Tool turns a seed keyword into hundreds of long-tail keyword ideas that contain it, each with Google search volume, CPC, paid competition, keyword difficulty, search intent and a 12-month trend (DataForSEO Labs data). Ideal for content planning, SEO briefs, PPC research and AI agents building topic clusters. Suggestions come in the order DataForSEO returns them, and you pay $0.045 per seed plus $0.70 per 1,000 suggestions you actually receive.

## Price per delivered record

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

MCP client configuration:

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

Example prompt: Give me 50 long-tail keyword ideas for "coffee grinder" in the US with search volume, keyword difficulty and intent, sorted by volume.

## Input

Enter one or more seed keywords. Each seed returns up to `limitPerSeed` keyword ideas that contain the seed, in the order DataForSEO returns them.

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `seedKeywords` (required) | array | — | Seed keywords: Seed keywords, one per line. Every suggestion contains the seed phrase (e.g. "coffee grinder" → "best burr coffee grinder"). Accounts on the Apify free plan can process up to 5 seed keywords per run. |
| `limitPerSeed` | integer | `100` | Suggestions per seed: Maximum suggestions returned per seed, in the order DataForSEO returns them. Each suggestion is billed as keyword-suggestion. |
| `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. |
| `includeSeedKeyword` | boolean | `false` | Include the seed keyword itself: Also return a record with the seed keyword's own metrics (billed as one extra keyword-suggestion). |
| `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 suggestion record. |

Example input:

```json
{
  "seedKeywords": [
    "coffee grinder"
  ],
  "limitPerSeed": 10
}
```

## 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: suggestion = one keyword idea; seed = summary of one seed keyword. |
| `seed` | string | Seed: Seed keyword the suggestion was generated from. |
| `keyword` | string | null | Keyword: Suggested keyword. |
| `isSeedKeyword` | boolean | Is seed: True for the seed keyword's own record (includeSeedKeyword). |
| `searchVolume` | integer | null | Search volume: Average monthly Google searches. |
| `cpc` | number | null | CPC (USD): Average cost per click in USD. |
| `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. |
| `searchIntent` | string | null | Search intent: Main intent: informational \| navigational \| commercial \| transactional. |
| `secondaryIntents` | array | Secondary intents: Other detected intents. |
| `lowTopOfPageBid` | number | null | Low top-of-page bid: USD. |
| `highTopOfPageBid` | number | null | High top-of-page bid: USD. |
| `trendMonthlyPct` | number | null | Trend (month): Search volume change vs previous month, %. |
| `trendQuarterlyPct` | number | null | Trend (quarter): Change vs previous quarter, %. |
| `trendYearlyPct` | number | null | Trend (year): Change vs previous year, %. |
| `monthlySearches` | array | Monthly searches: [{year, month, searchVolume}], last 12 months. |
| `wordsCount` | integer | null | Words: Number of words in the keyword. |
| `dataUpdatedAt` | string | null | Data updated: When DataForSEO last refreshed the keyword metrics. |
| `locationCode` | integer | null | Location code: DataForSEO location code. |
| `languageCode` | string | null | Language: Language code. |
| `limitRequested` | integer | Limit requested: limitPerSeed as requested (seed records only). |
| `limitUsed` | integer | Limit used: Suggestions requested upstream after the free-plan cap and budget sizing (seed records only). |
| `suggestionsReturned` | integer | Suggestions returned: Suggestion records delivered for this seed, excluding the seed-metrics record (seed records only). |
| `suggestionsCharged` | integer | Suggestions charged: keyword-suggestion events charged for this seed, including the seed-metrics record (seed records only). |
| `totalAvailable` | integer | null | Total available: Total suggestions DataForSEO has for the seed (seed records only). |
| `queryCharged` | boolean | Seed fee charged: Whether keyword-suggestion-query was charged (seed records only). |
| `input` | string | object | 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: keyword-suggestion (suggestion records; seed records are never charged themselves, see queryCharged). |
| `warnings` | array | Warnings: Non-fatal notes (limit reduced, free-plan cap, budget reached...). |
| `source` | string | Source: Upstream data source. |
| `fetchedAt` | string | Fetched at: ISO timestamp. |

Example record:

```json
{
  "recordType": "suggestion",
  "seed": "coffee grinder",
  "keyword": "best burr coffee grinder",
  "isSeedKeyword": false,
  "searchVolume": 2900,
  "cpc": 1.12,
  "competition": 0.98,
  "competitionLevel": "HIGH",
  "keywordDifficulty": 42,
  "searchIntent": "commercial",
  "secondaryIntents": [
    "transactional"
  ],
  "lowTopOfPageBid": 0.5,
  "highTopOfPageBid": 1.9,
  "trendMonthlyPct": 0,
  "trendQuarterlyPct": 22,
  "trendYearlyPct": -18,
  "monthlySearches": [
    {
      "year": 2026,
      "month": 9,
      "searchVolume": 2900
    }
  ],
  "wordsCount": 4,
  "dataUpdatedAt": "2026-10-01 10:00:00 +00:00",
  "locationCode": 2840,
  "languageCode": "en",
  "input": "coffee grinder",
  "status": "ok",
  "charged": true,
  "chargedEvent": "keyword-suggestion",
  "source": "dataforseo",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}
```

## Related

- [Related Keywords Finder](https://www.sfoln.com/actors/related-keywords.md) (`sfoln/related-keywords`)
- [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`)

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