Striking Distance Finder
Use cases
Filters keywords by configurable position range (default bounds 4 and 20, both exclusive, so positions 5-19 are kept) and minimum volume, then fetches live page content using trafilatura.
Extracts title, H1, and body copy via BeautifulSoup, normalises text (removes apostrophes/hyphens), and checks keyword presence.
Groups keywords by URL showing top 5 per page.
Platform
Browser-based (no installation required)
Input
Keywords CSV with URL, volume, position
Output
CSV with page keywords and optimisation flags
Features
- Live body copy extraction via trafilatura, title and H1 via requests/BeautifulSoup
- Position sliders exclusive at both ends (defaults 4 and 20 keep positions 5-19)
- Minimum search volume slider (default 50)
- Case-insensitive substring matching after normalisation (apostrophes removed, hyphens to spaces)
- Top 5 keywords per URL by volume with boolean presence flags
- Drops a page entirely if any top keyword appears in title, H1 and copy
- Encoding auto-detection via chardet (UTF-16 handled)
How to use
- 1 Upload your keyword CSV (Ahrefs/SEMrush/GSC export)
- 2 Map the keyword, URL, volume and position columns
- 3 Adjust the position sliders (exclusive at both ends) and minimum volume
- 4 Run analysis (fetches each unique URL live, two requests per URL)
- 5 Review pages with keywords missing from title/H1/body
- 6 Download CSV with presence flags for each on-page element
Frequently asked questions
- What input file does it accept?
- Any keyword export with keyword, URL, search volume and position columns; you map the columns after upload, so Ahrefs, SEMrush or GSC exports all work. File encoding is auto-detected (UTF-16 files are read as whitespace-delimited) and Ahrefs' '0-10' volume band is converted to 0.
- Are positions 4 and 20 included with the default sliders?
- No. The filter drops rows at or below the minimum and at or above the maximum, so the default settings of 4 and 20 actually keep positions 5 to 19. Widen each slider by one notch if you want the boundary positions included.
- Why is the analysis slow, and why might it fail on the hosted app?
- Every unique URL is fetched live, twice: once with trafilatura for the body copy and once with requests/BeautifulSoup for the title and H1, with no delay between requests. Sites that block the Streamlit Cloud server's IP return nothing, which triggers the 'try whitelisting or running this app locally' message; running the app locally usually fixes it.
- How is 'keyword in title/H1/copy' decided?
- Case-insensitive substring matching after normalisation (apostrophes removed, hyphens replaced with spaces). Because it is substring based, 'ring' counts as present inside 'monitoring', and a reworded phrase counts as missing even if every individual word is on the page.
- Why did a page disappear from the results entirely?
- If any single one of a page's top five keywords is found in the title, H1 and copy, the entire row for that page is dropped, even when the other four keywords are missing everywhere. A fully optimised top keyword can therefore hide the remaining opportunities on the same page.
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
Identify your highest-traffic pages from Search Console data with performance metrics.
Visualise Google Search Console data with interactive Altair charts.
Analyse Search Console data by URL folder structure.
Find keywords where multiple pages compete for the same query.
Two-mode title analysis: find GSC keywords missing from titles and surface title segments with no search volume.
Generate JSON-LD structured data for common schema types.
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