Webpage Keyword Density - Main-Content SEO + Cloud Weights
Pricing
from $1.60 / 1,000 analyzed pages
Webpage Keyword Density - Main-Content SEO + Cloud Weights
Keyword density of any URL's MAIN content (nav/footer boilerplate stripped first): ranked unigrams + bigrams + trigrams with density %, plus 1-100 word-cloud weights. Up to 50 URLs per run. $0.002 per page vs $0.011-$0.093 measured incumbents; HTTP errors never charged. Extraction scope reported.
Pricing
from $1.60 / 1,000 analyzed pages
Rating
0.0
(0)
Developer
Broke to Built
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Webpage Keyword Density — Main-Content SEO Analysis + Word-Cloud Weights
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 - Pay with x402, without an Apify account. This Actor is whitelisted for agentic payments, so an agent holding USDC on Base can buy a prepaid token and spend it here. The minimum purchase is $1, the token balance is an absolute spending cap, and it expires 14 days after purchase.
- 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.