Free SEO tool. Search Console
CTR Gap Estimator for Search Console (Free, Runs in Your Browser)
Privacy: nothing is uploaded. Your file is read and processed locally in your browser, and closing the tab clears it.
Find the queries that rank but don’t get clicked
Load Search Console’s Queries or Pages export. The estimator builds your site’s own click-through curve by position, compares every row with it, and ranks the gaps by clicks lost. It’s the check behind my guide to influencer collection pages on Shopify, where one page sat at position 4.3 and earned 2.49% of clicks.
Needs Top queries (or Query) or Top pages (or Page), plus Clicks, Impressions and Position. Commas, tabs and semicolons all work.
Brand searches click far above normal and would inflate your curve. On a Pages export these match the URL path.
Flags local queries that probably sit under a map pack. Near me queries are caught anyway.
Why your own curve is the default is explained under how the estimate works.
Quick answer
This free CTR gap estimator reads Google Search Console’s Queries or Pages export and builds your site’s own click-through curve by average position (1, 2, 3, 4 to 5, 6 to 10 and 11 to 20), leaving brand searches out. Then it compares every row with that curve, estimates the clicks each weak row is losing, ranks them, and tags each one with a likely cause and fix. If you’re an SEO, a content lead or a store owner deciding which titles to rewrite first, it judges them against your own results pages.
Why the Default Is Your Own CTR Curve
Ask three CTR studies about the same position and you’ll get three answers. Backlinko’s analysis of 4 million results puts the top organic result at 27.6%. First Page Sage’s 2025 report put it at 39.8%. Its 2026 report puts it at 7.1% blended, and 22.6% on results pages with no AI answer.
Same position. A spread of more than five to one.
None of those numbers knows your market. A store selling lipstick in India, a plumber in one town and a SaaS blog face completely different results pages, and query sets heavy on brand searches click far higher than discovery ones. So the estimator starts from the one curve that already reflects your SERPs, your snippets and your audience. Yours.
There’s a catch, and it matters. Your curve is an average of your own rows, so roughly half of them will always sit below it. That means the gap total isn’t what Google owes you. It’s the clicks you’d gain if your weaker results did as well as your typical result at the same position. You’ve already hit that level.
Want a second opinion? Switch the curve to First Page Sage’s 2026 table. It was the only recent published curve I found with every position from 1 to 10 printed as text, plus a stated method: 1,184 domains, 3.67 billion impressions over six months, weighted to US search, drawn from Search Console properties the firm manages or has panel access to. But it’s a vendor’s dataset. Nobody outside can check it, and it stops at position 10.
How to Use the CTR Gap Estimator
Seven steps. Only the export takes more than a minute.
- Export your data from Search Console. In Search Console, open Performance, then Search results, and set the date range (three months is a sensible default, and longer fills thin buckets). Click Export at the top of the report and choose Download CSV. You’ll get a zip file: unzip it and keep Queries.csv, or Pages.csv if you’d rather judge whole pages. The interface export stops at 1,000 rows, and values the report shows as a tilde or a hyphen come out as zeros.
- Load the file or paste it. Click Choose file and pick the CSV, or open it, copy every row including the header, and paste it into the box. Exports from Google Sheets, Looker Studio, the Search Console API and GA4’s Search Console queries report work too, because the tool finds the columns by name.
- List your brand terms. Add your brand name, the misspellings you can see in your own query list, and product names nobody else sells, one per line. They’re matched as plain text anywhere in the query. On a Pages export they’re matched against the URL path, and the homepage is left out by default.
- Add the towns you serve. This one’s optional. List the towns or areas in your queries, one per line, so local searches get tagged as map pack rows. Near me, nearby and open now are caught without it.
- Pick a curve and run it. Keep Your own site curve unless you want to compare against the published one, and leave smoothing on. Click Estimate my CTR gap. The chart shows your curve, and the table lists every row below it.
- Filter and sort the table. Set a minimum impressions floor (100 is the default) so tiny rows don’t crowd the list, narrow the position range, or pick one pattern. Click any column header to sort. Download CSV saves exactly the rows the filters show.
- Fix the top rows, then measure. Work down from the top. After you change a title or description, request indexing in URL Inspection, give it at least four weeks, then compare the same query or page across equal periods before and after. Judge it on CTR at a steady position.
How the Estimate Works
Every row lands in a bucket by its average position: 1 (under 1.5), 2, 3, 4 to 5, 6 to 10, or 11 to 20. Rows past 20.5 aren’t scored, because clicks there round to zero on any curve.
For each bucket, the tool adds up clicks and impressions across your non-brand rows and divides one by the other. That’s an impression-weighted CTR, so a query with 10,000 impressions counts 100 times as much as one with 100. Why bother? A plain average of row CTRs would let a handful of tiny rows at 50% drag the whole curve around.
Smoothing fixes a quieter problem. The 6 to 10 bucket is wide, and CTR at position 6 is usually several times CTR at 10, so if you judge a row at 9.8 against the whole bucket’s average, it’ll look bad every time. With smoothing on, each bucket’s CTR is pinned at that bucket’s own impression-weighted average position, and the tool draws a straight line between neighbours. Each row’s expected CTR is read off that line. Turn smoothing off if you’d rather compare rows with the flat bucket figure.
The gap is simple arithmetic: estimated clicks lost equals impressions times (expected CTR minus actual CTR), counted only when actual is lower. Take grinder retention in the sample data. It has 2,000 impressions at 1.25% where 2.92% is expected, so it’s missing about 33 clicks.
A bucket with under 500 impressions or fewer than 3 rows is marked thin. It still counts. Just treat any gap built on it as rough.
Each row below the curve then gets one likely pattern, checked in this order:
- Map pack, local query: the query contains near me, nearby, near, open now or closest, or a town you listed.
- SERP features or AI answer: the query starts with how, what, why, when, where, who, which, can, does, is, are or similar, or contains words like vs, best, review, price, buy, images or meaning.
- Possible intent mismatch: actual CTR is under a quarter of expected.
- Title and description: everything else.
These are guesses from wording and size. The live results page settles it.
How to Read the Results: a Worked Example
Click Load sample data and you’ll get 37 made-up queries for Acme Coffee, a fictional grinder store on example.com. Four contain acme, so they’re left out. Those four took 2,710 clicks, more than the other 33 combined. Leave them in and position 1 jumps from 13.11% to 24.74%. Suddenly every honest non-brand result at the top looks like a failure.
Without them, the curve reads: position 1 earns 13.11%, 2 earns 9.41%, 3 earns 3.94%, 4 to 5 earns 2.86%, 6 to 10 earns 0.80%, and 11 to 20 earns 0.25%. One row sits at 38.5 and isn’t scored.
18 of the 32 scored rows fall below that line, worth about 660 clicks on top of the 2,411 those rows already earn. Call it 27% more, with no ranking change at all. And the top 10 rows hold 95% of it.
Top of the list: how to clean a burr grinder, at position 1.2 with 2,400 impressions. It earns 5.42% where 13.11% is expected, so roughly 185 clicks are missing. It’s tagged SERP features or AI answer because it’s a how-to question, and those often get an answer box above the first result. So search it before you touch the title. If a featured snippet or AI Overview sits on top, look at what it quotes and ask whether your page answers the question as directly.
Second: conical burr grinder, position 1.4, 8.08% against 12.59%, about 117 clicks. There are no question words and nothing local, and CTR is about two thirds of expected, so it’s tagged Title and description. Good rank, weak snippet. It’s the same shape as the creator page in the influencer collection guide.
The odd one: pour over coffee ratio, position 8.9, 0.17% where 0.74% is expected. That’s under a quarter, so it’s tagged Possible intent mismatch. A grinder shop, showing up for a brewing ratio question. Whether you build a page for it is your business call.
Two local rows, coffee grinder repair near me and coffee beans delivery springfield, miss about 79 clicks between them. A better title won’t fix either one.
Now set the Show filter to All rows. The row single dose coffee grinder earns 26.00% at position 1.3, about twice its expected CTR. Put its title and description next to the weak rows. Whatever it’s doing, copy it.
What to Do About Each Pattern
Title and description rewrite
Most gaps land here. You rank, and the snippet loses the comparison. In the Shopify influencer collection guide, a creator page at position 4.3 earned 2.49%. Its title gave the creator’s name and the store’s brand and nothing else, and it sat next to her own profiles, which said who she was.
Write the title for the query that brings the impressions. Put the words people searched near the front, add a true reason to pick you (shade range, delivery time, whatever applies), and keep it short enough to show in full. Google rewrites title links that are vague, stuffed with keywords or repeated across pages, per its title link guidelines. Run yours through the title tag truncation checker to see what’s at risk of being cut.
Descriptions matter less, because Google often builds the snippet from page text. Still, write one that answers the query. Google says it may use the meta description when it describes the page more accurately than the on-page text (Google on snippets).
SERP features taking the click
Position is a count of results from the top. Google calculates it top to bottom on the main column, and a carousel takes one position for every item in it (how position is calculated). So position 2 under an AI Overview, a product grid and People also ask can sit well below the fold.
Search the query in a private window, on a phone and on a laptop, and note what’s above you. Then decide whether you can get into that feature. My guide to winning SERP features above position one covers popular products and image packs, and how AI Overviews choose sources covers the answer box. Can’t get in? Accept a lower CTR for that row and move on.
Mismatched intent
A CTR under a quarter of your own curve is rarely a snippet problem. Usually Google is testing your page on a broader or nearby query, the same effect that makes average position drop while clicks hold. Filter the query in Search Console and check which page ranks. If two of yours trade places, run the keyword cannibalization checker. And if one page ranks but answers a different question, you’ve got two options: build for that intent, or let it go.
Map pack on local queries
For near me and town-name searches, Google usually puts a map pack of business profiles above the organic results. Local results are ranked mainly on relevance, distance and prominence (Google Business Profile help), so most of your work is in the profile. A better title helps the organic result, but only a little. On local service sites, plenty of impressions also come from outside the service area, which makes your CTR look worse than it is. Splitting out non-local impressions shows how to check.
Limits of This Tool
- Position is an average. A row at 4.3 could be 2 on mobile and 9 on desktop, or 1 for a week and 12 the next. The expected CTR is for 4.3, a spot the result may never have held.
- SERP features vary. They change by query, device, country and day, and the tool can’t see the results page. Two rows at position 2 can face completely different pages.
- Anonymised queries are missing. Google leaves queries used by fewer than a few dozen people over two to three months out of the query tables (Google’s deep dive on performance data). Add the 1,000-row cap on top and your Queries export covers only part of your traffic, and the long tail it drops tends to be non-brand. The missing keywords guide explains the gap.
- Pages data is counted per page. If two of your pages show for one search, both get an impression (Performance report help), so page CTRs and query CTRs don’t line up exactly.
- Brand matching is plain text. A brand term that’s also a common word will catch unrelated queries, so check the count of rows left out in the summary.
- Small files give thin curves. Under a few hundred impressions per bucket, the curve wobbles, and so do the gaps.
- A gap tells you where to look. The patterns are guesses about why, and the live results page is the evidence.
- The published curve can’t be audited. First Page Sage’s figures are weighted to US search and stop at position 10, so rows from 10.5 to 20 aren’t scored against it.
CTR Gap Estimator FAQ
What is a good CTR for my position in Google?
There’s no single number. Published studies disagree by more than five to one for position 1 alone. A good CTR is one at or above your own site’s CTR for that position, built from non-brand queries, and that’s what this tool calculates.
How do I find queries with high impressions and low CTR in Search Console?
Open Performance, then Search results, turn on all four metrics, and sort the Queries table by impressions. Then compare each row’s CTR with others at a similar position. The estimator does that comparison for every row at once and ranks the gaps by clicks lost.
How is expected CTR calculated?
For each position bucket, the tool divides total clicks by total impressions across your non-brand rows. With smoothing on, it draws a straight line between neighbouring buckets and reads each row’s expected CTR from that line.
Why leave brand queries out of the CTR curve?
People searching your name usually click you whatever the position, so brand rows run far above normal CTR. Left in, they raise your curve, mostly at position 1, and make good non-brand rows look like they’re failing.
Is a published CTR curve more accurate than my own?
Not for your site. A published curve averages many other sites with different results pages and audiences. It’s fine as a rough cross-check, but your own non-brand curve is the fairer yardstick.
Why did my CTR drop when my position stayed the same?
Usually something changed on the results page, such as an AI Overview, a product grid or a map pack appearing above you. Average position can also hide a mix of higher and lower rankings. Check the live results page and compare devices before you rewrite anything.
Can I use the Pages export instead of Queries?
Yes. Pages are scored the same way. Brand searches can’t be removed by query, so the tool leaves out the homepage and any URL paths that match your brand terms. For the cleanest curve, use Queries.csv.
Is my Search Console data uploaded anywhere?
No. Your browser reads the file and does every calculation locally. Nothing is sent to a server, and the Download CSV file is built in your browser too.
Related guides and tools
- Influencer collection pages on Shopify: what to build, fix or noindex (the paired guide)
- Average position dropped but clicks didn’t: impression dilution
- Winning Google’s SERP features when position one isn’t the top
- Search Console impressions that aren’t local
- Branded vs non-branded traffic and why the split matters
- Branded vs non-branded keyword splitter, title tag truncation checker and content decay finder, or the full list of free SEO tools
If you’d rather have someone work through the gaps, rewrite the snippets and track the result, that’s part of my SEO audit.
Built by Ram Kr Shukla
SEO and growth consultant with 20+ years in SEO and growth across 50+ brands. Google Analytics and Google Ads certified. Spends a lot of his week inside Search Console exports, and built this to decide which titles get rewritten first.




