Striking distance
Enough impressions inside your selected position range. Check intent match and internal links before rewriting.
Upload Google Search Console CSV exports and find striking-distance queries, CTR gaps, rising demand, decay, and page opportunities locally for free.
Start with a Queries CSV. Add the prior period to detect momentum and a Pages CSV to rank landing-page opportunities. Files are parsed on this device and are never sent to a server.
The engine calculates opportunities with visible thresholds. It does not send CSV rows, queries, URLs, or report text to analytics.
| Priority | Query or page | Evidence | Recommended check |
|---|
Decision rules
These are triage rules, not causal claims. Verify the query, landing page, SERP, and site change history before editing a URL.
Enough impressions inside your selected position range. Check intent match and internal links before rewriting.
A top-10 row below 70% of your own position-band CTR baseline. Inspect the live snippet before changing metadata.
Impressions grew at least 30% and by 20 rows versus an equal prior period. Protect and reinforce what already matches.
Clicks fell at least 30% with five lost clicks, or impressions fell 40% with 50 lost impressions. Check seasonality first.
Original, synthetic sample data only. Every figure in this asset is a worked example — replace each sample value with your own verified analytics before sending a client report.
The GSC Opportunity Engine turns a Search Console Performance export into a short, inspectable queue of queries and pages worth reviewing. It is designed for the point where a property already has impressions but the Search Console table is too broad to answer the operational question: which existing search signal deserves the next hour of work? Upload the current Queries CSV, optionally add an equal prior period and the current Pages CSV, and the tool labels striking-distance rows, site-relative CTR gaps, rising demand, decay, and page-level opportunities.
This is not an automatic SEO audit and it does not claim that a title rewrite, content update, or internal link caused a movement. Each output row separates the observed evidence from the recommended verification step. That distinction matters because average position, CTR, and impressions can move with demand, device mix, SERP features, competitors, indexing, or a page edit. The engine helps you triage evidence; the person reviewing the live result still makes the decision.
All parsing and scoring happens in the browser. The CSV rows, search queries, URLs, and generated evidence ledger are not posted to SEO Report Kit. Anonymous analytics records only broad actions such as running the engine or choosing an export format, never the imported values. You can inspect the workflow with the synthetic example before using a client property.
Open the Search results Performance report in Google Search Console and choose a complete date range. For recurring monthly work, compare equal windows and avoid a range that includes preliminary days. Export the Queries table for the current period as CSV. To detect momentum, repeat the export for the immediately preceding period with the same search type and filters. The optional Pages export must use the same current date range and filters as the current Queries file.
The engine accepts the ordinary English column labels used by Search Console: Top queries or Query, Clicks, Impressions, CTR, and Position; for a page file it expects Top pages or Page. A current query file is enough for striking-distance and CTR analysis. The prior file enables rising and decay rules. The page file creates a separate page queue, because a query-only export does not prove which URL earned that query. The tool deliberately does not guess that relationship.
Search Console exports are evidence samples, not a complete warehouse. The standard report export is limited to the rows available in the table, anonymized queries are omitted, and chart totals can differ from grouped table rows because of privacy and aggregation. Preserve the date range, search type, country or device filters, and export date in the report you send so another reviewer knows exactly what the rows represent.
The open-source GSC Opportunity Analyzer runs the same versioned decision rules outside the browser workspace. Install @demi-valerith/gsc-opportunity-analyzer from npm for a local monthly script, or add the GitHub Action to a private reporting repository and produce a Markdown, JSON, or CSV evidence ledger during a workflow. Both surfaces accept the current Queries export plus the same optional prior Queries and current Pages files, minimum-impression threshold, and striking-distance range.
The Action logs only the number of findings and the output path. It does not print imported rows or send them to SEO Report Kit, but Search Console queries and page URLs can still contain confidential business information. Keep client exports in a private repository, upload only the generated ledger as a workflow artifact, and set an appropriate retention period. The public repository includes synthetic fixtures, tests for all five rule types, and the exact rules version so a reviewer can reproduce a result.
Automation does not turn a triage label into an SEO instruction. Review the generated evidence against the live Search result, the ranking URL, seasonality, indexing, and the site's change history before opening an implementation issue. Pin the Action to a release tag or commit SHA, and record the rules version with the reporting period when reproducibility matters.
The workspace keeps its input contract small. It reads the four Search Console metrics and adds a priority score, confidence label, evidence sentence, and recommended check. The field map below explains how each part is used. None of the generated fields replaces the source export, so keep the original files with the exported ledger when a client or teammate may need to reproduce the result.
| Field | Purpose | How to use it |
|---|---|---|
| Current Queries CSV | The current period's query metrics from Search Console. | Export one complete date range with clicks, impressions, CTR, and position; the file is parsed only in your browser. |
| Prior Queries CSV | An equal-length comparison period for trend detection. | Use the immediately preceding period when possible so rising and decay labels are comparable. |
| Current Pages CSV | Optional page-level metrics for the same current period. | Add it when you want a separate page opportunity queue; query rows are never guessed onto pages. |
| Priority | A transparent 0-100 triage score based on impressions and rule type. | Sort the queue with it, but read the evidence and confidence before choosing an action. |
| Confidence | A sample-strength label based on impressions and comparison availability. | Treat low-confidence rows as monitoring candidates rather than immediate edit instructions. |
| Recommended check | The next verification step, not an automated causal claim. | Inspect the SERP, landing page, seasonality, and change history before shipping the suggested class of work. |
Striking distance is the simplest rule: a row has at least the minimum impressions and falls inside the position range you selected. The default is positions 8 through 20, which includes results near the bottom of page one and on page two. It does not automatically mean expand the article. First open the query in Search Console, confirm the ranking URL, inspect the live result, and decide whether intent, evidence, or internal-link support is actually weak.
CTR gaps are relative to this file, not to a universal benchmark. The engine pools clicks and impressions into position bands, calculates the site's observed CTR for each band, and flags a top-10 row when its CTR is below 70 percent of that local baseline and the row has at least 50 impressions. This makes the comparison more honest for the property, but SERP features and brand demand can still explain the gap. Inspect the actual snippet before testing metadata.
Rising and decay labels require the optional prior-period file. Rising means impressions increased at least 30 percent and by at least 20 while the current position is 40 or better. Decay means clicks fell at least 30 percent with five or more clicks lost, or impressions fell at least 40 percent with 50 or more impressions lost. These thresholds suppress tiny movements, but they do not remove seasonality or reporting noise, so the output recommends investigation rather than a predetermined rewrite.
Priority is a triage score from zero to 100. It rises logarithmically with impressions and receives a fixed bonus for the rule type, so a large striking-distance row appears above a tiny one without letting one very large query dominate every result. The score is deterministic and is included in the CSV and JSON exports. It is not a forecast of traffic, revenue, or probability of reaching page one.
Confidence describes sample strength, not correctness. A high-confidence row has at least 100 impressions and an available comparison period; medium generally has at least 50 impressions; lower-volume evidence stays low. A high-confidence decay can still be seasonal, and a low-confidence opportunity can still be commercially important. Use confidence to decide how much verification to do before editing, then use business value and page fit to set the real implementation order.
Filter the result by type and review only the first few rows in each group. For a striking-distance query, identify the exact ranking URL and check whether the page fully answers the query. For a CTR gap, compare the live title and description with the result page and note any ads, video, local, shopping, or answer features that change click behavior. For a rising row, protect the section already matching the intent. For decay, inspect demand, competitors, indexing, and the page's edit history before planning a refresh.
Export the evidence ledger as CSV when another analyst will sort or annotate it, Markdown when it belongs in a client update or issue, and JSON when it will feed another local workflow. Add the chosen owner, due date, implementation note, and expected evidence in the keyword ranking report workbook. The engine narrows the candidates; the workbook records the accountable decision that should be checked in the next reporting cycle.
A disciplined monthly run should end with only a handful of owned actions. Keeping every generated row in the backlog turns the tool back into the data dump it is meant to replace. Archive the export with its source files, ship the selected work, and compare the same dimensions after a complete period. Do not repeatedly edit a URL because preliminary daily movement changed direction.
Search Console position is an average of the topmost result under its aggregation rules, not a fixed daily rank. Query and page tables can use different aggregation, rare values may be hidden, and exported rows do not necessarily sum to the chart total. The engine therefore analyzes the rows it receives and never claims complete query coverage. Large properties that need exhaustive analysis should use Search Console bulk export or the API and preserve their aggregation settings.
The tool also avoids automatic cannibalization claims. A standalone Queries CSV and Pages CSV cannot prove that two pages ranked for one query. Verify that relationship by filtering a query in Search Console and opening the Pages tab, or by exporting a query-plus-page dataset through the API. Two pages receiving broad impressions are not evidence of cannibalization by themselves.
FAQ
No. CSV parsing, scoring, filtering, and export happen in your browser. The site records only anonymous action events such as analyze or export format; it does not send query text, URLs, metric values, filenames, or generated report content to analytics.
Only the current Queries CSV is required. It needs a query column plus Clicks, Impressions, CTR, and Position. A prior Queries CSV enables rising and decay detection, while a current Pages CSV adds a separate page opportunity queue.
The analysis workspace reads CSV files. In Search Console choose CSV when exporting, or save the relevant Queries or Pages sheet as CSV before importing it. This keeps the input contract inspectable and avoids reading unrelated workbook tabs.
CTR varies with brand demand, query mix, position, device, country, and SERP features. Comparing a row with the pooled CTR of the same position band in the uploaded property is more relevant than applying one universal benchmark, although the live result still needs manual inspection.
No. The score ranks triage candidates using impressions and a transparent rule bonus. It is not a traffic forecast, revenue estimate, keyword difficulty score, or probability of ranking. Business value, page fit, and implementation cost still determine the actual plan.
Not from separate Queries and Pages exports, because those files do not preserve the query-to-page relationship. Filter the query in Search Console and inspect its Pages tab, or use a query-plus-page API export. The engine deliberately avoids guessing that two broad page rows compete.
Monthly is appropriate for most sites. Use equal complete periods and preserve the same filters. A weekly run can help during a migration or launch, but small sites usually need more impressions before CTR and trend labels are stable enough to drive edits.
Copy the prioritized findings as Markdown for an email, document, or issue, or download CSV for an analyst and JSON for another local workflow. Share only the evidence rows needed for the decision, preserve the date range and filters, and move the selected actions into the client report generator to add an owner, due date, caveat, and next-month plan.