Blog · Connectors

Connect Google Search Console to Looker Studio — and what to do when it hits the wall

Published September 14, 2026 · 9 min read

Search Console is one of the few sources Looker Studio connects to natively, for free, in about ninety seconds. This guide does that part properly — the exact steps, plus the one setup choice that quietly decides which questions your dashboard will be able to answer for the rest of its life. Then it covers the four walls every Search Console dashboard eventually runs into, because "free and native" is not the same as "sufficient".

Connect it: the actual steps

You need a verified Search Console property and a Google account with at least restricted access to it. Then:

  1. In Looker Studio, choose Create → Data source and search for Search Console. It's a Google-built connector, so it sits near the top of the list with no partner badge and no price.
  2. Authorize the connector against the Google account that has access to the property.
  3. Pick the property. The list shows both domain properties (sc-domain:example.com) and URL-prefix properties (https://example.com/).
  4. Pick the table typeSite Impression or URL Impression. This is the choice that matters; the next section is entirely about it.
  5. Pick the search type — Web, Image, Video or News. It's fixed per data source, so a report that needs Web and Image needs two data sources.
  6. Connect, then Create report. Drop in a time series of clicks and you have a working dashboard.

The property picker is a trap worth naming. A domain property aggregates every subdomain and both protocols; a URL-prefix property counts only the exact prefix it was verified on. They are different datasets that produce different numbers for the same site, and a chart built on the wrong one looks completely plausible. Pick the one your team actually reports on, and write the choice down somewhere the next person will find it.

The choice that costs you later: Site Impression vs URL Impression

The connector asks you to pick one of two tables, and the difference is not cosmetic:

  • Site Impression gives you Query, country, device and date — but no landing page.
  • URL Impression gives you Landing Page, country, device and date — but no query.

Which means the single most natural SEO question there is — which queries bring traffic to this page? — cannot be answered by one Search Console data source in Looker Studio. Not by a clever chart, not by a calculated field. The pair simply isn't in either table.

The usual workaround is to create both data sources and blend them. It doesn't work, and it's worth understanding why rather than blaming your setup: a blend joins on the fields the two tables share — date, country, device — and the query-to-page relationship was never in either side to begin with. What comes back is a cross product wearing a table's clothes: every query multiplied against every page for that day, with numbers that look specific and mean nothing.

The API can do it. The connector chooses not to.

Here's the part that reframes the whole problem. Search Console's own Search Analytics API accepts query and page as dimensions in the same request. Anything reading that API directly can hand you the pair. The two-table split is a decision made inside the Looker Studio connector, not a limit in the data.

So the fix isn't a better chart. It's reading the same API somewhere that doesn't make you choose.

The four walls, in the order you'll hit them

1. Sixteen months, hard stop

Search Console retains roughly sixteen months of performance data. Looker Studio queries it live, so your dashboard's history is Search Console's history — there is no archive behind it. The first time someone asks for a two-year seasonality comparison, the answer is that the data no longer exists anywhere unless you were storing it yourself the whole time.

2. Anonymized queries mean the numbers never reconcile

Search Console filters out very low-frequency queries for privacy reasons. The consequence catches people out constantly: the sum of a query-level table will always be smaller than the site-level clicks card on the same page. Neither number is wrong; they're different populations. But a stakeholder staring at two totals that disagree will ask about it every single month, and a "top queries" chart is quietly omitting the entire long tail while looking complete.

3. The last two days aren't final

Search Console publishes fresh data within hours and then revises it upward as processing completes. A Monday dashboard that includes yesterday is showing a provisional number that Google will raise later in the week. Nothing on the Looker Studio canvas marks which rows are still settling — the sparkline dips at the right edge and someone reads it as a drop.

4. It stays in the canvas

Every new question is a new chart, built by hand, by whoever has edit rights. A blend tops out at five data sources and gives you join semantics rather than SQL. So when the question becomes "how did organic clicks track against paid spend last quarter", you are reconciling two dashboards by eye — which is exactly the moment people start wondering whether the canvas is the right container at all. We took that argument further in Looker Studio alternatives.

The other route: read the same API where you can join it

TableBI connects Search Console through the same OAuth flow, then keeps the data in two altitudes: search_console_raw, the lossless per-platform table with every dimension the API returns, and facts, where clicks and impressions sit in the same cross-channel definitions as your ad platforms. Setup is three commands:

terminal
# install the CLI and teach your agent to drive it
npm i -g @tablebi/cli
tablebi login
tablebi install

# browser opens for OAuth, then the backfill syncs in
tablebi connect gsc --site sc-domain:example.com

# confirm what landed, and how fresh it is
tablebi sources

Now the query Looker Studio can't express is one statement — query and page in the same result set, no blend, no cross product:

claude code → tablebi
# which queries bring impressions to which pages?
tablebi ask "SELECT query, page, SUM(clicks) AS clicks,
             SUM(impressions) AS imp, AVG(position) AS pos
             FROM search_console_raw
             WHERE date >= (SELECT MAX(date) FROM search_console_raw) - 28
             GROUP BY query, page
             ORDER BY imp DESC LIMIT 50"

Two details in that query are deliberate. The date filter anchors on MAX(date) rather than today's date — because of wall #3, "today" is not a row that exists yet, and anchoring on the calendar gives you an empty window every morning. And every answer comes back with a trust block: how fresh each source is, plus the caveats that matter here — that the last two days are provisional, and that query-level sums fall short of site totals by design. Your agent reads those and stops confidently reporting a revision as a decline.

If you want the full Search Console workflow rather than just the connection, that's Claude Code for SEO; if what you actually wanted was the raw API without writing an OAuth client, see the Search Console API alternative.

The question the canvas can't reach

The reason to move Search Console out of its own dashboard is rarely Search Console. It's that organic is one line in a picture that also contains paid, and the blend cap is where that picture stops being buildable:

claude code → tablebi
# organic clicks next to paid spend, one result, same definitions
tablebi ask "SELECT platform, SUM(clicks) AS clicks, SUM(cost) AS spend
             FROM facts WHERE date >= (SELECT MAX(date) FROM facts) - 28
             GROUP BY platform ORDER BY clicks DESC"

Pin it to a live URL

When a view is worth keeping, pin it. What gets stored is the query, not a snapshot — so the URL refreshes itself every time the source syncs:

claude code → tablebi
tablebi pin --title "Search Console — 28 days" \
  --widget "Daily clicks::line=SELECT date, SUM(clicks) AS clicks FROM search_console_raw …" \
  --widget "Top query × page=SELECT query, page, SUM(impressions) AS imp FROM search_console_raw …"
✓ published → https://dk.tablebi.com/d/dsh_…  (public, read-only, self-refreshing)

Here's a real one — live Search Console data across a portfolio of sites, pinned exactly this way. Not a mockup; it refreshes as the sources sync:

Which route should you actually pick

The native connector is genuinely good at what it does, and swapping it out for the sake of it is a waste of an afternoon. A straight read:

  • Stay with the native Looker Studio connector when you're reporting on one property, the questions are site-level trends, your team already lives in the Looker Studio canvas, and nobody needs query-by-page or more than sixteen months.
  • Move to a CLI-driven backend when you need query × page together, history beyond Search Console's retention, organic and paid in one result set, or when the thing reading the data is an agent rather than a person — because an agent can't drag a chart, but it can write SQL and read a freshness block.

For what that second route looks like as a finished artifact rather than a set of commands, see the SEO dashboard guide. And if your problem is a source Looker Studio has no connector for at all, that's a different and worse situation — covered in no Looker Studio connector for your source.

FAQ

Is the Google Search Console connector for Looker Studio free?

Yes. Search Console is a Google product, so Looker Studio ships a first-party connector for it at no cost — no partner subscription, no per-account billing. That's the exception, not the rule: most non-Google sources are served by paid partner connectors instead.

Why can't I see queries and landing pages in the same Looker Studio table?

Because the connector makes you choose a table type when you create the data source. Site Impression carries Query but not Landing Page; URL Impression carries Landing Page but not Query. Blending the two doesn't recover the pair — the blend joins on date and country, producing a cross product rather than a real query-to-page mapping. The Search Console API itself accepts both dimensions in one request, so the limit lives in the connector, not the data.

How far back does Search Console data go in Looker Studio?

About sixteen months, which is Search Console's own retention window. Looker Studio queries the API live rather than storing a copy, so there is no longer history sitting behind the dashboard. If you need multi-year comparisons, something has to be keeping the rows before you need them.

Why don't my Looker Studio query numbers add up to total clicks?

Search Console anonymizes very low-frequency queries, so any query-level breakdown sums to less than the site-level total. Both numbers are correct for what they measure. Expect the gap, explain it once, and don't try to reconcile it — it can't be closed.

Can I get Search Console into a dashboard without using Looker Studio?

Yes. TableBI connects Search Console through the same OAuth flow, keeps the lossless rows in search_console_raw, and publishes a live read-only dashboard URL with one tablebi pin command. The dashboard stores the query rather than a snapshot, so it refreshes as the source syncs.

Try it

Query Search Console the way the API actually allows — then pin it live.

terminal
npm i -g @tablebi/cli && tablebi install