Check a prompt

Search Console data warehouse: keep every day past 16 months

By GEO Search Console Published

This Search Console data warehouse keeps every day of your Google Search Console data on your own hosting, so nothing drops off when Google's 16 months run out. It is a small PHP app you upload once. A cron job pulls each day's clicks, impressions, CTR and position by query and page, by page, by country and device, and by search appearance, and a password-protected viewer lets you filter, compare and export all of it.

It is free, it needs no account with us, and your data never leaves your server. The download is below, followed by the setup steps, what the viewer does, how to get GSC data into Excel and Google Sheets, and how it compares with Google's own BigQuery export.

Why Search Console data needs a warehouse

Search Console data needs a warehouse because Google keeps only the last 16 months and shows you only part of each day.

The Performance report shows at most 1,000 rows in its tables and exports, so a site with thousands of queries sees the top of the list and nothing else.

The Search Console API goes much further: up to 50,000 rows per day for each search type, 25,000 at a time. But it still stops at 16 months. Anything you want to compare against later, like the month before AI Overviews reached your queries or the week a core update landed, has to be saved before Google lets it go.

A warehouse does that saving every day. Once a day is stored, it stays, and the comparisons that matter most, year over year and before and after an update, keep working long after the Performance report has forgotten them.

What is GSC data?

GSC data is what Google Search Console records about your site in Google Search: clicks, impressions, click-through rate (CTR) and average position, broken down by query, page, country, device, search appearance and date.

When people say "GSC data" they almost always mean these Performance report numbers, though Search Console also reports on indexing, Core Web Vitals and links (our Google Search Console FAQ covers the rest, from logging in to sharing access). The four numbers work like this:

  • Clicks count the times a searcher clicked through to your site from a Google result.
  • Impressions count the times a link to your site appeared in someone's results.
  • CTR is clicks divided by impressions.
  • Average position is where your site's highest link sat in the results on average, with 1 at the top.

Search Console keeps 16 months of it, counts each day in Pacific time, and reports Web, Image, Video and News searches separately, with Discover and Google News in reports of their own. Google's guide to the report's dimensions lists every grouping.

Download the Search Console data warehouse

Download the Search Console data warehouse below as one ZIP.

It holds the whole app, about 20 files of plain PHP, CSS and JavaScript that you can read before you upload anything.

5 MeasurePHP 8, any cPanel host

GSC Warehouse

Every day of Search Console data, kept on your server

Pulls each day's queries, pages, countries, devices and search appearance from the Search Console API by cron, keeps them past 16 months, and opens them in a password-protected viewer with regex filters, comparisons and CSV and JSON exports. Connect Claude to ask questions of it in plain English.

  • .htaccess
  • INSTALL.md
  • config.sample.php
  • cron.php
  • export.php
  • index.php
  • markers.json
  • mcp.php
  • setup.php
  • assets/ (2 files)
  • data/ (2 files)
  • lib/ (9 files)

gsc-warehouse.zip, 176 KB, version 1.2.0, needs PHP 8 and a cron job

Get a reminder before Google deletes your Search Console data

Get a reminder before Google deletes your Search Console data: one email on the 1st of each month names the month Google drops that month, so you can save it first.

Google takes one more day off the far end of your 16 months every day, and no tool can bring a deleted day back, the warehouse included, since its first runs save only what Google still has.

Google keeps the last 16 months of your Search Console data. Every day, the oldest day is gone.

Or add it to your calendar: Google CalendarApple Calendar or Outlook (.ics)

Each email says which month is going, how to keep it with the warehouse, how to check a warehouse you already run, and how to export that month by hand if you have no hosting. You confirm your address once, and every email has a link that stops it and deletes the address. The calendar links set the same reminder for the 1st of each month without an email.

GSC data the warehouse stores

The GSC data the warehouse stores comes in five parts for every Search Console property it can read, for every day.

Google returns these separately, so the warehouse keeps them apart too:

  • Daily totals. The property's clicks, impressions, CTR and average position for each day, the same numbers as the Performance report's chart.
  • Queries and pages. Every query and page pair Google returns for the day, up to the API's 50,000 rows.
  • Pages. Every page on its own, which counts the clicks from anonymized queries that the query rows leave out.
  • Countries and devices. Each country and device pair for the day.
  • Search appearance. Each search appearance the property had that day, such as translated results, review snippets and videos, and for each one its queries by country. Google counts these by page, so they can add up to more than the daily totals.

