sfoln/keyword-suggestions · SEO tools, Lead generation, Developer tools On request
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.
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
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.
Apify free plan: up to 5 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.
Run
Call it from code, an agent or the Console
This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com
POST https://api.apify.com/v2/actors/sfoln~keyword-suggestions/runs?maxTotalChargeUsd=1
GET https://api.apify.com/v2/actor-runs/{runId} # until status is SUCCEEDED
GET https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json
Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Give me 50 long-tail keyword ideas for "coffee grinder" in the US with search volume, keyword difficulty and intent, sorted by volume.
Input
Input fields
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 *
array
required
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. Range 1–1000.
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. Range 1–1000.
concurrency
integer
3
Concurrency How many seeds are processed in parallel. Range 1–10.
includeRaw
boolean
false
Include raw upstream response Attach the unmodified DataForSEO item to each suggestion record.
Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.
Field
Type
Meaning
recordType
string
Record type suggestion = one keyword idea; seed = summary of one seed keyword. e.g. "suggestion"
seed
string
Seed Seed keyword the suggestion was generated from. e.g. "coffee grinder"
keyword
string | null
Keyword Suggested keyword. e.g. "best burr coffee grinder"
isSeedKeyword
boolean
Is seed True for the seed keyword's own record (includeSeedKeyword).
searchVolume
integer | null
Search volume Average monthly Google searches. e.g. 2900
cpc
number | null
CPC (USD) Average cost per click in USD. e.g. 1.12
competition
number | null
Competition Paid competition 0–1. e.g. 1
competitionLevel
string | null
Competition level LOW | MEDIUM | HIGH. e.g. "HIGH"
keywordDifficulty
integer | null
Keyword difficulty Organic ranking difficulty 0–100. e.g. 42
searchIntent
string | null
Search intent Main intent: informational | navigational | commercial | transactional. e.g. "commercial"
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 e.g. "ok"
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).