# Bulk Keyword Difficulty Checker - KD & Search Intent

> Check SEO keyword difficulty (KD 0-100) and search intent for thousands of keywords at once, in 90+ countries and languages. Find easy keywords to rank for. Up to 1,000 keywords per request, $5 per 1,000 keywords.

- Category: Keyword data
- Price: $5 per 1,000 × keyword difficulty, billed per result by Apify (no subscription); any other billed events are listed on the Store page. Cap any run with `maxTotalChargeUsd`.
- Store page: https://apify.com/wrenfield-data/keyword-difficulty-checker
- Human page: https://wrenfielddata.com/tools/keyword-difficulty-checker/
- OpenAPI 3 spec: https://api.apify.com/v2/acts/wrenfield-data~keyword-difficulty-checker/builds/default/openapi.json
- MCP tool: https://mcp.apify.com?tools=wrenfield-data/keyword-difficulty-checker (appears as `wrenfield-data--keyword-difficulty-checker`)

## Call it

Synchronous run that returns the dataset rows as JSON (use `/runs` for long jobs and poll; see the OpenAPI spec):

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/wrenfield-data~keyword-difficulty-checker/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["keyword research", "seo tools", "how to start a blog", "best running shoes for flat feet", "running shoes"], "location": "United States", "language": "English", "includeSearchIntent": true}'
```

## Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `keywords` | array | yes | `["keyword research", "seo tools", "how to start a blog", "best running shoes for flat feet", "running shoes"]` | Keywords to check, one per line (thousands are fine; they're sent in batches of 1,000). Keywords are trimmed, lower-cased and de-duplicated. |
| `location` | string |  | `"United States"` | Country to measure difficulty in: name (United States), 2-letter code (DE) or location code (2840). |
| `language` | string |  |  | Language name or code (English, es). Leave empty for the main language of the country. |
| `includeSearchIntent` | boolean |  | `true` | Also classify each keyword as informational, navigational, commercial or transactional (small extra charge per keyword, see Pricing). |

## Example input

```json
{
  "keywords": [
    "keyword research",
    "seo tools",
    "how to start a blog",
    "best running shoes for flat feet",
    "running shoes"
  ],
  "location": "United States",
  "language": "English",
  "includeSearchIntent": true
}
```

## Output fields

One flat row per result:

| Field | Type | Description |
|---|---|---|
| `keyword` | string | Keyword (normalized, lower-case) |
| `keyword_difficulty` | integer | SEO keyword difficulty, 0-100 (higher = harder to rank). null when the keyword is not in the database |
| `difficulty_level` | string | Difficulty band: very easy, easy, possible, difficult, hard or very hard |
| `search_intent` | string | Main search intent: informational, navigational, commercial or transactional |
| `search_intent_probability` | number | Confidence of the main intent, 0-1 |
| `secondary_intents` | array | Other likely intents |
| `location` | string | Country the data is for, e.g. "United States" |
| `language` | string | Language name, e.g. "English" |
| `found` | boolean | True when a difficulty score was found (only these rows are charged) |
| `note` | string | Explanation when no score was found |
| `scraped_at` | string | When this row was produced (ISO 8601, UTC) |

## Notes

- Auth: an Apify API token as `Authorization: Bearer <token>`; the MCP server also supports OAuth sign-in.
- Failed or empty results are not charged on most tools; check the pricing on the Store page.
- Questions: hello@wrenfielddata.com