The first runs reach back as far as Google allows, 16 months, a few hundred days at a time. After that, each run fetches the newest days and fetches the last five again once a day, because Google keeps revising them for a few days. Discover and Google News get the page and country tables only, since Google gives no query data for them.

How to set up the Search Console data warehouse

To set up the Search Console data warehouse you need hosting that runs PHP 8 and allows cron jobs, which almost every cPanel host does.

It takes about 15 minutes:

  1. Unzip the download and upload the gsc-warehouse folder to your hosting, for example inside public_html.
  2. Copy config.sample.php to config.php and set a viewer password.
  3. Open setup.php in your browser. It checks the server, tests that the data folder is closed to the web, and walks you through the rest.
  4. Create a free service account in Google Cloud, turn on the Search Console API, and download the account's JSON key. The setup page lists each click.
  5. Add the service account's email as a Restricted user on each Search Console property you want kept.
  6. Add the cron job the setup page shows you, every 15 minutes.

A service account is a login for software, not a person. It reads your Search Console data through the API with read-only access, and you can remove it from a property at any time. Google Cloud's documentation explains how they work.

The viewer: filters, comparisons and Google updates

The viewer reads your stored data with regex filters, comparisons and Google updates marked on a daily chart, for any date range you have stored, including ranges older than 16 months.

  • Regex filters for queries and pages, to include and to exclude, the way you would in the keyword rank checker. Click any query to see its pages, or any page to see its queries.
  • Comparisons with the previous period or the same dates last year, shown on every row and as dashed lines on the chart.
  • Winners and losers. Sort by the change in clicks, impressions or position to put the biggest drops first, including queries that disappeared and now show as gone.
  • Striking distance. One click lists the queries sitting at positions 8 to 20, just off page one, sorted by impressions. Any position range works.
  • Cannibalization. A view of the queries where two or more of your pages compete, with each query's pages side by side.
  • Brand and non-brand. Write your brand names once as a pattern in the settings, and every view splits into brand and non-brand searches.
  • Search appearance. Pick translated results, review snippets, videos or any other appearance your site has, and see its queries, its countries, or both together: which query showed as a translated result in which country. One click opens translated results.
  • Google updates on the chart. Lines mark the AI Overviews launches, core updates, spam updates and the September 2025 change that cut impressions in most reports. Add your own lines for launches and site moves.

Exports: CSV and JSON

Exports come in CSV, which opens in Excel and Google Sheets, and JSON, for scripts and other tools.

Any view in the viewer exports in full, every row with its comparison columns, not just the rows on screen. The status page also exports everything stored for a property, table by table, search appearance included.

Once your history is in CSV, it drops straight into other tools. The AI performance report on this site, for example, reads Search Console's regular Performance export to show AI's share of your impressions, and our guide to the Bing AI Performance report covers the same kind of history on Bing's side.

GSC export and its 1,000-row limit

GSC export is the Export button at the top of the Performance report, and it hands you the data on screen as a Google Sheets file, an Excel file or a CSV, with a 1,000-row limit.

That cap is why larger sites outgrow it: a site with more queries or pages than that gets the top of each table and nothing below it, while the totals in the file still count everything, so the rows fall short of the totals.

The export takes the report as you set it, with its date range, search type and filters. Every table in the report comes out on its own sheet, or as its own CSV inside a ZIP: queries, pages, countries, devices, search appearance and dates. Google's export help has the details, and the next sections cover getting past the 1,000 rows.

GSC data to Excel

GSC data goes to Excel in one click for up to 1,000 rows: in the Performance report, choose Export, then Download Excel, and you get one .xlsx file with a sheet for each table.

For every row, export from the warehouse instead. Its CSV files hold the whole view, open in Excel with a double-click, and begin with the byte order mark Excel looks for, so accented and non-Latin queries, like the ones translated results bring in, show up as written instead of garbled. An Excel sheet holds 1,048,576 rows, far more than a typical view needs; for anything bigger, the JSON export suits a script better.

GSC data to Google Sheets

GSC data reaches Google Sheets two ways.

