Keyword Gap Analyser
Use cases
Set difference to identify competitor keywords you are missing.
TF-IDF vectorisation (sklearn, English stopwords, 10k max features) with cosine similarity for content matching.
Similarity threshold 0.1.
Lowercase normalisation.
Exact match prioritisation over semantic matches.
Platform
Browser-based (no installation required)
Input
Your keyword export (CSV/Excel)
Competitor keyword export (same format)
Optional: Content data with URL, text, H1 columns
Output
Gap keywords with volume, competitor URLs, best-matching page URL, match type, and H1 tag.
Features
- Set difference gap identification
- TF-IDF + cosine similarity content matching
- Exact match prioritisation
- Minimum search volume filtering
- H1 heading relevance in matches
How to use
- 1 Upload your keyword data
- 2 Upload competitor keyword data
- 3 Optionally add content for page matching
- 4 Map columns and set volume filter
- 5 Review gaps with match type (exact/semantic)
Frequently asked questions
- Does it need any API keys or make any web requests?
- No. The whole analysis runs offline on the files you upload: your keyword export, the competitor's export (from Ahrefs, SEMrush or similar), and an optional content file. Nothing is crawled or fetched.
- Why are near-identical keywords showing up as gaps?
- The gap calculation is an exact set difference after lowercasing, with no stemming or fuzzy matching. 'llc formation' and 'llc formations' are treated as different keywords, so plural and word-order variants of terms you already rank for will appear as gaps. Expect to skim the output for these rather than treating every row as a genuine miss.
- What should the optional content file contain?
- One row per page with a URL column and a column holding the page text, plus optionally an H1 column; a Screaming Frog crawl with a content extraction works well. The tool lowercases the text, indexes words longer than two characters, and builds a TF-IDF matrix (English stopwords, 10,000 max features) from it.
- What is the difference between an exact and a semantic match?
- An exact match means the gap keyword appears verbatim as a substring of a page's content, with an H1 relevance score of 1.0 if it also appears in the H1. A semantic match is a TF-IDF cosine similarity above 0.1 when no exact match exists on that page. Exact matches always outrank semantic ones, and only the single best match is written to the best_match_url column even though up to three are computed.
- My competitor file has the same keyword on several rows. Which one is used?
- Only the first matching row: its volume and URL are taken and the rest are ignored. If your export has one row per keyword per URL, pre-aggregate it (for example keep the top-ranking row) so the volume and competitor_url columns reflect the row you care about.
Want me to run this for you?
I run this tool as a managed service, or build something custom around your data. You get the insights without touching the code.
Related Tools
Convert keyword phrases into natural questions for FAQ content.
Cluster keywords by shared SERP URLs via a FastAPI REST endpoint.
Cluster keywords by semantic similarity using sentence-transformers embeddings.
Convert marketing-heavy H1 headings into clean, natural search queries using Claude.
Suggest a cleaner representative keyword for each keyword using an LLM.
Preview how your page will appear in Google search results.
Need something built for your business?
This tool started as bespoke client work. I build custom scripts, data pipelines, and full apps for SEO and product data problems that off-the-shelf tools don't solve.
Tell Me What You Need