Blog · Connectors

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

Published · Updated · 14 min read

Search Console is one of the few sources Looker Studio (renamed Data Studio in April 2026) 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". If the connector is already set up and the data isn't showing, go straight to the troubleshooting checklist.

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 type — Site Impression or URL Impression. This is the choice that matters; the next section is entirely about it.
  5. Pick the default search type — Web, Image, Video or News; the URL Impression table also offers Discover and Google News. Charts show only that type unless you add a control for the data source's Search type parameter, so the simplest way to show Web and Image side by side is 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: the two tables count differently, so they give different totals for the same days.

  • Site Impression gives you Query, country, device and date — but no landing page. It counts the way the Search Console overview chart does, by property: when two of your pages appear for one search, that is a single impression.
  • URL Impression gives you Landing Page and Query, plus country, device and date. It counts by page: the same search showing two of your pages is two impressions, and clicks and CTR belong to each URL.

So the most natural SEO question — which queries bring traffic to this page? — is answerable in Looker Studio, but only from the URL Impression table, and only in its counting. Its impressions will not match the Site Impression totals or the Search Console overview for the same dates. Neither number is wrong: Google aggregates by property for queries, countries, devices and dates, and by page for pages (Search Console Help, Performance report).

The trap is mixing them. A chart or blend that combines the two tables adds numbers that were counted two different ways, and nothing on the canvas says so. Pick one table per question: URL Impression when the question involves pages, Site Impression when you need the totals your stakeholders see in Search Console.

What the connector still can't give you

Even in the URL Impression table, queries Google anonymizes for privacy are missing from every query-level row, so a query-by-page table always sums to less than the page's own clicks. Search Console's own Search Analytics API returns both aggregations, by property and by page, and anything that reads it on a schedule can keep them side by side — the query-by-page detail next to the site totals that still include anonymized traffic, and past the sixteen months Search Console retains.

So the fix isn't a better chart. It's reading the same API somewhere that keeps both views.

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 (Google Search Central on data filtering and limits). 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 per-platform table that keeps query and page together on every row (with site totals, page totals and country × device in tables of their own), 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-by-page question is one statement, run against a stored copy rather than the live API:

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_totals_raw WHERE search_type = 'web' …" \
  --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 is a live dashboard on real data you can open now: Search Console totals across the TableBI founder's own sites. It is a different dashboard from the one described above, published the same way, and it re-runs its queries as the sources sync (what the demo shows, and what it doesn't):

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 more than sixteen months or organic next to paid.
  • Move to a CLI-driven backend when you need query × page next to the site totals, 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.

Reporting in a different BI tool? The same routes, costed for each one: Search Console to Power BI and Search Console to Tableau.

Search Console data not showing in Looker Studio: the checklist

When Search Console data doesn't appear in Looker Studio, or appears with numbers that don't match Search Console, the cause is nearly always one of the eight below. They're in the order people usually hit them: access problems at setup first, then missing days, then totals that disagree.

1. The property isn't listed, or other people see an error

Cause: the connector only lists properties that the authorizing Google account can open. Google's connector documentation says to sign in to Looker Studio and Search Console with the same Google account and to have at least view permission on the property; a Restricted user in Search Console qualifies (Search Console Help, users and permissions). When the report works for you but not for colleagues, the data source probably uses Viewer's credentials, which make every viewer bring their own access to the property; Owner's credentials let them see the data through yours.

Fix: reconnect with the account that has access, or ask a property owner to add yours, and pick the property your team actually reports on: an sc-domain: property covers every subdomain and protocol, a URL-prefix property only its prefix. A property added in the last few days can simply be empty, because Google says a new property can take up to a week to show data (Search Console Help, About Search Console data).

2. The last two or three days are missing or too low

Cause: Search Console data is usually available two to three days after the fact (Search Console Help, data discrepancies), and the newest data can be preliminary and still change. The Search Analytics API returns only finalized data unless a request asks for fresh data, and Google doesn't document which of the two the connector requests. Either way, a date range that ends today ends in days that are empty or incomplete.

Fix: end the date range three days back. In the date range settings, choose Custom, then Advanced, and set the end date to Today minus 3 days (Data Studio documentation on date ranges). If every report has been stuck on the same date for longer than that, check Google's Search Console data anomalies page, which lists known issues.

3. Older dates come back empty