The quick one is Export, then Google Sheets, in the Performance report, which opens up to 1,000 rows as a new spreadsheet in your Google account. The full one is a CSV from the warehouse: in Sheets, choose File, then Import, then Upload, and every row of the view comes in.

A spreadsheet holds up to 10 million cells, so a view of a few hundred thousand rows fits with room to spare. Sheets add-ons that call the Search Console API can also fill a sheet past 1,000 rows, but they read only what Google still has, so they stop at the same 16 months the warehouse gets past.

How to export translated results in GSC

To export translated results in GSC, filter the Performance report to that search appearance, then export it.

Translated results are Google results shown in the searcher's own language when the page is written in another: Google translates the title and snippet, and a click opens a machine-translated copy of the page. Sites don't opt in, searchers in 21 languages see them, Hindi, Indonesian and Spanish among them, and a notranslate robots meta tag opts a page out.

The export takes about a minute:

  1. Open the Performance report for Search results and set the date range, up to the last 16 months.
  2. Add a filter, choose Search appearance, and pick Translated results. It only shows up if your site had translated-result impressions in that range.
  3. Click Export and pick Google Sheets, Excel or CSV.

The report keeps its 1,000-row cap, and it shows queries and countries in separate tables, so it can't tell you which query was translated for which country. The Search Console API can: group by query and country, filter searchAppearance to TRANSLATED_RESULT, and each row comes back with a query, a country and its clicks, impressions, CTR and position, up to 25,000 rows a request. In Google's bulk export, a field named is_translated_result marks the same rows. The warehouse makes those API calls for you every day: it keeps each search appearance's daily numbers and, for translated results and every other appearance your site has, its queries by country, past 16 months too. Its Translated results report shows which query was translated for which country, and its CSV export holds every row.

How to access more hidden GSC data

To access more hidden GSC data, look past the Performance report: Search Console holds back more than it shows, in four places.

  • Rows past 1,000. The report and its export stop at 1,000 rows. The API returns up to 50,000 rows a day for each search type, and the bulk export has no row cap at all, as Google's deep dive on performance data limits explains.
  • Days past 16 months. Google deletes each day once it is 16 months old, and only a copy saved before then keeps it.
  • Anonymized queries. Queries that very few people search are left out of the query rows to protect their privacy. Their clicks still count in the chart totals unless a query filter is on, and the bulk export includes their numbers in rows with no query text.
  • Combined views. The report shows one dimension per table, so it can't list a query's countries or a page's devices side by side. The API groups by several dimensions at once.

The warehouse covers the first two for you: it saves up to the API's 50,000 rows every day and keeps them past 16 months, and its pages table counts the clicks from anonymized queries that the query rows miss. It covers part of the fourth too: for each search appearance, it keeps the queries by country, a pairing the report can't show.

Ask Claude about your Search Console data

Ask Claude about your Search Console data by connecting the warehouse as an MCP server: an optional, read-only link you turn on with a private token in the settings.

Questions like "which queries lost the most clicks since the March core update?" or "what is in striking distance on the blog?" are then answered from your own stored history, older than 16 months included.

It works in Claude Code, in Claude on the web and desktop as a custom connector, and in other apps that speak MCP (Model Context Protocol). Claude gets six read-only tools: your properties, any report (search appearance included), striking distance, cannibalization, the biggest losers, and the impact of a Google update. The steps are in INSTALL.md inside the download.

GSC bulk export to BigQuery

GSC bulk export is Search Console's own daily export of your performance data to BigQuery, Google Cloud's data warehouse, and it has no row cap.

Setting it up takes four steps, all in Google's bulk export guide:

  1. In Google Cloud, use a project with billing on, and turn on the BigQuery API and the BigQuery Storage API.
  2. In IAM, add search-console-data-export@system.gserviceaccount.com with two roles: BigQuery Job User and BigQuery Data Editor.
  3. In Search Console, open Settings, then Bulk data export, and enter the project ID, a dataset name that starts with "searchconsole", and a location. The location is hard to change later.
  4. Wait up to 48 hours for the first export, which starts with that day's data.

BigQuery bills storage and queries past its free tier, and the tables grow every day for as long as the export runs. Nothing from before the setup day is filled in, which is the main thing the warehouse does differently.

