Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →If your Search Console script reports fewer clicks or impressions than the Performance report chart, there are two separate causes. Some are bugs in your script: a low rowLimit, no startRow paging, mismatched filters or dimensions, or comparing fresh data with finalized data. Others sit inside Search Console: Google withholds anonymized queries and caps the rows it returns. Fixing your code solves only the first group. The second group cannot be recovered by any script.
The two kinds of undercounting
| Cause | Where it lives | Can you fix it? |
|---|---|---|
Default or low rowLimit, no paging |
Your script | Yes |
| Filters, dimensions, search type or date range differ from the report | Your script | Yes |
| Recent data still processing | Timing | Yes, by rechecking later |
| Anonymized queries withheld | Search Console | No |
| Row ceiling on API and exports | Search Console | Partly, via bulk export |
What Google says about row completeness
Google’s Search Analytics: query reference states that the API “is bounded by internal limitations of Search Console and does not guarantee to return all data rows but rather top ones.” The default is 1,000 rows per request, the maximum rowLimit is 25,000, and you page with startRow. Results are sorted by clicks descending, with arbitrary order among ties, and dates with no data are omitted.
As an Amazon Associate I earn from qualifying purchases.
Google’s 2022 Search Central post on filtering and limits adds that API exports have an upper limit of 50,000 rows per day per site per search type, though a given request may not reach it. It also says the Search Console interface exports at most 1,000 rows.
Anonymized queries: the part no script can recover
Google withholds query text for queries it treats as anonymized for privacy. Per the same 2022 post, that applies to queries searched by only a few dozen users over a two-to-three-month period. Those clicks and impressions can still count in the chart total, but they do not appear as query rows. Applying a query filter also excludes them.
#1 Best Overall
So summing every query row will not necessarily equal the unfiltered chart total, even with perfect code. Your script is not wrong, and it cannot “fix” this gap.
Diagnostic sequence
- Match the scope. Use the same property, search type (web, image, video, and so on) and date range as the report.
- Compare like with like. Compare the report’s unfiltered total with an API request that has no query dimension, not with a sum of query rows. For site-wide totals, use the aggregate.
- Inspect filters and dimensions. Any filter, and any query dimension, changes what is counted. Query and page breakdowns also put more load on the API, and page-plus-query combinations are especially heavy.
- Page properly. Set
rowLimitto 25,000 and increasestartRowby the number of rows returned until a request returns no rows. Don’t stop at the default 1,000. - Log every request:
rowLimit,startRow, returned row count, date range, dimensions, filters and data state. A silent truncation shows up as a round-number row count, such as exactly 1,000. - Treat recent days as provisional. The query API supports fresh and hourly data states. Google says recent rows can be incomplete while processing continues, and the response can include metadata on the first incomplete date or hour (see the API reference). Label those rows and re-pull after processing.
This sequence is guidance inferred from Google’s documented behavior, not the result of testing a specific script.
Rank #2
When the API ceiling is the problem
If a large site hits the daily row cap even with correct paging, Google’s bulk data export sends Search Console data to BigQuery on an ongoing basis and is not affected by the daily data row limit. It still excludes anonymized query text. Google says Search Console doesn’t charge for the export, but BigQuery storage and queries may cost money, so review its pricing; Google’s BigQuery efficiency tips cover keeping those costs down. Note that the export is ongoing, so it won’t backfill history from before you set it up. Check Google’s setup documentation for the details.
Also check Google’s usage limits for request quotas, which are a separate matter from row completeness.
Don’t use Search Console as a Google Analytics substitute
Google describes Search Console as the source of truth for Search performance and Google Analytics as the source for on-site behavior. Their click and session counts mean different things and shouldn’t be expected to match. See Google’s guidance on using both.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.The Bottom Line
<p>Fix paging, scope and timing first; those are yours to control. Then accept that anonymized queries and the row ceiling are Google’s limits, and use unfiltered aggregates for totals and BigQuery export for depth.</p>
Quick Recap
Best Value
Rank #4
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




