{"name":"keyword-difficulty","id":"sfoln/keyword-difficulty","title":"Keyword Difficulty Checker","description":"Check Google keyword difficulty (0–100) in bulk for any country and language, up to 1,000 keywords per batch; only keywords that get a score are charged. $0.045 per batch ($45 per 1,000 batches) + $0.60 per 1,000 scored keywords.","version":"0.1","status":"ready","family":{"id":"seo-search","name":"SEO & search","description":"Google search, news and Scholar results, keyword volumes and difficulty, backlinks, ranked keywords, competitor domains and on-page audits.","actors":13},"categories":["SEO_TOOLS","LEAD_GENERATION","DEVELOPER_TOOLS"],"availability":"on_request","seoTitle":"Keyword Difficulty API – Bulk KD Scores (0–100)","seoDescription":"Keyword difficulty checker API: bulk Google KD scores (0–100) for up to 1,000 keywords per batch, any country. $0.045 per batch + $0.60 per 1,000 keywords.","summary":"Keyword Difficulty Checker gets the Google keyword difficulty (KD, 0–100) for thousands of keywords at once, for any country and language. Keyword difficulty estimates how hard it is to reach the Google top 10 for a keyword. It is a logarithmic score based on the backlink profiles of the pages that currently rank (DataForSEO Labs data). Use it to sort keyword lists by effort, plan content and spot easy wins, or let AI agents prioritise topics. Keywords are scored in batches of up to 1,000 per request, and you pay $0.045 per batch plus $0.60 per 1,000 keywords that actually get a score.","pricing":{"model":"pay-per-event","currency":"USD","billedBy":"Apify","freePlanMaxItemsPerRun":5,"events":[{"name":"keyword-difficulty-batch","title":"Keyword batch","description":"Charged once per upstream request (batch of up to 1,000 keywords) that was processed.","priceUsd":0.045},{"name":"keyword-difficulty","title":"Keyword difficulty score","description":"Charged once per keyword that received a difficulty score.","priceUsd":0.0006}]},"input":{"description":"Paste keywords; they are scored in batches of up to 1,000 per upstream request.","required":["keywords"],"fields":[{"name":"keywords","title":"Keywords","type":"array","required":true,"description":"Keywords to score, one per line (lower-cased and de-duplicated). Up to 1,000 keywords are sent per upstream request (one keyword-difficulty-batch fee per 1,000). Accounts on the Apify free plan can process up to 5 batches per run, with at most 20 keywords scored per batch.","prefill":["coffee grinder","burr coffee grinder","best espresso machine"],"editor":"stringList"},{"name":"location","title":"Location","type":"string","required":false,"description":"DataForSEO location code (2840 = United States, 2826 = United Kingdom, 2276 = Germany) or full location name (e.g. \"United Kingdom\").","default":"2840","editor":"textfield"},{"name":"languageCode","title":"Language code","type":"string","required":false,"description":"Language code, e.g. en, de, fr, es.","default":"en","editor":"textfield"},{"name":"maxKeywords","title":"Max keywords","type":"integer","required":false,"description":"Safety cap on how many keywords are processed in this run.","default":10000,"minimum":1,"maximum":100000},{"name":"concurrency","title":"Concurrency","type":"integer","required":false,"description":"How many batches of 1,000 keywords are processed in parallel.","default":3,"minimum":1,"maximum":6},{"name":"includeRaw","title":"Include raw upstream response","type":"boolean","required":false,"description":"Attach the unmodified DataForSEO item to each result record.","default":false}]},"exampleInput":{"keywords":["coffee grinder","burr coffee grinder","best espresso machine"]},"outputFields":[{"name":"recordType","type":"string","title":"Record type","description":"keyword = one keyword score; batch = summary of one batch of up to 1,000 keywords.","example":"keyword"},{"name":"keyword","type":"string","title":"Keyword","description":"Keyword (lower-cased).","example":"burr coffee grinder"},{"name":"keywordDifficulty","type":"integer | null","title":"Keyword difficulty","description":"Organic ranking difficulty 0–100 (logarithmic): how hard it is to reach the Google top 10.","example":38},{"name":"locationCode","type":"integer | null","title":"Location code","description":"DataForSEO location code.","example":2840},{"name":"languageCode","type":"string | null","title":"Language","description":"Language code.","example":"en"},{"name":"batch","type":"integer","title":"Batch","description":"Batch number (batch records only)."},{"name":"keywordsInBatch","type":"integer","title":"Keywords in batch","description":"Batch records only."},{"name":"keywordsSent","type":"integer","title":"Keywords sent","description":"Keywords sent upstream (batch records only)."},{"name":"keywordsWithDifficulty","type":"integer","title":"Scored keywords","description":"Keywords with a score, each charged keyword-difficulty (batch records only)."},{"name":"keywordsWithoutData","type":"integer","title":"Keywords without data","description":"Batch records only."},{"name":"keywordsSkippedInvalid","type":"integer","title":"Invalid keywords","description":"Keywords rejected as invalid and not sent (batch records only)."},{"name":"keywordsSkippedBudget","type":"integer","title":"Keywords over budget","description":"Keywords not scored or not delivered because the maximum cost per run was reached (batch records only)."},{"name":"keywordsSkippedFreePlan","type":"integer","title":"Keywords over the free-plan limit","description":"Keywords beyond the free-plan limit of 20 per batch (batch records only)."},{"name":"queryCharged","type":"boolean","title":"Batch fee charged","description":"Whether keyword-difficulty-batch was charged for this batch (batch records only)."},{"name":"input","type":"string | object | null","title":"Input","description":"Keyword (keyword records) or {batch, keywords} (batch records)."},{"name":"status","type":"string","title":"Status","description":"ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan","example":"ok"},{"name":"charged","type":"boolean","title":"Charged","description":"Whether this record incurred a pay-per-event charge."},{"name":"chargedEvent","type":"string","title":"Charged event","description":"keyword-difficulty (keyword records)."},{"name":"warnings","type":"array","title":"Warnings","description":"Non-fatal notes (limit reduced, budget reached...)."},{"name":"error","type":"object","title":"Error","description":"{code, message, provider?} when status is not ok."},{"name":"source","type":"string","title":"Source","description":"Upstream data source."},{"name":"fetchedAt","type":"string","title":"Fetched at","description":"ISO timestamp."}],"outputExample":{"recordType":"keyword","keyword":"burr coffee grinder","keywordDifficulty":38,"locationCode":2840,"languageCode":"en","input":"burr coffee grinder","status":"ok","charged":true,"chargedEvent":"keyword-difficulty","source":"dataforseo","fetchedAt":"2026-10-14T10:00:00.000Z"},"faq":[],"mcpExamplePrompt":"Check the Google keyword difficulty in the US for \"coffee grinder\", \"burr coffee grinder\" and \"best espresso machine\" and tell me which is easiest to rank for.","related":["keyword-suggestions","related-keywords","ranked-keywords"],"urls":{"site":"https://www.sfoln.com/actors/keyword-difficulty/","siteJson":"https://www.sfoln.com/actors/keyword-difficulty.json","siteMarkdown":"https://www.sfoln.com/actors/keyword-difficulty.md","runSync":"https://api.apify.com/v2/actors/sfoln~keyword-difficulty/run-sync-get-dataset-items","runAsync":"https://api.apify.com/v2/actors/sfoln~keyword-difficulty/runs","mcp":"https://mcp.apify.com?tools=sfoln/keyword-difficulty","requestAccess":"mailto:contact@sfoln.com?subject=Access%20request%3A%20Keyword%20Difficulty%20Checker%20(sfoln%2Fkeyword-difficulty)&body=Please%20publish%20keyword-difficulty.%20What%20we%20plan%20to%20use%20it%20for%3A"},"publisher":{"name":"SFOLN LLC","apifyUsername":"sfoln","url":"https://www.sfoln.com","apifyProfile":"https://apify.com/sfoln","email":"contact@sfoln.com"},"generatedAt":"2026-10-22T04:28:58.477Z"}