Back to Tools

Striking Distance CSV

Use cases

Finding quick-win keywords not yet mentioned in on-page elements Prioritising title and H1 optimisation for near-page-one rankings Auditing keyword presence without fetching live pages Batch CLI processing for large GSC exports

Identifies keywords ranking in a configurable position range (default 4-20) and checks whether each keyword appears in the page title, H1, and body content using case-insensitive literal substring matching (keywords are regex-escaped, so patterns and word boundaries are not supported) against a Screaming Frog crawl export.

Filters out branded terms and keywords already present in all checked locations, then exports both wide format (grouped by page) and long format (by keyword) CSVs.

Also available as a standalone CLI script.

GSC Data Crawl Data

Platform

Python script (requires Python 3.x)

Input

GSC performance export CSV (query, page, clicks, impressions, position)

Screaming Frog crawl CSV (Address, Title 1, H1-1, and optionally rendered content)

Output

CSV with keyword, page, position, sort metric value, and boolean In Title/In H1/In Content flags.

View Source

Features

  • Position range filter (default 4-20, inclusive) with minimum impressions threshold
  • Branded term exclusion list (substring matched, one per line)
  • Literal substring matching, case-insensitive, against Title, H1 and optional Content columns
  • Pages missing from the crawl get all-False flags rather than being dropped
  • Filters out keywords already present in all checked locations
  • Wide format (keywords per page, 1-20, default 10) and long format outputs
  • CLI variant with argparse: --min-position, --max-position, --min-impressions, --max-keywords, --sort-by, --brand-exclude (checks Title and H1, long format output)
  • Auto-detects GSC column names (Top queries, Query, Queries, Average position)

How to use

  1. 1 Upload GSC performance CSV and Screaming Frog internal_html.csv
  2. 2 Map the URL, Title, H1, and optional Content columns from the crawl data
  3. 3 Configure position range, minimum impressions, keywords per page, and branded term exclusions
  4. 4 Run the analysis
  5. 5 Download wide format (by page) or long format (by keyword) CSV

Frequently asked questions

Why do some pages show False for every check?
The GSC page URL must exactly match the crawl's Address value. Pages missing from the crawl are not dropped; they get False for every location, which makes them look like big opportunities when they are really just unmatched. Check protocol, www and trailing slash consistency between the two exports before acting on all-False rows.
Is the keyword matching whole-word?
No, it is literal case-insensitive substring matching (the keyword is regex-escaped first, so there is no wildcard support either). 'ring' counts as present inside 'monitoring', and a reworded phrase counts as missing even if every individual word is on the page.
Are the default position boundaries included?
Yes, the filter is inclusive, so the defaults keep positions 4 through 20 exactly. This differs from the live-fetch Striking Distance Finder on this site, whose slider filter excludes the endpoint positions.
How does the sort metric change the results?
The Keywords per Page limit takes the top N queries per page by the chosen metric, clicks by default or impressions. Changing the sort metric changes which keywords get analysed at all, not just their order, so sorting by impressions can surface zero-click queries that a clicks sort drops.
How is the branded term filter applied?
One term per line, matched case-insensitively as a substring anywhere in the query, so short terms over-filter: excluding 'arc' would remove 'arc welding' but also 'monarch'. Use the longest distinctive form of your brand name.

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