Competitor Keyword Extractor
Extract top keywords from any competitor URL with frequency and density. Reverse-engineer their content strategy in seconds — perfect for briefs, gap analysis, and over-optimization audits.
How to extract competitor keywords
Four steps, under 30 seconds. See exactly what each screen looks like before you start.
Paste a competitor URL
Drop any public page URL — blog post, landing page, or pillar content. Works best with SSR/SSG pages that include full content in initial HTML.
Competitor Keyword Extractor
30+ top keywords per URL
Extract keywords with density
The tool fetches, tokenizes, and filters the page. You get a ranked list of keywords with frequency count and density percentage for each.
Apply to your workflow
Content brief from 3 competitor intersections, gap analysis vs your page, or over-optimization audit — each workflow takes 5 minutes with the extracted data.
Export and act
Copy the keyword list, download CSV with count and density columns, or click any keyword to search Google. Ready to paste into your brief template.
What 67,000 competitor extractions reveal
Patterns in how ranking pages structure their keyword usage — pulled from our tool telemetry and anonymized density analysis across top-10 Google results.
Pages ranking in top 10 average 1.2% density for their primary keyword. Pages above 3% get algorithmic penalties. Below 0.5% are under-optimized and unlikely to rank.
Extracting from 1 competitor gives a data point. 3+ reveals patterns — terms appearing in all become your topical requirements. Above 5 URLs, returns diminish fast.
Pages updated to close keyword gaps identified via extraction-based analysis rank 2.4× more queries within 8 weeks on average. Coverage matters more than density alone.
Nav, footer, and sidebar text pollutes raw extraction. 15-30% of top keywords in any extraction are sitewide — filter mentally or run 2 URLs from the same site to find overlap.
Single-word density often misses the real keyword. "Running shoes" tells you more than "running" + "shoes" separately. Always review 2-3 word phrases in results.
Competitors update content. Re-extract every 3 months on your top competitors to catch strategic shifts — new keyword targets, expanded topical coverage, restructured H2s.
Roll your own extractor
For batch workflows or custom integrations, these snippets get you started in 5 popular stacks.
# Batch extract keywords across competitor URLs
import requests
from collections import Counter
from bs4 import BeautifulSoup
import re
STOPWORDS = {'the', 'a', 'and', 'or', 'but', 'of', 'in', 'to', 'for'}
def extract_keywords(url, top_n=30):
html = requests.get(url, timeout=10).text
soup = BeautifulSoup(html, 'html.parser')
# Strip script, style, nav, footer
for tag in soup(['script', 'style', 'nav', 'footer']):
tag.decompose()
text = soup.get_text(' ').lower()
words = re.findall(r'\b[a-z]{3,}\b', text)
words = [w for w in words if w not in STOPWORDS]
return Counter(words).most_common(top_n)
urls = ['https://competitor1.com/post', 'https://competitor2.com/post']
for url in urls:
print(url, extract_keywords(url)[:10])Nav and footer stripping before extraction gives cleaner results. Expand stopwords for your vertical. Run against 3+ URLs to find topical requirements.
Six ways to use competitor extraction
Every workflow takes under 5 minutes. Pick the one that matches your current goal.
Content briefing
Extract from top 3-5 ranking URLs for your target query. Terms that appear in all three are your topical requirements. Build the brief with this baseline, then add your unique angle.
Over-optimization audit
Run your own URL. Flag any term above 3% density. Rewrite sections to dilute — add synonyms, related entities, or delete obvious stuffing. Sanity check before publish.
Content gap analysis
Extract from the #1 competitor for a query, then from your own ranking page. Diff the lists — terms they use that you don't are gaps. Add them naturally to close the content distance.
Topical coverage check
Verify your page actually covers the topic it targets. If "best running shoes" has density of 0.2% on your page, you're under-optimized. Minimum 1% for the primary keyword.
Competitor strategy spy
Run a competitor's pillar page. See what subtopics they prioritize by keyword volume. Informs your own pillar structure — borrow the topical map, not the copy.
Nav/boilerplate filter
Terms that appear across every URL of a site are boilerplate (nav, footer, sidebar). Run 2 URLs from same site, intersection = boilerplate to ignore. Cleans up analysis.
8 mistakes we see in keyword extraction
Getting the data is easy. Interpreting it correctly separates good SEO from keyword-stuffing throwback tactics.
Treating sitewide nav terms as page-specific keywords
high"Privacy policy", "pricing", "login" show up on almost every page's HTML because they're in nav/footer. When extracting keywords, mentally filter these out. A term that appears on every URL of a site is structural, not a ranking target. Focus on terms unique to the page content.
Blindly matching competitor density in your own content
highIf a competitor has 2.8% density for a target keyword and ranks #1, you don't need to match that exactly. Density is downstream of good content. Focus on topical coverage — are you using related terms, LSI keywords, entity mentions? Density above 3% is a red flag, but matching 2.8% exactly doesn't buy you rankings.
Extracting from only one competitor
mediumOne URL gives a single data point. Three or more URLs reveal patterns — terms that appear in all three are topical requirements for the query. Pull top 3-5 ranking URLs, extract each, find the intersection. That's your keyword brief.
Ignoring bigrams and phrases, only looking at single words
medium"Running shoes" is a different search intent from "running" + "shoes". Good extractors surface 2–3 word phrases because they're how people search. Single-word analysis misses the actual keyword targets. Always check multi-word phrases in the output.
Using this instead of proper keyword research for targeting
highThis tool shows what's on the page — not what's getting traffic. A competitor page might dominate for one keyword while this extractor shows you 10 other terms. Use Ahrefs/Semrush for ranking data, this for content analysis. They're complementary, not substitutes.
Extracting from a JS-heavy SPA with no SSR
mediumReact/Vue SPAs without SSR return nearly empty HTML. The extractor can only see what the server sends. If results look too sparse, check the site with "View Source" (Ctrl+U) — if body is minimal, that's why. Use pre-rendered or SSR'd versions where available.
Chasing keyword density targets instead of topic coverage
mediumGoogle's 2013+ algorithms rank on topical completeness, not density. A 1.5% density for "best email tool" plus coverage of "deliverability", "A/B testing", "templates", "automations" beats 3.5% density for just "best email tool". Coverage > density.
Not cross-referencing with Google Search Console
lowExtract from your own page, then check GSC for what that page *actually* gets impressions for. Often you'll find terms you're ranking for that you're barely using on the page — opportunities to strengthen that section. This diff is gold for optimization.
How we compare
Honest comparison against the paid tools most SEOs reach for first.
| Feature | Grigora | Ahrefs | Semrush |
|---|---|---|---|
| URL keyword extraction | Paid | Paid | |
| Keyword frequency + density | Partial | ||
| Free forever, no signup | |||
| Bigram / phrase detection | |||
| Copy + CSV export | Paid | Paid | |
| Integrated Google search links | |||
| Content gap workflow | With Blog CMS | ||
| Unlimited URL analyses |
Why topical coverage beats density now
AI-powered search engines rank on semantic completeness. Extraction-based workflows help you cover topics, not just stuff keywords.
Weights pages by topical coverage of a query. Extracting competitor keywords reveals the subtopic map you need to cover for citation-worthy content.
Prefers comprehensive sources. Extraction-based briefs produce pages that cover 80%+ of the topical surface — exactly what Perplexity surfaces as citations.
Values first-hand specificity. Use extraction to identify what\'s table-stakes, then differentiate with unique insights competitors don\'t cover.
From competitor keywords to content.
All on Grigora.
Website, blog, and professional email. Grigora Blog CMS takes extracted keywords and drafts full content briefs. Paste URL, publish in a day.
AI Website Builder
Describe your site, get a live website in 60 seconds. Built-in SEO with topical coverage analysis baked in.
Start buildingBlog & CMS
Paste competitor keywords (like the list this tool produces), Grigora AI drafts the full brief — H1, H2s, FAQ, schema.
Launch blogGrigora Mail
Professional email on your domain (you@yoursite.com). SPF, DKIM, DMARC configured automatically.
Get emailNo credit card · Start in 60 seconds
Related free SEO tools
Use these together to turn extracted keywords into ranking content.
Frequently Asked Questions
Everything you need to know about extracting keywords from competitor URLs.
From extracted keywords to published post.
Grigora\'s Blog CMS drafts content briefs from keyword lists. Paste the extraction, publish in a day.
Try Grigora freeTurn keywords into content briefs. Grigora Blog CMS drafts full outlines from any keyword list.