Search Console data warehouse vs BigQuery bulk export

The Search Console data warehouse and Google's BigQuery bulk export both keep data past 16 months, and the biggest difference is the start: Google's bulk export begins on the day you set it up and doesn't fill in earlier days, while the warehouse reaches back the full 16 months on its first runs.

Search Console data warehouseBigQuery bulk export
Past dataThe last 16 months, on the first runsNone: it starts on the day you turn it on
Where data livesYour own hostingYour Google Cloud project
CostFree on hosting you already pay forBigQuery storage and query charges past Google's free tier
Reading itThe built-in viewer, CSV and JSONSQL, or a dashboard tool connected to BigQuery
Anonymized queriesLeft out of the query rows; counted in daily totals and pagesIncluded as rows with no query text
Search appearanceEach appearance's daily numbers, with its queries by countryA true or false field for each appearance on the page rows

They work well together. Start the warehouse today to save your 16 months, and if your team already works in BigQuery, turn on the bulk export as well.

What the warehouse can't do

What the warehouse can't do is recover days Google has already dropped: it saves from 16 months ago forward, so the sooner it runs, the more history you keep.

  • Query rows leave out the searches Google anonymizes, so they add up to less than the daily totals. The totals and the page table count everything.
  • Queries can't be split by country or device, because Google returns those as a separate table.
  • Search appearance, such as translated results, is kept with its queries and countries but not its pages or devices, because Google returns each appearance as another separate cut.
  • It needs PHP hosting with cron. A computer that is off at night or a static-only host won't run it.

Search Console data warehouse FAQ

This Search Console data warehouse FAQ covers cost, privacy, hosting, size and the monthly reminder.

Is the Search Console data warehouse free?

Yes, the Search Console data warehouse is free to download and run, with no sign-up and no API charges. Google doesn't charge for the Search Console API, and the warehouse runs on hosting you already have.

Is my Search Console data sent to you?

No, your Search Console data stays on your server and nothing is sent to us. The app talks to Google, with the service account you create, and to Claude only if you connect it yourself. The viewer is locked with your own password.

Does the warehouse work on shared hosting?

Yes, the warehouse works on ordinary shared hosting: it was built and tested on a cPanel host. Each cron run stops after four minutes and the next run carries on, so it stays inside the time limits shared hosts set.

How big does the database get?

How big the database gets depends on how many queries your site has. A site with a few thousand queries a day stays under a few hundred megabytes for its first 16 months; a site that fills the API's 50,000 rows every day grows by a few gigabytes a year, and can use MySQL instead of the default SQLite.

Can I keep several sites or client sites?

Yes, you can keep several sites, client sites included, in one install: it keeps every Search Console property the service account can read, and the viewer switches between them. Add the service account as a user on each property, and it starts fetching on the next run.

Can I get a reminder before Google deletes my Search Console data?

Yes, you can get a reminder before Google deletes your Search Console data: sign up in the reminder box, and one email arrives on the 1st of each month naming the month that is going and how to keep it. If you'd rather not give an email, the calendar links there add the same reminder to Google Calendar, Apple Calendar or Outlook.

Free tools for this guide

  • 2 Search On our server

    Rank Report

    Where you rank for every variation

    Open the keyword rank checker

  • 5 Measure In your browser

    AI Performance

    Google's and Bing's AI reports together

    Open the AI performance report

References

  1. Getting all your data, Search Console API documentation. developers.google.com/webmaster-tools/v1/how-tos/all-your-data
  2. Start a new bulk data export, Search Console Help. support.google.com/webmasters/answer/12917675
  3. Service accounts overview, Google Cloud documentation. cloud.google.com/iam/docs/service-account-overview
  4. Search Analytics: query, Search Console API reference. developers.google.com/webmaster-tools/v1/searchanalytics/query
  5. Performance report (Search results): Dimensions and data groupings, Search Console Help. support.google.com/webmasters/answer/17011259
  6. Export data directly from a Search Console report, Search Console Help. support.google.com/webmasters/answer/12919797
  7. Translated results in Google Search, Google Search Central. developers.google.com/search/docs/appearance/translated-results
  8. A deep dive into Search Console performance data filtering and limits, Google Search Central Blog. developers.google.com/search/blog/2022/10/performance-data-deep-dive