Google Search Console logo

SEO & search

Connect Google Search Console to Excel, Sheets and AI

Queries, pages, countries and devices as tables. The same connector the rest of Query Streams uses internally for its own SEO.

1connection
0inbound ports
read-onlyenforced

One connection, every surface

Where your Search Console data can go

Connect Search Console once and the same read-only connection feeds all of these — no second setup, no second copy of the data. 8 of 11 have a step-by-step guide.

Guide

Search Console to Excel

Microsoft Excel · Excel add-in

Pull live Search Console results straight into a worksheet and refresh them on demand — desktop Excel, Excel Online, Microsoft 365.

Read the guide
Guide

Search Console to Google Sheets

Sheets add-on

Run a saved Search Console query from the sidebar and drop the rows into the sheet. Shared collaborators can refresh it themselves.

Read the guide
Guide

Search Console MCP server

Claude, Cursor and MCP clients

Give an AI assistant read-only access to Search Console with the schema it needs to write correct SQL — no credentials in the chat.

Read the guide
Supported

Search Console REST API

HTTP endpoint

Publish a Search Console query as an authenticated JSON endpoint any application can call, with an OpenAPI 3.1 spec and ready-made Postman, Insomnia and Hoppscotch collections. No database port is opened.

How REST API works no Search Console walkthrough written yet
Guide

Search Console to Airtable

Automation platform

Sync Search Console rows into an Airtable base on a schedule, or fetch them inside an Airtable automation script.

Read the guide
Guide

Search Console to Baserow

Automation platform

Feed a Baserow table from Search Console over the REST endpoint — self-hosted or Baserow cloud.

Read the guide
Guide

Search Console to SeaTable

Automation platform

Keep a SeaTable base current with Search Console data without exporting a file or exposing the database.

Read the guide
Guide

Search Console to Smartsheet

Automation platform

Push Search Console results into a Smartsheet grid so plans and reports read from the source system, not last week's export.

Read the guide
Guide

Search Console to Anvil

Anvil Works · App platform

Back an Anvil Python app with Search Console through the REST endpoint instead of embedding database credentials in the app.

Read the guide
Supported

Search Console to Power BI

Power Query M

Paste the generated Power Query M into the Power BI Advanced Editor and the report reads live Search Console results over HTTPS — no ODBC driver, no database port opened.

How Power BI works no Search Console walkthrough written yet
Supported

Search Console alerts and reports

Slack · Discord · Email · Webhook

Put a Search Console query on a schedule and have the rows delivered to Slack, Discord, email or a signed webhook — or hold the message until a row count, threshold or percentage change crosses the line you set.

How alerts and reports work no Search Console walkthrough written yet

How it works

5 steps, no inbound firewall change

01

Create a Google service account and add it as a user on the Search Console property.

02

Install the Network Agent and give it the service account key and the site URL — either the https form or the sc-domain form.

03

Save. The first sync walks back sixteen months across all five search types.

04

Write ordinary SQL against gsc.search_analytics — or let Nova write it.

05

Read it from Excel, Sheets, Power BI, MCP or REST, joined to whatever holds your signups and revenue.

Feature deep-dive

What Search Console gives you

Sixteen months, in one table

Search Console keeps sixteen months of data and shows you it a slice at a time. Once it is SQL, the year-over-year comparison that the interface cannot do is a GROUP BY.

  • gsc.search_analytics is one row per query, page, country, device and day, with clicks, impressions, click-through rate and average position.
  • Five search types are synced, not just web — image, video, news and Discover come across too, each labelled.
  • Discover and News rows carry no query or device, because Google does not report those dimensions for them. The columns are null rather than invented.
  • gsc.sites and gsc.sitemaps come along as their own tables, so submitted-versus-indexed counts are queryable.

Honest about Google's lag

Search Console data is roughly three days behind, and the last few days keep changing after they first appear. Both are Google's behaviour, and both are surfaced rather than hidden.

  • The sync runs to three days ago, because asking for anything more recent returns a number that will be wrong tomorrow.
  • Every row carries a data_state column marking it partial or final, so a report can exclude the days that are still settling instead of quietly averaging them in.
  • Each incremental pass re-reads the last five days, so a partial row becomes the final one rather than staying as the first version seen.

We use this one ourselves

Query Streams runs its own SEO on this connector — the same tables, the same three-day lag, the same partial-versus-final flag. It is not a demo integration built for a logo wall.

  • If a query lands more than the twenty-five thousand rows Google returns per page for a day, that slice is what you get; splitting it across more dimensions is not automatic.
  • The URL inspection table exists and is populated on demand rather than by the scheduled sync.

Shared by every API connector

How every API connector works

  • Your account becomes tables — endpoints are mapped to typed SQL tables with primary keys and indexes, so you write SELECT, JOIN and GROUP BY instead of paging through JSON.
  • You choose what syncs, and how often — each table has its own interval, or none at all. Where the vendor's API supports it, only records that changed since the last run are fetched.
  • The copy is yours — it lives in an AES-256-GCM encrypted DuckDB file next to the agent, on your machine. Not in our cloud.
  • The vendor only ever hears from you — the agent calls the API directly from your own network, so your token is not needed by Query Streams to answer a query.

