GSC BigQuery Export

How to use the Google Search Console BigQuery export to query unsampled daily click and impression data with no UI row cap (anonymized queries still excluded), the difference between the UI and the raw export, setup, cost mechanics, and the no-backfill gotcha.

First published: Jun 27, 2026 · Last updated: Jul 18, 2026 · Advanced
demand #17 in Search Engine Tools#20 in Tools#285 in Technical SEO#381 on the site

The bulk data export (aka the GSC BigQuery export) schedules a daily, unsampled dump of your Search Console Performance data — minus anonymized queries, which stay hidden — into a Google Cloud BigQuery project, getting past the UI's ~1,000-row export cap and its ~16-month retention window. It lands three tables (site-level, URL-level, and an export log), and it does NOT backfill historical data. There's a real BigQuery free tier, but it needs an active billing account, a 14-day-minimum partition-expiration setting, and careless querying can run up bills. It's the third rung of a ladder — UI, then API, then bulk export — and Bing has no native bulk-export equivalent as of this writing.

TL;DR — The bulk data export is a scheduled daily, unsampled dump of your Search Console PerformanceThe Google Search Console report that shows how your site actually performed in Google Search, built from real impressions and clicks. It reports four metrics — clicks, impressions, average CTR, and average position — and keeps the most recent 16 months of data. data into a BigQuery dataset — no ~1,000-row export cap, no ~16-month retention wall. It lands three tables (searchdata_site_impression, searchdata_url_impression, ExportLog). Setup: a Google Cloud project with billing enabled, the BigQuery + BigQuery Storage APIs on, two IAM roles granted to Google’s export service account, then Settings → Bulk data export in GSCA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results.. It does not backfill, still reports anonymized queries as empty strings, and the first export lands within ~48 hours. Cost is a real free tier plus per-TB query charges — the classic bill comes from dashboards querying raw tables live. Think of it as the third rung: UI → API → bulk export.

What it actually is

Bulk export is a scheduled Search ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance. data pipeline into a Google Cloud project, not an independent ranking-data source. Evidence for this claim Search Console bulk data export sends daily performance data to BigQuery in a configured Google Cloud project. Scope: Search Console bulk export; setup, permissions, quotas, and supported properties follow Google's current documentation. Confidence: high · Verified: Google: Bulk data export Queries must respect the documented tables, keys, and privacy/aggregation behavior. Evidence for this claim Bulk export uses site-impression, URL-impression, and export-log tables with documented schemas. Scope: Google's published Search Console export schema; aggregation and privacy handling still affect analysis. Confidence: high · Verified: Google: Bulk export tables

Daniel Waisberg, a Search Advocate at Google, describes it plainly: “A bulk data export is a scheduled daily export of your Search Console performance data. It includes all the data used by Search Console to generate performance reports. Data is exported to Google BigQuery, where you can run SQL queries for advanced data analysis or even export it to another system.” (quoted in Search Engine Journal).

The point is scale. The Search Console UI caps most exports around 1,000 rows and shows a rolling ~16-month window. The Search Console APIA set of REST APIs that let you programmatically read and manage Google Search Console data for properties you've verified — Performance data, URL index status, sitemaps, and properties — authorized with OAuth 2.0. gives you more but is still capped and rate-limited. The bulk export removes the row ceiling entirely and lets you decide how long to retain. Google’s own line from the announcement, as reproduced by Search Engine Land: “The daily data row limit does not impact this data, so you can extract more data using this method,” and the feature “could be particularly helpful for large websites with tens of thousands of pages.”

What data you get: the three tables

Everything lands in a dataset whose name always starts with searchconsole. Three objects show up (Table guidelines and reference):

  1. searchdata_site_impression“Contains performance data for your property aggregated by property.” Key fields: data_date (“The day on which the data in this row was generated (Pacific Time)”), site_url (domain properties use the sc-domain: prefix), query, is_anonymized_query, country (ISO-3166-1 Alpha-3), search_type (web/image/video/news/discover/googleNews), device, impressions, clicks, and sum_top_position.
  2. searchdata_url_impression“Contains performance data for your property aggregated by URL.” Everything above, plus url (“The fully-qualified URL where the user eventually lands when they click the search result”), is_anonymized_discover, a family of is_[search_appearance_type] boolean flags (e.g. is_amp_top_stories, is_job_listing, is_tpf_faq) so you can slice by rich-result type, and sum_position. This is the granular table most analysis runs on.
  3. ExportLog“A record of what data was saved for that day. Failed exports are not recorded here.” Fields include agenda (currently only SEARCHDATA), namespace (which table was written), data_date, epoch_version (“An integer, where 0 is the first time data was saved to this table” — it increments when Google later revises a day’s data), and publish_time.

