Search Console CSV Analyzer
The file is read in your browser with the FileReader API. Nothing is uploaded.
Used only to split branded from non-branded search. Include misspellings people actually type.
A row with nine impressions cannot tell you anything about its CTR. This threshold applies to the opportunity lists, not to the totals.
What Is the Search Console CSV Analyzer?
Google Search Console will tell you what people searched for before they reached your site, but it hands that information over as a flat table of a thousand rows sorted by clicks. The rows at the top are the ones already working. The decisions worth making are buried a long way below them. This tool takes the same export, reads every row, and pulls out the handful of groups that are actually worth doing something about: the keywords ranking just off page one, the listings Google is already showing that nobody clicks, the rows collecting impressions and no clicks at all, and the share of everything that is only your own brand name.
It reads both of the exports people download most often — Queries and Pages — and it does not care whether the file is comma separated, tab separated, or pasted straight out of a spreadsheet. Nothing is fetched and nothing is uploaded: the file is parsed in your browser, which is why it works on client data you are not allowed to put through a third-party service.
How to Get the Export Out of Search Console
- Open Search Console and go to Performance → Search results.
- Set the date range. Three months is the usual choice: long enough that the impression counts mean something, short enough that it still describes the site as it is now.
- Make sure Average CTR and Average position are switched on at the top, alongside clicks and impressions. If they are off, the export will be missing those two columns.
- Click Export in the top right, then Download CSV. You get a ZIP containing several files, one per tab.
- Unzip it and open Queries.csv, or Pages.csv if you want to work by URL. Paste the contents into the box above, or pick the file with the file chooser.
Search Console caps the export at 1,000 rows per tab. If yours is genuinely capped, filter the report first — by country, by device or by a URL folder — and export each slice separately; each one analyses fine on its own.
What the Tool Reports
Four headline numbers come out first, then the findings, then the opportunity tables.
- Clicks and impressions are simple sums across every row in the export, including rows below your impressions threshold. They will usually land slightly under the totals Search Console shows you, and that is expected rather than a parsing error — Google withholds queries that too few people searched for, so the rows you can see never quite add up to the whole.
- CTR is computed as total clicks divided by total impressions, not as an average of the per-row percentages. Those two figures are different, and the average of the percentages is the misleading one: it lets a query with twelve impressions and one click weigh as heavily as a query with forty thousand. Every per-row CTR in the tables is recalculated the same way, from that row's own clicks and impressions, so a CTR column exported in a different locale format cannot throw the numbers off.
- Average position is weighted by impressions, which again is not what a spreadsheet gives you if you average the column. A long tail of rows sitting at position 80 with four impressions each will drag an unweighted average into the nineties while describing almost none of your actual visibility.
- Findings and tables are where the work is. Each group below gets its own table, sorted so the most valuable row is at the top, and each is capped at fifteen rows because a list longer than that stops being a to-do list.
What to Do With Each Finding
Striking Distance: Positions 4 to 20
These are the rows ranking well enough that Google clearly considers the page relevant, but not well enough to collect much traffic. Position four gets a small fraction of the clicks position one does, and position twelve is on page two, where almost nobody looks. The reason this group is first is that the hard part is already done — you do not need a new page, a new topic or new links to a new URL. You need the page that already ranks to rank a few places higher.
Work down the list by impressions, not by position. A query at position 18 with 9,000 impressions is worth far more attention than one at position 5 with 120. For each one, open the page that ranks and ask whether it genuinely answers that specific search. The usual answers are mundane: the query is a subtopic mentioned in one sentence and deserves its own section; the page covers it but never uses the words people actually search; or the page is thin next to everything else on the results page. The Word Frequency Analyzer is useful here — paste the page's text and see whether the term you are ranking for is in it three times or thirty, and which other term the page is unintentionally about.
The other common cause is that nothing on your own site points at the page. A page with no internal links is one Google finds and crawls, but not one it treats as important. Run the Internal Link Analyzer over the site and look up the striking-distance URLs in the results: if a page is linked only from the sitemap and a date archive, adding two or three links to it from your relevant published posts is the cheapest ranking change available to you.
Strong Impressions, Weak CTR
This group is the one people miss. Each row here is already on page one, being shown to plenty of people, and collecting far fewer clicks than its position normally earns. The tool compares each row's measured CTR against a typical click-through rate for its average position, flags the ones below half of it, and estimates the clicks the gap represents.
Treat that estimate as a signal, not a forecast. Click-through rate varies enormously with the query: a search with a featured snippet, an AI overview, a map pack or four shopping ads above the first organic result has a lower ceiling for everyone. A genuinely low CTR on a commercial query, though, usually comes down to the listing itself, and the listing is entirely yours to change. Read the title and description as a searcher comparing three results would, and rewrite them so they answer the query rather than describing your page. Draft the new wording in the SERP Preview Tool, which shows exactly where Google cuts a title off on desktop and on mobile, then produce the finished tags with the Meta Tag Generator.
Before you rewrite anything, check the obvious failure first: Google rewrites titles it finds unhelpful, and the listing being shown may not be the one you wrote. Search for the query and look. If two of your own pages are competing for the same query, which the same export often reveals, neither will get a clean run — compare them in the Duplicate Content Checker, and if they genuinely overlap, consolidate them and confirm the tag with the Canonical URL Checker.
Impressions With No Clicks At All
A row with 1,400 impressions and zero clicks is not a CTR problem, it is a mismatch. You are ranking for something your page does not deliver, and no amount of title rewriting fixes that. There are three normal explanations, and they call for three different responses. The query may be for something you do not sell or cover, in which case the right action is nothing at all — you cannot win it and you do not want to. It may be a question your page half answers, which is a content gap worth filling. Or the query may be the right one while your position is far enough down that zero clicks is simply what that position pays, in which case it belongs with the striking-distance work above rather than here.
The question-shaped queries the tool counts separately are worth a look at this point. If a dozen rows begin with how, what or can and are picking up impressions against a page that was written to sell something, you have found your next few blog posts, pre-validated by real search demand. Write them properly rather than thinly: the Content Readability Checker will tell you whether a draft reads at the level its audience expects.
Branded Versus Non-Branded
Enter your brand terms and the tool splits the whole export in two. The split matters because branded search measures how many people already know you, and non-branded search measures how many people found you without knowing you existed. Only the second number describes whether your SEO is working. A site where 80% of clicks are branded is usually not ranking for much; it is collecting people who were going to arrive anyway, through the search box instead of the address bar. Watching that ratio move over a few months is a better read on progress than watching total clicks, which goes up and down with seasonality and with how often you are mentioned elsewhere.
Include the misspellings. If your brand is two words that people run together, or a name that autocorrects, those variants are branded traffic too and leaving them out inflates your non-branded figure. Once you have the non-branded click number, the SEO ROI Calculator turns it into something you can put in front of a client or a boss, by applying your conversion rate and average order value to the traffic rather than to the rankings.
Reading the Export Without Fooling Yourself
Two habits make the difference between a useful read and a confident wrong one. Compare like with like: to know whether something improved, export the same date range from the previous period and read both, because a three-month window that happens to include your busiest month flatters everything in it. And remember that average position is an average — a query shown at position 3 half the time and position 30 the other half reports as 16.5, a position it never actually held. When a striking-distance row behaves strangely, the detail view in Search Console for that one query usually explains it.
What This Tool Cannot Tell You
It reads the file you give it and makes no requests, which is what lets you analyse client exports and unpublished staging data safely — but it also means it cannot see your pages. It does not know what your titles currently say, whether the page that ranks is the one you intended, or whether a competitor has published something better. Those checks are a separate pass, and the tools above are where to make them.
It also cannot tell you why a number moved. Search Console data is attributed to the query and the page, with no record of what changed on your site or on the results page that day. A CTR that halved could be a title Google rewrote, an AI overview that appeared above you, a new ad slot, or a competitor's rich result — and the export looks identical in all four cases. Finally, the expected-CTR comparison is a rule of thumb built from published position-and-CTR studies, not a measurement of your industry. Use it to sort a long list into a short one, which is what it is good for, and then look at the actual search results before you rewrite anything.
Frequently Asked Questions
Start with Queries.csv. It is the one that tells you what people searched for, which is what the opportunity lists are built on. Pages.csv works too and is analysed the same way, with URLs in place of queries — useful when you want to know which page is underperforming rather than which keyword. The other files in the ZIP (countries, devices, dates, search appearance) have the same five-column shape and will parse, but the striking-distance and CTR findings are not meaningful for a row that represents a whole country.
Because the query export is incomplete by design. Google omits queries that too few people searched for, to avoid identifying individuals, so the rows you can download never add up to the site totals on the Performance chart. The gap is often 20% to 40% of clicks on a small site. It does not affect the findings — a missing row with two impressions was never going to appear in an opportunity list — but it does mean you should read your site totals off Search Console rather than off the sum here.
This tool uses average positions 4 to 20, which spans the bottom of page one and all of page two. Positions 4 to 10 are where a small improvement pays immediately, because the clicks are already there to be taken. Positions 11 to 20 are the ones where the page has proven it can rank and simply needs to be better. Some practitioners use a tighter band, such as 11 to 20 only; if you want that view, sort the table by the position column and read the lower half.
From a composite of published position-and-CTR studies: roughly 28% at position one, 16% at two, 11% at three, and single figures from four down. The tool flags a row only when its measured CTR is below half of that figure, which is a deliberately loose test — real click-through rates vary so much by query type that anything tighter would flag half your export. Read the flag as "this listing is worth looking at", never as "this listing should be getting 11%".
Usually, yes. The parser identifies columns by their header names rather than their position, so anything with a query or URL column plus clicks, impressions, CTR and position will work, in any order, comma separated or tab separated. Copying a block of cells out of Excel or Google Sheets and pasting it in works because that copy is tab separated. CTR is always recalculated from clicks and impressions, so it does not matter whether the source wrote 4.17%, 4,17% or 0.0417. If no header row is present the columns are read in Search Console's own order: label, clicks, impressions, CTR, position.
No. Both the paste box and the file chooser are handled entirely in JavaScript in your browser — the file never leaves your machine, nothing is stored, and closing the tab discards it. There is no Google account connection and nothing to authorise, which is also why you have to export the file yourself. That holds for client data and agency reporting as much as for your own site.