SFOLN

Catalogue / SEO & search

Ranked Keywords Checker for Any Domain

sfoln/ranked-keywords · SEO tools, Lead generation, Developer tools On request

Find every Google keyword a domain ranks for, with position, ranking URL, search volume, CPC, keyword difficulty, intent and estimated traffic from DataForSEO Labs. Filter by market, volume and position. $0.60 per 1,000 keywords + $0.045 per domain.

About

What it does

Ranked Keywords Checker for Any Domain shows which Google keywords any website ranks for. For each keyword you get the position, the ranking URL, monthly search volume, CPC, competition, keyword difficulty, search intent and the estimated traffic it brings (DataForSEO Labs data). Use it for competitor research, content gap analysis, SEO audits and client reporting, or as a tool for AI agents. Choose the market, filter by minimum volume or maximum position, and pay only for the keywords you receive.

Price

Price per delivered record

EventPricePer 1,000Charged for
Domain query
ranked-keywords-query
$0.045$45 / 1,000Charged once per domain the upstream processed (covers the per-request fee).
Ranked keyword
ranked-keyword
$0.0006$0.60 / 1,000Charged once per ranked keyword 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

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~ranked-keywords/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains":["dataforseo.com"],"limitPerDomain":10}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/ranked-keywords"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~ranked-keywords/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: Show the top 50 Google keywords that ahrefs.com ranks for in the United States, with position, search volume and estimated traffic.

Input

Input fields

Enter domains (or URLs). Each domain returns up to `limitPerDomain` keywords it ranks for in Google.

FieldTypeDefaultMeaning
domains *arrayrequiredDomains
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.
limitPerDomaininteger100Keywords per domain
Maximum keywords returned per domain. Each keyword is billed as ranked-keyword. Range 1–1000.
locationstring"2840"Location
DataForSEO location code (2840 = United States, 2826 = United Kingdom, 2276 = Germany) or full location name (e.g. "United Kingdom").
languageCodestring"en"Language code
Language code, e.g. en, de, fr, es.
minSearchVolumeinteger0Minimum search volume
Only keywords with at least this many monthly searches (0 = no filter). Range 0–….
maxPositioninteger0Maximum position
Only keywords where the domain ranks at this absolute position or better (0 = no filter, e.g. 10 = page one). Range 0–100.
itemTypesarray["organic"]SERP element types
Which Google result types count as a ranking.
sortBystring"search_volume"Sort by
Which keywords come first (and are kept when the limit cuts the list). One of "search_volume", "traffic", "position".
maxDomainsinteger100Max domains
Safety cap on how many domains are processed in this run. Range 1–1000.
concurrencyinteger3Concurrency
How many domains are processed in parallel. Range 1–6.
includeRawbooleanfalseInclude raw upstream response
Attach the unmodified DataForSEO item to each result record.
Example input
{
  "domains": [
    "dataforseo.com"
  ],
  "limitPerDomain": 10
}

Output

One record per input item

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.

FieldTypeMeaning
recordTypestringRecord type
keyword = one ranked keyword; summary = one per domain. e.g. "keyword"
domainstringDomain
Domain the keywords belong to. e.g. "dataforseo.com"
keywordstringKeyword
Keyword the domain ranks for. e.g. "serp api"
positioninteger | nullPosition
Absolute rank among all Google SERP elements (rank_absolute). e.g. 3
rankGroupinteger | nullRank group
Rank among results of the same type.
serpItemTypestring | nullSERP item type
organic | paid | featured_snippet | local_pack | ai_overview_reference. e.g. "organic"
urlstring | nullRanking URL
The URL of the domain that ranks.
titlestring | nullTitle
Title shown in Google.
searchVolumeinteger | nullSearch volume
Average monthly Google searches. e.g. 2400
cpcnumber | nullCPC (USD)
Average cost per click.
competitionnumber | nullCompetition
Paid competition 0–1.
competitionLevelstring | nullCompetition level
LOW | MEDIUM | HIGH.
keywordDifficultyinteger | nullKeyword difficulty
Organic ranking difficulty 0–100.
searchIntentstring | nullSearch intent
informational | navigational | commercial | transactional.
etvnumber | nullEstimated traffic
Estimated monthly organic visits from this keyword.
trafficCostUsdnumber | nullTraffic value (USD)
Estimated monthly cost of this traffic as ads.
isFeaturedSnippetbooleanFeatured snippet
True when the ranking is a featured snippet.
serpFeaturesarraySERP features
Element types present on the SERP.
lastUpdatedstring | nullLast updated
When DataForSEO last checked this SERP.
locationCodeinteger | nullLocation code
DataForSEO location code.
languageCodestring | nullLanguage
Language code.
limitRequestedintegerLimit requested
limitPerDomain as requested (summary records only).
limitUsedintegerLimit used
Keywords requested upstream after the free-plan cap and budget sizing (summary records only).
keywordsReturnedintegerKeywords returned
Summary records only.
totalAvailableinteger | nullTotal available
Total ranked keywords matching the filters (summary records only).
queryChargedbooleanDomain fee charged
Whether ranked-keywords-query was charged (summary records only).
inputstring | object | nullInput
Domain or URL as entered.
statusstringStatus
ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan e.g. "ok"
chargedbooleanCharged
Whether this record incurred a pay-per-event charge.
chargedEventstringCharged event
ranked-keyword (keyword records).
warningsarrayWarnings
Non-fatal notes (limit reduced, budget reached...).
errorobjectError
{code, message, provider?} when status is not ok.
sourcestringSource
Upstream data source.
fetchedAtstringFetched at
ISO timestamp.
Example record
{
  "recordType": "keyword",
  "domain": "dataforseo.com",
  "keyword": "serp api",
  "position": 3,
  "rankGroup": 2,
  "serpItemType": "organic",
  "url": "https://dataforseo.com/apis/serp-api",
  "title": "SERP API",
  "searchVolume": 2400,
  "cpc": 12.5,
  "competition": 0.31,
  "competitionLevel": "LOW",
  "keywordDifficulty": 58,
  "searchIntent": "commercial",
  "etv": 210.4,
  "trafficCostUsd": 2630,
  "isFeaturedSnippet": false,
  "serpFeatures": [
    "organic",
    "people_also_ask"
  ],
  "lastUpdated": "2026-10-01 08:00:00 +00:00",
  "locationCode": 2840,
  "languageCode": "en",
  "input": "dataforseo.com",
  "status": "ok",
  "charged": true,
  "chargedEvent": "ranked-keyword",
  "source": "dataforseo",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

Machine-readable

This page for agents