The anonymized-query caveat is the important one. Even here, at the raw level, anonymized queries are not revealed. As Google’s field description puts it, when is_anonymized_query is true the query field “will be a zero-length string.” Their metrics are still aggregated into your totals, but they’re never attributable to a specific term — exactly the same limitation the UI and the API have. This is a big deal at scale: in my Ahrefs study of GSC’s hidden terms, across 146,741 websites and roughly 9 billion clicks, 46.08% of all clicks went to queries Google doesn’t disclose — and that study used the Search Console APIA set of REST APIs that let you programmatically read and manage Google Search Console data for properties you've verified — Performance data, URL index status, sitemaps, and properties — authorized with OAuth 2.0., which “allows us to get all of the data—and there’s still a lot missing.” The BigQuery export doesn’t recover any of it. If someone tells you bulk export “finally shows you the hidden queries,” they’re wrong.

How to set it up

The flow (Start a new bulk data export):

  1. Create or pick a Google Cloud project with billing enabled. Per Google: “Data is subject to Google Cloud storage and query costs, but there is a free usage level.” You need billing on even to stay inside the free tier.
  2. Enable the BigQuery API and the BigQuery Storage API in that project.
  3. Grant Google’s export service account access. Add search-console-data-export@system.gserviceaccount.com as a principal with two IAM roles: BigQuery Job User (bigquery.jobUser) and BigQuery Data Editor (bigquery.dataEditor).
  4. In Search Console, go to Settings → Bulk data export. Paste the Cloud project ID (the ID, not the project number), choose a dataset name, and choose a dataset location. Note the naming rule: “The dataset name always starts with the string searchconsole, even when you customize it.” If you set a partition-expiration policy on the export’s own dataset, keep it at 14 days or longer — Google documents a 14-day minimum, and going shorter is a documented failure cause. Leave the generated table schema untouched too; altering it is the other documented way to break the export (more in Troubleshooting below).
  5. Wait. Google says the export process itself should begin within about a day of activation. “The first export will happen up to 48 hours after your successful configuration in Search Console,” and that first delivery contains only the day-of-export data — nothing from before setup (see the no-backfill section next). After that it runs daily until you stop it.

One practical expectation to set: Search Console data lands with a two-day delay, so the most recent day you’ll ever have is two days ago. Ask for a 30-day range and you effectively get about 28 days of usable data.

The no-backfill gotcha

Say it out loud, because it burns people: activating the export does not pull in your historical data. It starts from activation day and only accumulates forward. This is common enough that Google’s own community forum has multiple threads about it — “How to backfill with historical data when Bulk data export is activated” (thread 300051568), thread 255704574, and thread 429248330. Antoine Eripret puts it bluntly in his practitioner deep-dive: “You can’t get historical data: if you activate it today, you’ll have data from today.” The takeaway is simple — turn it on the day you first hear about it, even if you’re not ready to analyze anything yet, so the clock starts.

What it costs, and how not to get surprised

The Google Cloud Blog post by Daniel Waisberg and Gaal Yahas sells the upside — “If you have a large website, this solution will provide more queries and pages than the other data exporting solutions” and “Search Console stores up to sixteen months of data; using BigQuery you can store as much data as it makes sense to your organization” — but the cost mechanics are on you.

As of this writing, BigQuery’s free tier is roughly 10 GiB of storage free plus 1 TiB (~1 TB) of on-demand query processing free per month; beyond that it’s about $6.25 per TiB processed and roughly $0.02 per GB stored per month (varies by region and storage class). Pricing changes, so verify the current numbers before you quote them to anyone. Most small-to-mid sites stay free or near-free.

The bills come from how you query, not how much traffic you have. Two things matter:

  • Cost scales with query/keyword diversity, not raw traffic. As Trevor Fox puts it in his complete guide: “The volume of data that is more a factor of keyword variety than it is search volume. A site with a low search volume for lots of keywords will generate more data than a site with lots of search volume for a single keyword.”
  • Don’t point a live dashboard at the raw tables. This is the classic horror story. Antoine Eripret documented Looker Studio scanning 23 TB in a single day, around €115, when wired directly to the raw billion-row tables. Google’s own BigQuery efficiency tips post says the same in principle: pre-aggregate into summary tables, filter on the date partition in a WHERE clause, avoid SELECT *, set budget alerts, and set partition-expiration to auto-delete old partitions.

