xmetric / Use cases

Plot Your GA4 Google Organic Search Queries CTR Curve by Position

To find high-impression search queries with weak click-through rates, export the Google organic search queries report from Google Analytics 4 to CSV and open it in xmetric. Plot each query's click-through rate against its average position as a scatter in the free xmetric app (/app/), then use a FIXED LOD benchmark to flag queries in positions 1 to 10 that sit below your own expected CTR. The file stays in your browser.

Chart your own CSV

Chart your export here

Drop a CSV here. xmetric reads every row in this browser and draws a first chart you can regroup or change the measure of. Nothing is uploaded.

No file loaded yet. You can also drop a CSV on this box.

How to export Google organic search queries from GA4

When you link Google Search Console to Google Analytics 4 and publish the Search Console collection in Reports > Library, GA4 adds two Search Console reports (Google Organic Search Queries and Google Organic Search Traffic).

  1. Open Google Analytics 4 and go to Reports > Search Console > Queries (or open the Google Organic Search Queries card under Reports > Acquisition > Acquisition overview).
  2. Set your date range to the last 28 or 90 days (avoid mixing pre- and post-title-change periods) and click Share this report > Download File > Download CSV.
  3. You can also drop the Queries.csv file downloaded directly from Google Search Console > Performance > Search results > Export; the column names differ, as the table below shows.
GA4 Search Console Export ColumnDirect GSC Queries.csv ColumnRole in CTR Curve
Google organic search queryTop queriesSearch keyword string
Organic Google Search clicksClicksActual clicks from Google Search
Organic Google Search impressionsImpressionsSearch impression volume (bubble size and filter threshold)
Organic Google Search click-through rateCTRObserved query CTR (Clicks / Impressions)
Organic Google Search average positionPositionMean ranking slot (1.0 = top organic result)

Formulas to find title-tag and snippet quick wins

1. Rounded Position Bucket Expected CTR (FIXED LOD)

Instead of comparing your site against generic industry CTR studies that vary wildly by SERP features, compute your own site's weighted average CTR for each rounded ranking position (1, 2, 3, ..., 10) using a FIXED Level of Detail expression.

xmetric / Tableau formula ([Position Bucket]):

ROUND([Organic Google Search average position], 0)

xmetric / Tableau formula ([Expected Position CTR]):

{ FIXED [Position Bucket] :
  SUM([Organic Google Search clicks]) / NULLIF(SUM([Organic Google Search impressions]), 0)
}

2. Potential Extra Clicks from Rewriting Title & Meta Description

For example (sample numbers), if a query ranks at position 3.2 with 15,000 impressions and a 1.8% CTR, while your sitewide average CTR at position 3 is 6.5%, multiplying the CTR gap by impressions estimates the click upside from improving the title tag.

xmetric / Tableau formula ([Potential Extra Clicks]):

IF [Organic Google Search click-through rate] < [Expected Position CTR]
THEN [Organic Google Search impressions] * ([Expected Position CTR] - [Organic Google Search click-through rate])
ELSE 0
END

SQL equivalent:

WITH bucketed AS (
  SELECT
    "Google organic search query" AS query,
    "Organic Google Search clicks" AS clicks,
    "Organic Google Search impressions" AS impressions,
    "Organic Google Search click-through rate" AS ctr,
    "Organic Google Search average position" AS avg_position,
    ROUND("Organic Google Search average position", 0) AS position_bucket
  FROM ga4_search_queries
  WHERE "Organic Google Search average position" <= 15
),
benchmarks AS (
  SELECT
    *,
    SUM(clicks) OVER (PARTITION BY position_bucket) * 1.0
      / NULLIF(SUM(impressions) OVER (PARTITION BY position_bucket), 0) AS expected_bucket_ctr
  FROM bucketed
)
SELECT
  query,
  ROUND(avg_position, 1) AS pos,
  impressions,
  clicks,
  ROUND(ctr * 100, 2) AS actual_ctr_pct,
  ROUND(expected_bucket_ctr * 100, 2) AS benchmark_ctr_pct,
  ROUND(impressions * GREATEST(expected_bucket_ctr - ctr, 0), 0) AS potential_extra_clicks
FROM benchmarks
WHERE impressions >= 500
  AND ctr < expected_bucket_ctr
ORDER BY potential_extra_clicks DESC;

3. Position 8-15 "Striking Distance" Filter

Queries ranking between position 8.0 and 15.0 straddle the bottom of page 1 and top of page 2. Moving a high-impression query from position 11 to position 6 usually yields a larger click jump than rewriting a snippet at position 11.

xmetric / Tableau filter formula:

[Organic Google Search average position] >= 8.0
AND [Organic Google Search average position] <= 15.0
AND [Organic Google Search impressions] >= 300

Limits of the GA4 Search Console integration

Questions people ask

Should I filter out branded search queries before calculating the CTR benchmark curve?

Yes. Branded queries (queries containing your company or product name) often have 30% to 60% CTR at position 1, which inflates the position-1 benchmark for non-branded informational queries. Add a filter in xmetric: NOT CONTAINS(LOWER([Google organic search query]), 'yourbrand').

Why does Google AI Overviews lower CTR at positions 1 to 3?

Informational queries that trigger an AI Overview often show high impressions and an average position between 1 and 5 with lower organic click-through rates. Segment queries by intent word (how, what, vs, alternative, free) in xmetric to compare commercial queries against pure definitions.

Is my Search Console query export uploaded anywhere?

No. Files you drop are read in your browser and nothing is uploaded, unless you sign in and save a workbook online.

Drop your GA4 Google_organic_search_queries.csv or GSC Queries.csv above for a first chart, then rank your highest-upside title tag updates in the xmetric app.