Keyword Density Checker - Words, Bigrams & Trigrams per Page
Pricing
from $1.60 / 1,000 analyzed pages
Keyword Density Checker - Words, Bigrams & Trigrams per Page
Strips nav, footer and boilerplate from a page, then counts top keywords, 2-word and 3-word phrases with density % and word-cloud weights. Up to 50 pages per run. $0.002 per page; HTTP errors and failed fetches are free. Input: {"urls":["https://en.wikipedia.org/wiki/Web_scraping"],"topN":15}
Pricing
from $1.60 / 1,000 analyzed pages
Rating
0.0
(0)
Developer
Broke to Built
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
6 hours ago
Last modified
Share
Webpage Keyword Density — Main-Content SEO Analysis + Word-Cloud Weights
Send a URL, get the most used words and 2- and 3-word phrases in its main content with density %, after navigation and footer text is stripped.
| You give it | You get back | You pay (Free plan) |
|---|---|---|
| One URL or a list of up to 50 | Word count, top keywords and phrases with count, density % and 1-100 word-cloud weight | $0.002 per page |
Pay per result only: no subscription, no start fee. Unreachable pages and HTTP errors are not charged. Paid Apify plans get Store discounts on the price above.
Try it in one click
The input form is already filled in with this example. Press Start and you get the output below.
{"url": "https://en.wikipedia.org/wiki/Search_engine_optimization"}
Real output from that exact input (run on 2026-09-24; long arrays shortened to a few entries and long text cut for display):
[{"url": "https://en.wikipedia.org/wiki/Search_engine_optimization","ok": true,"status": 200,"extraction": {"usedScope": "main","boilerplateBlocksRemoved": 6},"wordCount": 3371,"totalTokens": 5506,"topKeywords": [{"term": "search","count": 183,"densityPct": 5.429,"weight": 100},{"term": "google","count": 84,"densityPct": 2.492,"weight": 46}],"topBigrams": [{"term": "search engine","count": 69,"densityPct": 2.047},{"term": "search engines","count": 33,"densityPct": 0.979}],"topTrigrams": [{"term": "search engine optimization","count": 14,"densityPct": 0.415},{"term": "search engine watch","count": 10,"densityPct": 0.297}]}]
What does this page actually rank for? Fetch any URL and get keyword density of its main content — nav, header, footer and sidebar boilerplate stripped first, semantic <main>/<article> preferred — as ranked unigrams, bigrams and trigrams with exact density percentages, plus 1-100 weights ready to feed a word-cloud renderer. Up to 50 URLs per run, online, by API, or as an agent tool via Apify MCP.
The extraction step matters: run density on a raw page and "menu", "login" and "privacy policy" pollute the table. Here the percentages describe the content search engines index — and every record reports which region was analyzed.
Analyzing pasted text for topical phrases instead? Use our sibling Text Keyword Extractor — RAKE phrase extraction, no fetching, cheaper per item.
What you get
- topKeywords — unigrams:
{term, count, densityPct, weight}—weightis 1-100 scaled to the top term, plug it straight into any word-cloud library - topBigrams / topTrigrams — multi-word phrases with counts + density percentages (the real SEO signal)
- extraction —
usedScope+boilerplateBlocksRemoved: proof of what was analyzed - wordCount / totalTokens of the extracted content
- Fail-soft: an unfetchable URL or HTTP error page never fails the run —
{ok: false, error}, never charged.
Input
{ "url": "https://yoursite.com/landing-page", "topN": 30, "minLength": 3 }
Bulk: { "urls": ["...", "..."], "maxUrls": 50 }
Output (real run, trimmed)
{"url": "https://en.wikipedia.org/wiki/Search_engine_optimization","ok": true,"extraction": { "usedScope": "main", "boilerplateBlocksRemoved": 6 },"wordCount": 3400,"topKeywords": [{ "term": "search", "count": 112, "densityPct": 3.294, "weight": 100 },{ "term": "seo", "count": 54, "densityPct": 1.588, "weight": 48 }],"topBigrams": [{ "term": "search engine", "count": 71, "densityPct": 2.088 }],"topTrigrams": [{ "term": "search engine optimization", "count": 21, "densityPct": 0.617 }]}
Pricing
$0.002 per page analyzed — fetch + main-content extraction + all three n-gram tables + weights. No start fee. Unfetchable and error pages are never charged.
Measured against store incumbents (2026-08-07): easyapi/keyword-density-checker charges $0.09 start + $0.00299 per item, andok/keyword-density-analyzer $0.01 start + $0.001 per item. One page here costs $0.002 vs $0.011-$0.093 there.
Honest limits
- Static HTML fetch — JS-rendered pages (empty-shell SPAs) yield little text and report low word counts honestly.
- Main-content extraction is heuristic (semantic tags + boilerplate removal, no headless browser); div-soup pages fall back to whole-body-minus-boilerplate —
extraction.usedScopealways says which happened. - English stopword list; density on other Latin-script languages works, but stopword filtering is English-tuned.
- Density describes the page as served — it is a diagnostic, not a target ("2% keyword density" folklore is not a ranking factor; the bigram/trigram tables showing what the page emphasizes are the useful part).
FAQ
How is this different from your Text Keyword Extractor? This owns the URL problem: fetching, HTTP handling, main-content extraction, density percentages against the page's word count, and n-gram tables. The text sibling does RAKE phrase extraction on text you already have.
Can I build a word cloud from this?
Directly — topKeywords[].weight is the normalized 1-100 size value cloud renderers take. No separate word-cloud tool needed.
Why bigrams and trigrams? Single-word density is noise for SEO; "search engine optimization" appearing 21 times is signal. Phrase tables show what the page actually emphasizes.
Can I compare my page against a competitor's? Run both URLs in one batch and diff the tables — that is the fastest content-gap check there is.
Why did some rows come back ok: false?
DNS/timeout failures or HTTP 4xx/5xx — error pages are not analyzed. Recorded, never charged.
Use from code or AI agents
curl -s "https://api.apify.com/v2/acts/EliAI~webpage-keyword-density/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-X POST -H 'Content-Type: application/json' \-d '{"urls": ["https://yoursite.com/page", "https://competitor.com/page"]}'
Agents: connect Apify MCP and call the EliAI/webpage-keyword-density tool.
- Capability: fetch URLs, extract main content, compute uni/bi/tri-gram keyword density + word-cloud weights
- Required input:
url(string) orurls(array) - Returns: one record per URL;
topKeywords/topBigrams/topTrigrams+extractionsummarize it - Bounded: 50 URLs per run,
topNup to 200; failures isolate per URL - Side effects: none (one GET per page)
For AI agents
This Actor is built to be called by software, not just by people.
- Mount it directly as an MCP tool — no Store search, no ranking, just this one tool:
https://mcp.apify.com/?actors=eliai/webpage-keyword-density - Or call it over HTTP and get the results in the same request:
POST https://api.apify.com/v2/acts/eliai~webpage-keyword-density/run-sync-get-dataset-items - Costs are predictable before you call. Pricing is pay-per-event (see Pricing above), so an agent can budget a run in advance instead of discovering the bill afterwards.
- Send only the field you mean. If you pass the bulk field, it is used on its own; the single-value field is a fallback, never merged into your request. You are charged for the items you sent and nothing else.
Who uses it
- SEO writers checking which bigrams and trigrams dominate a competitor's ranking page
- Content editors spotting over-repeated terms in a draft after it goes live
- Agencies comparing main-content keyword density across the top pages for a query
- Designers generating word clouds for a page from the returned 1-100 weights
- Marketers checking a landing page mentions its target phrase, excluding nav and footer text
Changelog
- 2026-09-24: New summary at the top of this page: what you send, what you get, the price, and a real output from the prefilled example.