GSC BigQuery Export: Setup, the Three Tables, and Your First Queries
The bulk export is the deepest Search Console data Google gives you, and it starts from zero on setup day. The full setup, the schema, and the SQL to start with.
Search Console's bulk data export streams your full performance data into BigQuery daily: more of the query long tail than the API returns, plus an aggregate row for anonymized queries. It never backfills, so the setup date decides how much history you will ever own. The path:
- PREPARE THE CLOUD PROJECT: A Google Cloud project with billing enabled, plus the two BigQuery roles for Search Console's service account. Ten minutes if the project exists.
- SWITCH THE EXPORT ON IN GSC: Settings, then Bulk data export: paste the project ID, pick a dataset location you will not want to change, confirm. First tables arrive within 48 hours.
- LEARN THE THREE TABLES: searchdata_site_impression for property trends, searchdata_url_impression for page-level work, ExportLog for pipeline health.
- MIND THE ZERO-BASED POSITION: Average position is sum_position divided by impressions, plus one. Skipping the plus one flatters every ranking you report.
- VERIFY MONTHLY: One saved query against ExportLog confirms the data kept arriving. A silently dead export discovered a year late defeats the whole point.
Under an hour end to end, most of it waiting on Google Cloud screens. Every day you delay is a day of the deepest data you will never have.
CrawlRaven reads your Search Console data daily over OAuth and turns it into a ranked plan, which answers most day-to-day questions without SQL. The BigQuery export answers a different one: owning the raw record, forever, at full depth. This guide sets it up properly. Try CrawlRaven free: 1 site, no credit card →
There is a version of your Search Console data that is deeper than the interface, deeper than the API, and permanent. Google will stream it to you daily, free, forever. The catch is one line in the documentation most people read too late: it starts from zero on the day you enable it.
That is the bulk data export to BigQuery, shipped in February 2023 and still the least-used serious feature in Search Console. This guide is the setup done right: the Cloud project, the switch, the three tables you get, the starter SQL, and the one arithmetic gotcha that flatters every ranking by one position.
What the export gives you that nothing else does
Three things, each unavailable anywhere else in the product:
- Depth. The export carries more of the query long tail than the API returns, so the "small" queries that never make your 25,000 API rows still land in your tables.
- The anonymized aggregate. Anonymized queries get one combined row per day, clicks and impressions with a null query string. It is the only place their size is visible at all.
- Permanence. The interface forgets everything older than 16 months. Your dataset forgets nothing, which is the retention argument covered in keeping GSC data past the 16-month limit.
Step 1: Prepare the Google Cloud project
The export needs somewhere to write. You need Owner permission on the GSC property and admin rights on a Cloud project:
- Create or pick a Google Cloud project and note its project ID, the lowercase-with-hyphens one, not the display name.
- Enable billing on the project. The export will not run without it, even when usage lands inside the free allowances.
- Grant Search Console's service account its two BigQuery roles in that project, exactly as the GSC setup screen names them. The screen shows the account address to grant; copy it rather than retyping.
- Set a billing alert now, while you are in the console. A threshold you never hit costs nothing; a surprise invoice costs trust in the whole pipeline.
Step 2: Switch the export on in Search Console
- In Search Console, open Settings → Bulk data export.
- Paste the project ID from step 1.
- Pick the dataset location deliberately. Changing it later means a new dataset, so choose the region your other data lives in.
- Confirm, then wait up to 48 hours for the first daily tables. Empty until then is normal.
The export writes forward only. If the 16 months currently visible in Search Console matter to you, capture them with a one-time API pull before you think of the export as your archive, or accept the gap permanently. The full backfill routine is step 1 of the data retention guide.
Step 3: Learn the three tables
Once data flows, the dataset holds three tables, and knowing which one answers which question saves most of the early confusion:
The three tables the export writes
searchdata_site_impressionsearchdata_url_impressionExportLogThe practical split: property questions ("how did clicks trend this quarter?") read the site table, page questions ("which URLs are decaying?") read the URL table, and "is this thing still running?" reads ExportLog. The URL table is much larger, so point exploratory queries at the site table first and your bill will thank you.
Step 4: Run your first three queries
Three starters cover the first month of questions. Replace the dataset name with yours:
- Daily clicks trend, the sanity check that data is arriving and charts match the UI roughly:
SELECT data_date, SUM(clicks) AS clicks
FROM `yourproject.searchconsole.searchdata_site_impression`
GROUP BY data_date
ORDER BY data_date DESC
LIMIT 28;- Top queries with correct positions, including the plus-one:
SELECT query,
SUM(clicks) AS clicks,
SUM(impressions) AS impressions,
SUM(sum_position) / SUM(impressions) + 1 AS avg_position
FROM `yourproject.searchconsole.searchdata_site_impression`
WHERE is_anonymized_query = false
AND data_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 28 DAY)
GROUP BY query
ORDER BY clicks DESC
LIMIT 50;- Your anonymized share, the number the interface never states:
SELECT
SUM(IF(is_anonymized_query, clicks, 0)) / SUM(clicks) AS hidden_share
FROM `yourproject.searchconsole.searchdata_site_impression`
WHERE data_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY);The zero-based position gotcha
The export's sum_position counts the top ranking as 0, not 1. Average position is therefore sum_position / impressions + 1, and the plus one is not optional: without it, every ranking you report is one position better than Search Console shows, your "position 1" rows are impossible, and someone eventually notices in a meeting.
Five gotchas that cost people their first afternoon
Step 5: Put verification on a calendar
A retention pipeline's worst failure is silent death. Monthly, thirty seconds:
- Check ExportLog has rows for last month. That is the whole check; save the query from step 4 style and rerun it.
- Spot-compare one number against the Search Console UI, same property and date range. Expect close, not identical: anonymized handling and provisional recent days differ by design.
- Re-annotate property changes. A move to a new domain property starts a new data lineage, and the note belongs in your SEO annotations the day it happens.
Tips before the dataset grows
- Query the site table by default. It answers most questions at a fraction of the URL table's scan cost.
- Always filter by data_date. The tables are date-partitioned, and a date filter is the difference between scanning a month and scanning the archive.
- Decide the anonymized row's fate per query. Include it for totals, exclude it for query-level analysis, and be consistent, or your own numbers will disagree with each other.
- Save every query you run twice. The saved-query list becomes your reporting layer faster than you expect.
- Chart it if SQL fatigues you. Looker Studio pointed at your own dataset shows unlimited history, which the stock GSC connector never can.
Why the export looks broken, and what to check
- Dataset empty past 72 hours? The setup failed quietly. Recheck the pasted project ID, the service account roles, billing enablement, and that your GSC permission is Owner, then redo the Bulk data export screen.
- Numbers never quite match the UI? By design. Anonymized queries, provisional recent days and different aggregation levels each contribute small gaps. Alarm at large divergence, not at pennies.
- Costs creeping up? Almost always unfiltered queries over the URL table. Add date filters, query the site table where possible, and check nothing scheduled is scanning the full archive nightly.
- A gap in the dates? Check ExportLog for the missing days, and whether the window is still inside GSC's 16 months. If it is, an API pull patches it; if not, the gap is permanent, and it argues for the monthly verification you skipped.
Where this fits in the toolchain
- The export is the archive: raw, complete, permanent, and yours to query.
- CrawlRaven is the reading layer for decisions: the same Search Console data synced daily, joined to GA4 and a 200-point crawl, returned as a ranked plan with annotations on the timeline. The warehouse tells you what happened; the join tells you what to fix first, like which archive rows are really striking distance keywords worth a push this month.
- Free, on this site: the GSC regex generator builds the brand patterns your WHERE clauses will borrow for the branded split.
Enable it this week, run the three starter queries, put the verification on the calendar, and let it grow. The export is the rare SEO task you do once and benefit from for the life of the site.
Frequently asked questions
What is the Search Console bulk data export to BigQuery?
A daily feed Google added in February 2023 that writes your Search Console performance data into a BigQuery dataset you own. It carries more of the query long tail than the interface or API surface, includes a daily aggregate row for anonymized queries, and keeps accumulating for as long as the export stays on, which is what makes multi-year search analysis possible.
Does the BigQuery export include data from before I enabled it?
No. The export writes forward from the day you switch it on and never reaches backwards. The 16 months visible in Search Console today have to be captured separately with a one-time API pull if you want them, which is why the right order is backfill first, then enable the export.
How much does the Search Console BigQuery export cost?
The export itself is free; you pay Google Cloud's usage-based rates for BigQuery storage and queries. At small-site volumes both stay small, and BigQuery's free monthly allowances often cover them entirely. Set a billing alert on the project when you enable the export, so growth becomes a notification rather than a surprise invoice.
What tables does the export create?
Three. searchdata_site_impression holds property-level rows per day, query, country, device and search type. searchdata_url_impression adds the URL dimension, one row per page per query per day, and is where page-level analysis lives. ExportLog records each successful daily export, which makes it the table to check when you suspect the pipeline stopped.
Why is my average position wrong in BigQuery queries?
Almost certainly the zero-based position. The export's sum_position field counts the top ranking as 0, so average position is sum_position divided by impressions, plus 1. Skipping the plus one makes every ranking look one position better than Search Console reports, and it is the most common first-query mistake.
Why is my BigQuery dataset empty after enabling the export?
The first tables can take up to 48 hours to appear, so an empty dataset on day one is normal. Still empty after three days means the setup failed: recheck the project ID pasted into Search Console, confirm the service account was granted its BigQuery roles in the right project, and confirm you hold Owner permission on the property.
Do I need to know SQL to use the export?
For anything beyond charting, yes, at a basic level: the data arrives as tables, and questions are SELECT statements. The three starter queries in this guide cover totals, top queries and the anonymized share, and they are copy-paste editable. If SQL is a hard no, a connected reporting tool or Looker Studio on top of the dataset does the reading for you.
15+ years of growing SaaS websites through SEO | Author, 200-Point Audit Checklist
Aditi has spent 15+ years helping SaaS companies scale organic traffic through technical SEO and content strategy. She is the author of the CrawlRaven 200-Point Audit checklist used by agencies and in-house teams to systematically improve search performance.