Keyword Difficulty Checker
Pricing
from $1.00 / 1,000 results
Keyword Difficulty Checker
Estimate SEO keyword difficulty in bulk from live Google SERP signals. Find low-competition keywords, easy-win topics, and SERP risks before writing.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Group Oject
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
0
Monthly active users
15 days ago
Last modified
Categories
Share
Estimate SEO keyword difficulty in bulk from live Google SERP signals — and surface your easiest ranking opportunities first.
Drop in a list of keywords and get back a 0–100 difficulty score for each, based on what's actually ranking on Google right now: how many high-authority sites hold the top 10, how optimized their titles are, how many ads and SERP features crowd the page, and how concentrated the domains are.
Setup: supply your SerpApi key in the secret
serpApiKeyfield, add keywords, and run. Provider quotas and charges are separate from Actor event fees.
What it does
For each keyword, the Actor pulls the live Google SERP (via SerpApi) and computes a transparent difficulty estimate from observable signals:
| Signal | What it measures |
|---|---|
| Authority | Share of the top 10 held by high-authority domains (Wikipedia, Amazon, Forbes, .gov/.edu, …) |
| Title optimization | Share of top-10 titles containing your exact keyword |
| SERP features | Featured snippet + People-Also-Ask boxes that push organic results down |
| Ads | Number of paid results (commercial competition) |
| Domain concentration | How few unique domains control the top 10 |
These combine into a 0–100 difficulty score and a plain-English rating (very easy → very hard) with a recommended action.
Why it's honest
This is a SERP-based estimate, not a backlink-based metric like Ahrefs/SEMrush KD. It answers "how contested and well-optimized is this SERP?" — which is exactly what you can observe without proprietary link data. Every weight is in plain code in src/difficulty.ts:
difficulty = authority*0.35 + titleOptimization*0.25 + serpFeatures*0.15+ ads*0.15 + domainConcentration*0.10 (clamped 0–100)
No black box. Tune the weights to your niche if you want.
Who it's for
- Content & SEO teams — prioritize the keywords you can actually rank for.
- Bloggers & affiliates — find low-competition "easy win" topics.
- Agencies — bulk-qualify a client's keyword list before committing hours.
- PPC marketers — gauge commercial competition (ad density) per term.
Popular SEO use cases
- Easy-win keyword finder - sort large keyword lists by low difficulty and clear recommended action.
- Affiliate keyword qualification - check buyer-intent keywords before writing reviews or comparison pages.
- SaaS content prioritization - compare solution, alternative, and "best software" SERPs.
- Local SEO difficulty checks - estimate competition for city + service keywords.
- eCommerce category planning - score product, category, and modifier keywords before building pages.
- Agency keyword audits - turn client keyword exports into a transparent opportunity report.
Input
| Field | Type | Default | Description |
|---|---|---|---|
keywords | string[] | — | Keywords to check |
keywordsText | string | — | Keywords as text (one per line / comma-separated) |
serpApiKey | string (secret) | — | Required. Free key from serpapi.com |
geo | string | "US" | Google country code |
language | string | "en" | Language code |
maxKeywords | integer | 100 | Max keywords to process |
requestDelayMs | integer | 500 | Delay between lookups |
maxConcurrency | integer | 3 | Parallel lookups |
One SERP lookup is consumed per keyword.
Example input
{"keywords": ["best coffee maker", "ai seo tools", "how to start a blog"],"geo": "US","language": "en","serpApiKey": "@SERPAPI_KEY"}
More in examples/.
Output
One dataset row per keyword:
{"keyword": "ai seo tools","difficultyScore": 64,"difficultyLabel": "hard","authorityScore": 70,"titleOptimizationScore": 80,"serpFeatureScore": 50,"adsScore": 100,"domainConcentrationScore": 10,"highAuthorityCount": 7,"exactTitleMatches": 8,"uniqueDomains": 9,"adsCount": 4,"hasFeaturedSnippet": true,"peopleAlsoAskCount": 4,"topDomains": ["hubspot.com", "semrush.com", "..."],"recommendedAction": "Hard — only with strong domain authority and link building.","source": "serpapi-google","error": null}
Key-value store outputs
EASY_WINS— your lowest-difficulty keywords (the money output)SUMMARY— counts by rating, average difficulty, easiest + hardestERRORS— any failed lookups
Limitations & honesty
- This is a SERP-signal estimate, not a backlink-authority score. Treat it as directional.
- Results vary by
geoandlanguage— a keyword can be easy in one market, hard in another. - The authority-domain list is curated + TLD heuristics (
.gov/.edu); it won't recognize every strong niche site. - One SerpApi lookup per keyword — mind your monthly quota on big lists.
Related tools
- Google Autocomplete Keyword Scraper — discover the keywords to check here.
- Google Trends Keyword Monitor — see which of them are rising.
- Google Trends Content Calendar Generator — schedule the winners.
A natural workflow: discover (Autocomplete) → qualify (this) → prioritize (Trends) → schedule (Calendar).
Changelog
See CHANGELOG.md.
Pricing and billing
Base result price checked September 14, 2026: $1.00 per 1,000 dataset items ($0.001 each). 100 result items cost $0.10 in result fees.
The separate Actor start event is $0.00005 per billable start unit, with one unit per GB of configured memory and a minimum of one. It applies even when a run returns no results.
Each keyword report is a dataset item. Scores are heuristic estimates, not a ranking guarantee. SerpApi credentials and any provider charges are separate.
The live Pricing tab is authoritative for current rates, tier discounts and any separately charged usage. Set a maximum run charge and inspect a small sample before scaling. Charges from an external provider, where used, are not controlled by the Apify run-charge limit.