Good to know

  • It is a synced copy, not a live proxy — a query reads what has already been fetched, so it returns at SQL speed and never spends your API rate limit. Selected tables can additionally refresh a stale row as you read it.
  • Rate limits are respected for you — each connector paces itself well inside the vendor's published limits, so a report cannot get your account throttled for everything else that uses it.
  • Nothing is thrown away — fields the table does not name are kept in a raw_data JSON column you can still query.
  • Join it to your databases — an API table and a SQL Server table in the same statement is an ordinary query here, not an integration project.

Cross-source SQL

Join Search Console to the rest of your data

Search Console can tell you which page earned the click. It cannot tell you which of those clicks became an account, or what the account went on to pay. Those two live elsewhere, and one statement can reach all three. Each source runs only the part it can, streams the result back, and the join happens centrally — the sources never talk to each other and nothing is copied anywhere.

3 connections · 3 agents

Google Search Console SEO & search
PostgreSQL Relational engine
Stripe Payments & billing

One statement

-- clicks from Search Console, the signup from your database, revenue from Stripe
SELECT   s.page, SUM(s.clicks) AS clicks, SUM(i.amount_due) AS invoiced
FROM     gsc_site.gsc.search_analytics1 s
JOIN     pg_crm.public.customers2       c ON c.landing_page = s.page
JOIN     billing.stripe.invoices3       i ON i.customer = c.stripe_id
GROUP BY s.page
ORDER BY clicks DESC;

The three parts are connection, schema and table — and the connection name is whatever you called it. Illustrative columns; your tables will be your tables. Search Console data runs to three days back, which is Google’s own reporting lag rather than anything the sync adds. Read-only applies to every piece: SELECT, WITH and EXPLAIN only, with a ceiling on how much any one source may hand over for a single query. How federated queries work

Connection details

What Search Console needs

Authentication
A Google service account key, added as a user on the property. Read-only scope, held on the agent
Property
A site URL — https://example.com/ or sc-domain:example.com. Leave it blank and every property the account can see is synced
Reached over
HTTPS from your network to the Search Console API. Nothing inbound
Schema
gsc — so gsc.search_analytics, gsc.sitemaps
Tables
4. search_analytics, sites, sitemaps and url_inspection
Search types
web, image, video, news and discover, each labelled on the row
Freshness
Runs to three days ago, which is Google's own reporting lag. The last five days are re-read each pass
History
16 months on first sync — everything Google retains
Local copy
An AES-256-GCM encrypted DuckDB file beside the agent, on your machine

Read-only is structural. Every call this connector makes is a read, and the token it holds is scoped read-only — it cannot submit a sitemap or request indexing.

In a cross-source query the middle part of a three-part reference is gsc. A connection called gsc_site reading search analytics is written gsc_site.gsc.search_analytics.

Vendor documentation: search.google.com

FAQ

Questions about Google Search Console

Which tools can read Google Search Console data through Query Streams?

All of them, from one connection: Excel, Google Sheets, MCP, REST API, Airtable, Baserow, SeaTable, Smartsheet, Anvil, Power BI, scheduled alerts and reports. Connect the account once and every surface reads the same read-only connection — there is no per-tool setup and no second copy of the data.

Do I have to open a firewall port to my Google Search Console account?

No. The Query Streams Network Agent runs inside your network and opens a single outbound encrypted connection. Nothing listens for inbound traffic, no VPN is required, and the account keeps its existing firewall rules.

Can Query Streams change data in Google Search Console?

No. The agent enforces read-only at the point of execution — one statement at a time, SELECT and friends only. Credentials stay on the agent and are never sent to Query Streams.

What does Query Streams need to connect to Google Search Console?

A reachable host, a role and its password — the agent carries the driver, so nothing is installed on the account. Authentication: A Google service account key, added as a user on the property. Read-only scope, held on the agent. Property: A site URL — https://example.com/ or sc-domain:example.com. Leave it blank and every property the account can see is synced. Reached over: HTTPS from your network to the Search Console API. Nothing inbound. Schema: gsc — so gsc.search_analytics, gsc.sitemaps.

Can I join Google Search Console to another database in the same query?

Yes — that is a federated query. One statement can reference Google Search Console and your other connections at once, written as connection.schema.table. Each source runs only the part it can and streams the result back; the join happens centrally, so the sources never connect to each other and nothing is copied or scheduled. Read-only applies to every piece — SELECT, WITH and EXPLAIN only — and there is a ceiling on how much any one source may hand over for a single query. Federated queries are a plan feature; the federated queries page carries the current source and size limits.

Put Search Console where the work happens

Install the agent, point it at your account, and pick a destination.

Read-only Outbound only Credentials stay on the agent