The fix is boring but effective: materialize your query results into small permanent summary tables on a schedule, and point your dashboards at those, not at the raw export.

Querying: the rules that keep you sane (and cheap)

From Google’s query guidelines:

  • Always aggregate. “Data in the tables is not guaranteed to be consolidated by date, URL, site, or any combination of keys.” Translation: you’ll get multiple rows for the same day/URL/query, so always SUM() your metrics and GROUP BY your dimensions. Never treat a single row as a finished number.
  • Filter the date partition. “A good way to minimize query costs is to use a WHERE clause to limit the date range in the date partitioned table.”
  • Drop anonymized rows when you want real top queries. “An anonymized query is reported as a zero-length string in the table” — so add WHERE query != ''.
  • Position is zero-based. Both tables store position starting at 0, so average position is SUM(sum_top_position) / SUM(impressions) + 1 (add the 1).

Google ships sample queries for daily web-search stats, top mobile queries by country, Discover URLs by clicks, FAQ rich-result performance (is_tpf_faq = true), and brand-query tracking via REGEXP_CONTAINS. Start from those.

Managing and troubleshooting the export

From Manage and monitor bulk data exports:

  • Stopping isn’t instant. Settings → Bulk data export → Deactivate export. “Bulk exports will stop in the next 24 hours,” so one more day of data may still land after you flip it off.
  • Two failure thresholds, not one. “Search Console retains data from failed exports for about a week.” And then: “Search Console will stop trying to export data for a given date after about a week of failed attempts, and after about a month of failed export attempts, Search Console will stop the bulk export entirely.” So a sustained problem doesn’t just skip days — after ~a month it shuts the whole export off, and you’d have to set it up again.
  • The schema-change trap (and the partition-expiration floor). If you alter the schema of an exported table, you break the export. Google also requires at least 14 days of partition expiration on the export dataset — set it shorter and the export can fail. Leave those tables alone; build your own derived tables instead. (Other common causes of failure include exceeding your Cloud project’s quota and revoking the service account’s access.)
  • Use the Test report. There’s a “Test report” feature that lets you verify certain correctable issues — project ID/credentials, permissions — without waiting for the next scheduled run. Note it doesn’t force an immediate re-export; check back roughly 24 hours later to confirm the fix took.
  • Search Console emails property owners when export errors start and when they resolve, and Settings shows the status of the most recent export attempt.

Where it sits: UI → API → bulk export

Think of three rungs on a ladder, each removing a limit the one below it hit:

  • UI export — ~1,000 rows, ~16 months, no anonymized queries. Fine for most.
  • Search Console API — more rows, still capped and rate-limited, still no anonymized queries. Good for ad-hoc and programmatic pulls.
  • Bulk data export — no row cap, retention you control, daily granular data, built for warehousing and joins. Still no anonymized queries. Doesn’t backfill.

And a nuance older guides get wrong: you’re not limited to one property per Cloud project anymore. Google later allowed multiple properties into a single project using distinct searchconsole_-prefixed dataset names.

What about Bing?

As of this writing, there’s no native equivalent. Bing Webmaster ToolsMicrosoft's free portal for monitoring and improving how a site appears in Bing search — the peer to Google Search Console, plus IndexNow instant indexing, richer backlink data, and keyword volumes. Because Bing's index also feeds Microsoft Copilot, it doubles as a window into AI-search visibility. doesn’t offer a first-party BigQuery/bulk export — which is exactly why a market of third-party ETL connectors (Supermetrics, Improvado, Catchr, and others) exists to move Bing Webmaster Tools data into BigQuery. If Bing had a native pipe, that market wouldn’t. That said, a connector isn’t guaranteed to replicate GSC’s own export schema or daily-partition behavior field-for-field — check any connector’s documented scope before assuming parity. So if you want Bing data in BigQuery alongside your GSC export, budget for a connector and verify what it actually delivers. (Confirm this is still current before citing it — Bing’s own feature set can change.)

For the broader context on where this sits, see the Search Engine Tools hub and its walkthroughs of Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. and Bing Webmaster ToolsThe free, first-party consoles search engines give site owners — Google Search Console and Bing Webmaster Tools — to see how their pages are crawled, indexed, and ranked, and to fix problems. The legacy name is 'webmaster tools.'.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.