All articles
How-To Guides8 min read

How to Connect GA4 and Search Console into One SEO Dashboard

A practical, step-by-step guide to combining Google Analytics 4 and Search Console into a single search-performance view — including the joins that trip everyone up.

By Tillmann Kühn · 20 July 2026

GA4 and Search Console each tell half the SEO story. Search Console knows what happened before the click — queries, impressions, position. GA4 knows what happened after — engagement, conversions, revenue. Put them on one screen and you can finally answer "which rankings actually make money?"

Here is how to wire them together.

1. Decide the grain

Before touching an API, decide the level you will report at. For most teams the useful grains are page, query, and date. Pick one primary grain per view — mixing page-level and query-level data in the same table is the fastest way to double-count clicks.

2. Pull Search Console data

Use the Search Console API (the searchanalytics.query endpoint) with dimensions like date, page, and query. Two things to watch:

  • Data is sampled and delayed by ~2–3 days. Always lag your "latest" date accordingly.
  • Anonymised queries are dropped, so query-level clicks will not perfectly sum to page-level clicks. Report them as separate views, not one reconciled table.

3. Pull GA4 data

Use the GA4 Data API. For an SEO view, filter to organic sessions and pull landingPage, sessions, engagementRate, and your key conversions. The join key back to Search Console is the landing page URL — which is where it gets messy.

4. Normalise the join key

This is the step everyone skips and then wonders why nothing matches:

  • Strip query parameters and fragments (?utm=..., #section)
  • Normalise trailing slashes and protocol/host
  • Lower-case the path
  • Map GA4's landingPage (path only) to Search Console's full URL

Do this once in a single normalisation function and reuse it everywhere. Inconsistent URL handling is the number-one cause of "the numbers don't tie out".

5. Model the combined table

Left-join GA4 onto Search Console on the normalised page. You now have one row per page with: impressions, clicks, CTR, average position, sessions, engagement rate, and conversions. From here, CTR opportunity (high impressions, low CTR) and "ranking but not converting" pages fall right out.

6. Refresh on a schedule, cache aggressively

Both APIs are rate-limited and slow. Fetch on a schedule (hourly or daily is plenty for SEO), store the modelled table, and serve the dashboard from that cache. Never call the APIs on page load.


Once the join is clean, the insight that used to take an analyst a day — "these ten pages rank on page one but convert below average" — becomes a default view. That is the whole point of building it once, properly.

Want a dashboard like the ones I write about?

Book a free discovery call and I'll map your KPIs to a tailor-made build.

Book a call