---
title: "GSC Reporting Gaps: An Internal Analysis of 72 Sites"
description: "First-party analysis of 72 gscdump sites. The reported mean per-site click-attribution gap was 51.3%; raw aggregates and a reproducing script are not published."
canonical_url: "https://gscdump.com/learn-google-search-console/research/gsc-data-loss-study"
last_updated: "2026-07-20"
---

Google Search Console does not show every data row. [Report exports are truncated to 1,000 representative rows](https://support.google.com/webmasters/answer/12919797), Search Analytics returns only top rows and [omits anonymized queries](https://support.google.com/webmasters/answer/17011259), and performance data is queryable for a [rolling 16 months](https://developers.google.com/search/docs/monitor-debug/debugging-search-traffic-drops).

To measure part of that gap, we analyzed anonymized aggregates from 72 sites synced through the GSC API. We compared page-level totals, query-level rows, and the UI's 1,000-row export cap across four site-size groups.

> **Read before using the figures:** These internal results have not been independently reproduced. The aggregate output and analysis code are unpublished, and the recorded date range conflicts with the stated 28-day window. Treat the findings as a description of this sample.

## Key Findings

<study-stat-block description="The mean per-site gap was 51.3%, so query rows accounted for 48.7% on the average site. This is not a click-weighted share of all traffic in the sample, and the clicks can still appear in page or property totals." label="mean per-site click-attribution gap" source="gscdump internal analysis (n=72); not independently reproduced" stat="51.3%">



</study-stat-block>

<study-stat-block description="The two sites with 10,000+ pages averaged 13,892 API-reported queries. A 1,000-row export can expose at most 7.2% of that average count." label="row-cap exposure for the enterprise group" source="gscdump internal analysis (n=72); enterprise n=2" stat="92.8%">



</study-stat-block>

<study-stat-block description="For the two sites with 10,000+ pages, query-level rows accounted for 39.3% of page-level impressions. Treat this n=2 result as descriptive, not a population benchmark." label="impression-attribution gap for the enterprise group" source="gscdump internal analysis (n=72); enterprise n=2" stat="60.7%">



</study-stat-block>

<study-stat-block description="The mean per-site share of reported queries with 5 or fewer impressions was 65.2% in the measurement window. The study cannot observe or count queries that Google omitted." label="of reported queries had 5 or fewer impressions" source="gscdump internal analysis (n=72); not independently reproduced" stat="65.2%">



</study-stat-block>

## The Iceberg

What you see in a GSC report table is the tip of a data iceberg. The API can return more rows than a report export, but Google does not guarantee that the API returns every row.

<study-iceberg :apiRows="50000" :hiddenPct="51" :uiRows="1000">



</study-iceberg>

The three figures in this illustration have different denominators: a per-export UI cap, a per-day API ceiling, and the study's mean per-site click-attribution gap. They should not be added together or read as successive slices of one dataset.

Three separate limits shape the available data:

1. **Row-cap exposure:** The UI truncates report exports to 1,000 representative rows. The [API allows up to 25,000 rows per request](https://developers.google.com/webmaster-tools/v1/searchanalytics/query) and pagination with `startRow`; for each property, Google separately documents a [limit of 50,000 rows per day and search type](https://developers.google.com/webmaster-tools/v1/how-tos/all-your-data).
2. **Query-attribution gap:** Google [omits anonymized queries and stores only top data rows](https://support.google.com/webmasters/answer/17011259). Those rows are excluded when data is grouped by query, but anonymized queries can still contribute to unfiltered chart totals. Page- and query-level aggregation can therefore produce different totals.
3. **Retention loss:** Search Console exposes a rolling 16 months of performance data. Once a date leaves that window, it cannot be backfilled through Search Console or Search Analytics, so any unexported baseline becomes unavailable. [Google recommends the API or bulk export](https://developers.google.com/search/docs/monitor-debug/debugging-search-traffic-drops) when you need to retain a longer history.

## Methodology

### Data Collection

We queried anonymized aggregate statistics from 72 sites synced through the GSC Search Analytics API. The original notes record March 4, 2026 as the collection date. The stored tables covered pages, queries, countries, and devices, subject to Google's privacy filtering and top-row limits.

There is an unresolved problem with the dates. The published notes call February 1–March 1, 2026 a 28-day window. Search Analytics [includes both the start and end date](https://developers.google.com/webmaster-tools/v1/searchanalytics/query), which makes that range 29 days. The underlying request and aggregate artifact are missing, so we cannot tell whether an endpoint or the duration label is wrong.

The recorded end date was three days before collection. Google says finalized data is [typically available after two to three days](https://developers.google.com/webmaster-tools/v1/how-tos/all-your-data), but the missing request and response metadata also prevent us from confirming that every date in the study used finalized data.

### Metrics Measured

For the reported measurement window, we computed per-site:

- **Query count**: Total unique query rows returned by the API (compared with the UI's 1,000-row export cap)
- **Page count**: Total unique pages with search data
- **Unattributed click %**: `1 - (sum of query-row clicks / sum of page-row clicks)`
- **Unattributed impression %**: `1 - (sum of query-row impressions / sum of page-row impressions)`
- **Low-volume query %**: Reported queries with ≤5 impressions in the measurement window as a percentage of all reported queries

The reported overall and category percentages are presented as unweighted means of the per-site percentages, not as traffic-weighted ratios. The published category click-gap values reproduce the 51.3% overall result when weighted by site count, subject to rounding.

The 16-month retention section uses Google's documented product limit; it is not an empirical result from the site sample.

### Site Classification

Sites were classified by unique page count in the measurement period:

<table>
<thead>
  <tr>
    <th>
      Category
    </th>
    
    <th>
      Page Count
    </th>
    
    <th>
      Sites in Sample
    </th>
    
    <th>
      Avg Reported Queries
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      Small
    </td>
    
    <td>
      <100 pages
    </td>
    
    <td>
      51
    </td>
    
    <td>
      504
    </td>
  </tr>
  
  <tr>
    <td>
      Medium
    </td>
    
    <td>
      100–1,000
    </td>
    
    <td>
      16
    </td>
    
    <td>
      3,370
    </td>
  </tr>
  
  <tr>
    <td>
      Large
    </td>
    
    <td>
      1,000–10,000
    </td>
    
    <td>
      3
    </td>
    
    <td>
      6,280
    </td>
  </tr>
  
  <tr>
    <td>
      Enterprise
    </td>
    
    <td>
      10,000+
    </td>
    
    <td>
      2
    </td>
    
    <td>
      13,892
    </td>
  </tr>
</tbody>
</table>

### Limitations

- **Sample size**: The 72 sites support a description of this sample. They are too few to establish an industry benchmark, and the dataset skews toward actively managed sites using gscdump.
- **Reproducibility**: The figures are first-party internal results. This repository does not include the raw site data, public aggregate output, or an analysis script that reproduces the n=72 calculations, so readers cannot independently verify the reported values from the published materials.
- **Window inconsistency**: The published February 1–March 1 endpoints form a 29-day inclusive range, not the stated 28 days. The missing query artifact prevents us from resolving whether an endpoint or the duration label is wrong.
- **Finalization status**: The recorded collection date was March 4 and the range ended March 1. That is within Google's typical two- to three-day finalization lag, but the missing request metadata prevents confirmation that all rows were final.
- **Weighting**: The headline 51.3% is a mean of site-level percentages, so a small site and a high-traffic site receive equal weight. Do not read it as 51.3% of all pooled clicks in the sample.
- **Category distribution**: Small sites account for 51 of the 72 sites. The large group has three sites and the enterprise group has two; those numbers describe the sample and should not be generalized.
- **API ceiling**: For each property, Google documents a [maximum of 50,000 rows per day and search type](https://developers.google.com/webmaster-tools/v1/how-tos/all-your-data), sorted by clicks. The API does not guarantee every detailed row.
- **Privacy and truncation**: We measure the gap between query-level and page-level aggregates. This design cannot separate anonymized queries from other top-row truncation, and it cannot observe interactions that Google excludes from both aggregates.
- **Aggregation**: Google [counts page- and property-aggregated data differently](https://support.google.com/webmasters/answer/17011364), independently of query anonymization. The gap should not be interpreted as a direct measurement of one filtering mechanism.
- **Point-in-time**: These measurements reflect a single reported snapshot. Seasonal variation, algorithm updates, and site changes affect results.

## Finding 1: The Row Limit Problem

The GSC UI exports [at most 1,000 representative rows per report](https://support.google.com/webmasters/answer/12919797). When the API returns more than 1,000 distinct query rows, the export cannot contain all of them.

<study-bar-chart :colors="["#06b6d4","#f97316"]" :data="[{"category":"Small","visible":504,"hidden":0},{"category":"Medium","visible":1000,"hidden":2370},{"category":"Large","visible":1000,"hidden":5280},{"category":"Enterprise","visible":1000,"hidden":12892}]" :labels="["Group-average rows within cap","Group-average rows above cap"]" title="Reported Queries vs UI 1,000-Row Cap" xLabel="Site Size" yLabel="Query Rows">



</study-bar-chart>

For the small-site group (<100 pages), the average API-reported query count was 504, below the cap. Using each group's average query count as the denominator, the maximum row-cap exposure was:

- **Medium group**: 1,000 of 3,370 rows visible at most (70.3% row-cap exposure)
- **Large group**: 1,000 of 6,280 rows visible at most (84.1% exposure)
- **Enterprise group**: 1,000 of 13,892 rows visible at most (92.8% exposure)

This arithmetic measures export-cap exposure only; privacy filtering is outside its scope. Because it uses category averages, it also says nothing about the distribution within each group. The enterprise figure comes from two sites and the large figure from three.

## Finding 2: The Query-Attribution Gap for Clicks

When page-level clicks exceed the sum of clicks in query rows, some clicks cannot be attributed to a reported query. Anonymized queries contribute to this difference, but Google's top-row truncation and aggregation rules mean this method cannot assign the entire gap to privacy filtering. [Patrick Stox's Ahrefs study](https://ahrefs.com/blog/gsc-hidden-terms-study/) reported a 46.08% gap after comparing total clicks with the sum of keyword clicks across 146,741 sites. Its much larger sample and click-level aggregation differ from our unweighted mean of site-level gaps.

Our reported **51.3%** mean is higher, but the methodological differences prevent a like-for-like trend comparison. The category means in this sample formed a U-shaped pattern:

<study-bar-chart :colors="["#06b6d4","#ef4444"]" :data="[{"category":"Small","visible":42,"hidden":58},{"category":"Medium","visible":64.6,"hidden":35.4},{"category":"Large","visible":83.1,"hidden":16.9},{"category":"Enterprise","visible":42.6,"hidden":57.4}]" :labels="["Attributed to Queries","Not Attributed to Query Rows"]" title="Clicks Not Attributed to Query Rows by Site Size" xLabel="Site Size" yLabel="% of Clicks">



</study-bar-chart>

The gap did not rise consistently with site size in this sample:

- **Small group**: 58% unattributed across 51 sites
- **Medium group**: 35.4% unattributed across 16 sites
- **Large group**: 16.9% unattributed across three sites
- **Enterprise group**: 57.4% unattributed across two sites

Traffic volume and query diversity might help explain the pattern, but we did not test either mechanism. All we can show here is that reported query rows accounted for fewer clicks than page rows, even among the small sites.

## Finding 3: The Query-Attribution Gap for Impressions

The impression comparison showed a similar descriptive pattern. Query-row impression totals were lower than page-row totals, with the largest group averages at the two ends of the size classification. Our category averages were:

<study-bar-chart :colors="["#06b6d4","#ef4444"]" :data="[{"category":"Small","visible":47.7,"hidden":52.3},{"category":"Medium","visible":63.4,"hidden":36.6},{"category":"Large","visible":73.8,"hidden":26.2},{"category":"Enterprise","visible":39.3,"hidden":60.7}]" :labels="["Attributed to Queries","Not Attributed to Query Rows"]" title="Impression Attribution: Query-Level vs Page-Level" xLabel="Site Size" yLabel="% of Impressions">



</study-bar-chart>

The two enterprise sites had a 60.7% gap, while the 51 small sites averaged 52.3%. The medium and large groups had smaller gaps, at 36.6% and 26.2% respectively.

If you use the sum of reported query rows as the property's impression total, you will undercount the page-level total in this sample. With three large sites and two enterprise sites, the data cannot show how the gap behaves across the wider population.

## Finding 4: Low-Volume Queries in the Reported Data

Google says it [omits some queries to protect user privacy](https://support.google.com/webmasters/answer/17011259), but it does not publish an impression threshold at which a query is hidden. Because omitted queries cannot be observed, this study cannot measure what percentage of low-volume queries Google filtered.

Among reported rows, the mean per-site share of queries with five or fewer impressions was **65.2%**. The two enterprise sites averaged **79.8%**.

The group averages ranged from 63% to 80%. The large and enterprise groups contain only three and two sites, so the apparent relationship with site size should not be generalized.

Those low-volume rows need some care:

- A large share of the reported query set can have very little evidence behind it
- Percentage changes on rows with one to five impressions are unstable
- A 1,000-row export can omit many API-reported rows when a site has a large query set

The study cannot identify which low-volume rows appear in a particular UI export or reveal the queries Google omitted from the API.

## Documented Constraint: The Retention Cliff

Search Console exposes performance data through a [rolling 16-month window](https://developers.google.com/search/docs/monitor-debug/debugging-search-traffic-drops). Once an individual date ages out, it is no longer available through the performance interface or Search Analytics API. Google's documentation says when the data is available; it does not describe Google's internal deletion process.

<study-line-chart :data="[{"month":1,"completeness":100},{"month":3,"completeness":100},{"month":6,"completeness":100},{"month":9,"completeness":100},{"month":12,"completeness":100},{"month":15,"completeness":100},{"month":16,"completeness":100},{"month":17,"completeness":0}]" title="Availability of an Individual Date in Search Console" xLabel="Months" yLabel="Data Available (%)">



</study-line-chart>

For an individual date, the documented availability ends at a cutoff. The chart is conceptual because the exact day depends on the rolling window and calendar boundaries.

The rolling window still permits year-over-year comparisons for recent periods. It does not retain a permanent multi-year baseline: by July 20, 2026, for example, dates from early March 2025 have begun to fall outside an approximate 16-month window.

For seasonal businesses, this prevents comparisons across several years unless the data was exported. Black Friday 2024 data is available for Black Friday 2025 planning, but it will be outside the rolling window before planning for Black Friday 2026.

## Observed Data Gaps by Site Size

This table combines the study's category averages for API-reported query count, row-cap exposure, page-to-query attribution gaps, and low-volume query share. The n=3 large and n=2 enterprise rows describe this sample and should not be used as general benchmarks.

<study-benchmarks :data="[{"category":"Small (<100 pages)","keywords":"504","uiLoss":"0%","hiddenClicks":"58%","hiddenImpressions":"52%","longtail":"63%"},{"category":"Medium (100-1K)","keywords":"3,370","uiLoss":"70%","hiddenClicks":"35%","hiddenImpressions":"37%","longtail":"69%"},{"category":"Large (1K-10K)","keywords":"6,280","uiLoss":"84%","hiddenClicks":"17%","hiddenImpressions":"26%","longtail":"70%"},{"category":"Enterprise (10K+)","keywords":"13,892","uiLoss":"93%","hiddenClicks":"57%","hiddenImpressions":"61%","longtail":"80%"}]">



</study-benchmarks>

**Example**: The medium group averaged 3,370 API-reported queries. A 1,000-row export can expose at most about 30% of that average count, which gives 70% row-cap exposure. The group's mean per-site click and impression gaps were 35% and 37%. Sample: 72 sites (51 small, 16 medium, 3 large, 2 enterprise).

## Implications for SEO Workflows

### Content Strategy

The API reported more query rows than a 1,000-row export can contain for the medium, large, and enterprise group averages. In the API-reported data, 65.2% of query rows had five or fewer impressions. This study did not compare the identity of API rows with each site's exported UI rows, so it cannot say which low-volume queries the UI omitted.

### Reporting & ROI

Reports that sum query rows undercount page-level clicks in this sample: the mean per-site gap was 51.3%. That headline is a mean of per-site gaps and cannot be applied to pooled traffic. Unfiltered chart and page totals can include clicks from anonymized queries, so use those totals for overall performance and query rows for attribution.

### Technical SEO Audits

Cannibalization analysis, query-opportunity detection, and content-decay monitoring depend on query rows. In the small-site group, query rows accounted for 47.7% of page-level impressions. Any audit should disclose that attribution gap and identify the query table as an incomplete property total.

### Year-Over-Year Analysis

The 16-month window supports recent year-over-year comparisons, but it cannot provide a multi-year baseline. Workflows that compare several seasons or older events require data exported before those dates age out.

## What gscdump Can Preserve

For Pro accounts, gscdump's initial hosted sync targets up to 180 days of rows returned by the GSC API and stores them in Cloudflare R2 Parquet. Daily analytics syncs then keep that stored range current:

- **More rows than a UI export:** sync jobs page through API responses, subject to Google's own limits
- **Retention outside GSC's rolling window:** previously synced rows remain queryable while retained by the account
- **Scheduled sync:** recent dates are re-synced while Google's data is still changing
- **API and MCP access:** programmatic access to the site's stored date range

gscdump can preserve synced rows beyond Google's rolling window and bypasses the UI's 1,000-row export cap. It cannot recover data Google withheld or fill a date that never synced successfully.

## License & Citation

The text and original chart presentation on this page are offered under the [Creative Commons Attribution 4.0 International license](https://creativecommons.org/licenses/by/4.0/). You may share or adapt them with attribution. When reusing a reported figure, cite this page so readers can assess the study's scope and limitations.

**Cite as**: gscdump. "GSC Reporting Gaps: An Internal Analysis of 72 Sites." Published March 4, 2026; updated July 20, 2026. [https://gscdump.com/learn-google-search-console/research/gsc-data-loss-study](https://gscdump.com/learn-google-search-console/research/gsc-data-loss-study)

If you use a statistic or chart, please link back to this page.

## Related Reading

- [16-Month Data Retention](/learn-google-search-console/limits/16-month-data-retention): Details on the retention limit
- [1,000 Row Limit](/learn-google-search-console/limits/1000-row-limit): How to get past the UI export cap
- [Export Row Limits](/learn-google-search-console/limits/export-row-limits): API row limits explained
- [GSC API Guide](/learn-google-search-console/api): Set up programmatic access
