Home / Tools / Bulk Keyword Difficulty Checker
Keyword research
Bulk Keyword Difficulty Checker
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.
- Price: $5 per 1,000 × keyword difficulty
- Prefilled example: finished in 4 s on Oct 19, 2026 (Saved 5 keywords (5 with difficulty, 5 with intent).)
- Works with: Apify Console, REST API, Python, JavaScript, MCP (Claude, Cursor, VS Code), n8n, Make, Zapier
- Last updated: 2026-10-19
Sample output
Real rows from the prefilled example run on Oct 19, 2026.
Full JSON of one real output row (4 rows in the example dataset)
{
"keyword": "standing desk",
"keyword_difficulty": 38,
"difficulty_level": "possible",
"search_intent": "transactional",
"search_intent_probability": 0.4445,
"secondary_intents": [
"informational"
],
"location": "United States",
"language": "English",
"found": true,
"scraped_at": "2026-10-19T02:07:02Z"
}Output fields
From the Actor's dataset schema. Every row has the same flat shape, so it drops straight into a spreadsheet, a database or an agent's context.
| 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) |
Pricing
Pay per result, billed by Apify. No subscription and no minimum. Discount tiers apply automatically on paid Apify plans.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| Keyword difficulty main Charged once per keyword returned with a keyword difficulty score. | $0.005 | $0.0045 | $0.0042 | $0.004 |
| Search intent Charged once per keyword returned with search intent (optional add-on). | $0.0015 | $0.0014 | $0.0013 | $0.0012 |
| Keyword batch Charged once per data request of up to 1,000 keywords (search intent is a second request). | $0.025 | $0.025 | $0.025 | $0.025 |
Examples on the Free plan: 100 keyword difficultys = $0.50, 1,000 keyword difficultys = $5, 10,000 keyword difficultys = $50. Apify's Free plan includes $5 of monthly usage credit. Prices read from the Apify API at build time (2026-10-19).
Example input
This is the prefilled input on the Store page. Keep it and click Start to see real data in seconds.
{
"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
}Use it from code, no-code or an AI agent
cURL (one request, returns rows)
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}'Python
# pip install apify-client
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("wrenfield-data/keyword-difficulty-checker").call(
run_input={
"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
},
max_total_charge_usd=1.00, # hard cap for this run
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)JavaScript / Node
// npm i apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('wrenfield-data/keyword-difficulty-checker').call({
"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
}, { maxTotalChargeUsd: 1 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);MCP (Claude, Cursor, VS Code, any MCP client)
{
"mcpServers": {
"wrenfield-keyword-difficulty-checker": {
"url": "https://mcp.apify.com?tools=wrenfield-data/keyword-difficulty-checker"
}
}
}Remote MCP server hosted by Apify. Sign in with OAuth on first use, or send Authorization: Bearer <APIFY_TOKEN>. The tool appears as wrenfield-data--keyword-difficulty-checker. More client setups on the MCP page.
n8n, Make, Zapier
Use the official Apify node or app, pick Run Actor, enter wrenfield-data/keyword-difficulty-checker and paste the input JSON above. Then read the run's dataset items. Ready-made n8n workflows are on the n8n templates page.
FAQ
How much does Bulk Keyword Difficulty Checker cost?
$0.005 per keyword difficulty on the Apify Free plan ($5 per 1,000), billed per result by Apify with no subscription. Plus $0.0015 per search intent. Plus $0.025 per keyword batch. Higher Apify plans get the discounted tiers shown in the pricing table. You can cap any run with a maximum cost.
How is keyword difficulty calculated?
It's based on the strength (backlink profiles) of the pages that currently rank in Google's top 10 for the keyword, on a logarithmic 0-100 scale.
Is this the same as Google Ads "competition"?
No. Google Ads competition measures advertiser demand. Keyword difficulty measures how hard it is to rank organically.
Why is a keyword returned with found: false?
It's too rare or new to have a score yet. You aren't charged the KD fee for it.
Related tools
Keyword Search Volume
Google Keyword Planner volume, CPC, competition and 12-month trends, no Ads account.
Keyword Research Tool Launching soon
Keyword ideas with volume, KD, intent and SERP features in one row.
Competitor Keywords
Every keyword a domain ranks for, with position, volume and traffic.
Google Autocomplete Expander Launching soon
Long-tail and question keywords from Google and YouTube suggestions.
People Also Ask Scraper Launching soon
PAA question trees, related searches and AI Overview text.
Google Trends Scraper
Interest over time, by region, related queries and Trending Now.
Compare and plan
Try Bulk Keyword Difficulty Checker now
Open it on Apify, keep the prefilled example and click Start. The Apify Free plan includes $5 of monthly credit, no card needed.
Open on Apify