Cause: Search Console keeps data for the last 16 months (Google Analytics Help on the Search Console integration), and the connector reads Search Console live instead of from a stored copy. A date range or a previous-year comparison that reaches past 16 months returns nothing for the older days.

Fix: keep ranges and comparisons inside 16 months. For longer history, Google's guide to debugging traffic drops suggests pulling the data with the Search Analytics API or bulk data exports and storing it in your own systems, which only helps from the day the storing starts.

4. Totals don't match Search Console

Cause: the table type. Site Impression counts by property, like the Search Console overview chart, while URL Impression counts by page, so one search that shows two of your pages is two impressions (Search Console Help on how Performance data is counted). A blend of the two tables adds numbers that were counted two different ways.

Fix: compare Site Impression totals with the Search Console chart and keep URL Impression for page-level questions. To show both in one report, Google's connector documentation says to create two data sources and add both to the report; the table-type section above explains the difference.

5. Query rows add up to less than the total, or a blank query appears

Cause: anonymized queries, meaning queries not issued by more than a few dozen users over two to three months, are left out of query rows but counted in the totals (Google Search Central). Google's connector documentation adds that Looker Studio may group these hidden queries into one row with a blank value. Very large sites hit a second limit: the API and the connector return at most 50,000 rows per day per site per search type.

Fix: take headline clicks and impressions from a chart without the Query dimension. A filter that excludes null Query values removes the blank row from a top-queries table, but the remaining rows then sum to less than the total, and no setting closes that gap.

6. Image, Video, News or Discover traffic is missing

Cause: each data source has a default search type, chosen in the Search Type panel, and its charts show only that type. The Site Impression table offers Web, Image, Video and News; Discover and Google News exist only in the URL Impression table, according to Google's connector documentation.

Fix: add a drop-down control bound to the data source's Search type parameter so viewers can switch types, or create one data source per type when two types have to sit side by side. For Discover or Google News, use a URL Impression data source.

7. A field such as URL CTR is missing or shows an error

Cause: the two tables expose different metric fields. Url Clicks and URL CTR belong to the URL Impression table, while a Site Impression data source offers Clicks and Site CTR, so a chart or template built for one table breaks when it is pointed at a data source that uses the other.

Fix: point the chart at a URL Impression data source, or swap in the Site Impression field. The two CTRs are not interchangeable: they are computed on different counts, and Google notes that CTR is generally higher when data is aggregated by property (Search Console Help).

8. Search Console shows newer data than the report

Cause: Looker Studio keeps query results in memory and serves repeat queries from there. For Google's marketing and measurement connectors, Search Console included, the data refreshes every 12 hours and the rate can't be changed (Data Studio documentation on data freshness). The time of the last refresh appears in the report's bottom-left corner.

Fix: as an editor, open More options and choose Refresh data; a new refresh is accepted at most once a minute. Viewers can refresh only when the report's Viewer data refresh option is on, and viewers of an embedded report can't refresh it manually.

Causes 3 and 5 are limits of Search Console itself, so no report setting removes them: history past 16 months exists only if something stored it, and anonymized queries never come back, although a stored copy can keep the site totals next to the query rows (the other route above). Seeing quota errors on a GA4 data source instead? That's a different limit, covered in GA4 quota exceeded in Looker Studio.

FAQ

Is Looker Studio now called Data Studio?

Yes. Google rebranded Looker Studio as Data Studio on April 16, 2026, and the paid edition is now Data Studio Pro (Data Studio release notes). Google's Data Studio connector documentation still describes a Google-built Search Console connector with the same two aggregation methods, site impressions and URL impressions.

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.

Can I see queries and landing pages in the same Looker Studio table?

Yes, from the URL Impression table, which carries both Query and Landing Page. Its numbers are counted by page, so they will not match the Site Impression table or the Search Console overview for the same dates, and queries Google anonymizes are missing from every query-level row.

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.

Why is my Search Console data not showing in Looker Studio?

Usually one of four reasons: the Google account you authorized has no access to the property, the date range ends in the last two or three days that Search Console hasn't published yet, the range reaches past the 16 months Search Console keeps, or the report is still serving data cached up to 12 hours earlier. Numbers that appear but don't match Search Console usually come from the Site Impression vs URL Impression choice or from anonymized queries.

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

Yes. TableBI connects Search Console through the same OAuth flow, keeps query-by-page 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