# Ranked Keywords Checker for Any Domain (`sfoln/ranked-keywords`)

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.

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

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 per delivered record

| Event | Price | Per 1,000 | Charged for |
| --- | --- | --- | --- |
| Domain query (`ranked-keywords-query`) | $0.045 | $45 / 1,000 | Charged once per domain the upstream processed (covers the per-request fee). |
| Ranked keyword (`ranked-keyword`) | $0.0006 | $0.60 / 1,000 | Charged once per ranked 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~ranked-keywords/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains":["dataforseo.com"],"limitPerDomain":10}'
```

MCP client configuration:

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

Example prompt: Show the top 50 Google keywords that ahrefs.com ranks for in the United States, with position, search volume and estimated traffic.

## Input

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

| 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 | `100` | Keywords per domain: Maximum keywords returned per domain. Each keyword is billed as ranked-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. |
| `minSearchVolume` | integer | `0` | Minimum search volume: Only keywords with at least this many monthly searches (0 = no filter). |
| `maxPosition` | integer | `0` | Maximum position: Only keywords where the domain ranks at this absolute position or better (0 = no filter, e.g. 10 = page one). |
| `itemTypes` | array | `["organic"]` | SERP element types: Which Google result types count as a ranking. |
| `sortBy` | string | `"search_volume"` | Sort by: Which keywords come first (and are kept when the limit cuts the list). One of `"search_volume"`, `"traffic"`, `"position"`. |
| `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": 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: keyword = one ranked keyword; summary = one per domain. |
| `domain` | string | Domain: Domain the keywords belong to. |
| `keyword` | string | Keyword: Keyword the domain ranks for. |
| `position` | integer | null | Position: Absolute rank among all Google SERP elements (rank_absolute). |
| `rankGroup` | integer | null | Rank group: Rank among results of the same type. |
| `serpItemType` | string | null | SERP item type: organic \| paid \| featured_snippet \| local_pack \| ai_overview_reference. |
| `url` | string | null | Ranking URL: The URL of the domain that ranks. |
| `title` | string | null | Title: Title shown in Google. |
| `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. |
| `searchIntent` | string | null | Search intent: informational \| navigational \| commercial \| transactional. |
| `etv` | number | null | Estimated traffic: Estimated monthly organic visits from this keyword. |
| `trafficCostUsd` | number | null | Traffic value (USD): Estimated monthly cost of this traffic as ads. |
| `isFeaturedSnippet` | boolean | Featured snippet: True when the ranking is a featured snippet. |
| `serpFeatures` | array | SERP features: Element types present on the SERP. |
| `lastUpdated` | string | null | Last updated: When DataForSEO last checked this SERP. |
| `locationCode` | integer | null | Location code: DataForSEO location code. |
| `languageCode` | string | null | Language: Language code. |
| `limitRequested` | integer | Limit requested: limitPerDomain as requested (summary records only). |
| `limitUsed` | integer | Limit used: Keywords requested upstream after the free-plan cap and budget sizing (summary records only). |
| `keywordsReturned` | integer | Keywords returned: Summary records only. |
| `totalAvailable` | integer | null | Total available: Total ranked keywords matching the filters (summary records only). |
| `queryCharged` | boolean | Domain fee charged: Whether ranked-keywords-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: ranked-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",
  "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"
}
```

## Related

- [Competitor Domains Finder (SEO)](https://www.sfoln.com/actors/competitor-domains.md) (`sfoln/competitor-domains`)
- [Keyword Difficulty Checker](https://www.sfoln.com/actors/keyword-difficulty.md) (`sfoln/keyword-difficulty`)
- [Related Keywords Finder](https://www.sfoln.com/actors/related-keywords.md) (`sfoln/related-keywords`)
- [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`)

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