AI search report analyser
Google says that as of 31 August 2026 it has rolled the Generative AI performance report out to all websites, and the same page still lists “not all properties have access” among the reasons a property may not see it. As of 1 Oct 2026 it counts impressions only — how often a link to your site was shown in an AI Overview or AI Mode answer — with no clicks column, no queries and no search type of its own in the Search Console API. Drop the export here and get the trend, how concentrated the impressions are across your pages, and, with your regular Performance export, each page's share of its web impressions.
Your file never leaves your browser. It is read by JavaScript in this tab; there is no upload, and this page's security policy blocks fetch, XHR, WebSocket, EventSource and beacon calls and form posts.
The report, read carefully
Trend, without the artefacts
Weekly sums over whole Sunday-to-Saturday weeks, which is how Search Console groups them, the first against the last. The newest day is left out because Google says it can still change, and zeros that Google writes for “not available” are called what they are.
Where the impressions sit
How much of your AI-answer exposure is held by one page, five, ten — with a plain warning when the table is cut at Google's 1,000-row limit, because then those shares are overstated.
Share of web impressions
With your regular export beside it, AI impressions divided by web impressions for the same page. A page that shows more AI impressions than web ones is flagged, never printed as a share.
What to upload
1. The Generative AI report. In Search Console, choose your property and open the Generative AI
performance report — the “Open the Generative AI performance report” link on Google's help page (linked at the top) goes
straight to it. Google's page lists why a property may not see the report: not enough impressions in AI
features, an opt-out from them, and the fact that not all properties have access to the report yet, because Google is rolling it out over time. Choose a date range, then use the Export button. Google says that export carries both the chart and the table data, and that a value
shown as ~ or - in the report is a zero in the download. Upload the ZIP, or choose its CSV files
together. If the Dates tab offers a granularity, choose days: weekly and monthly files work, but with fewer checks, and an hourly table (Google offers hourly only in the 24-hour view) is not read.
2. Optional: the regular Performance export. Performance → Search results, the same date range, then Export → Download CSV and upload the ZIP. Clicks must be switched on. Search type: Web, and the same one in both exports: Google splits Web into Web: text-based and Web: multimodal in both reports and counts them separately, so two exports filtered to different ones do not make a share.
Google does not publish the exact column headers or file names of the Generative AI export, so this tool does not look for any. It reads a table by what its columns hold — a date column, a page column, an impressions column — ignores columns it does not recognise, and when a file lacks what it needs it tells you what it found instead. Menu names change as Search Console changes; if one has moved, Google's help page is the reference.
A file with a Clicks column is not the Generative AI report as of 1 Oct 2026: that report has none, and a CTR or Position column gives a regular Performance export away too. If you put one in the first box you get a refusal saying so, not AI figures that are really web ones.
What the report cannot tell you
- Impressions only. An AI impression is a link to your site shown in an AI Overview or AI Mode answer. It is not a click, a visit, a citation or a ranking. This report has no clicks column, so there is no click-through rate for AI impressions. That is how the report stands as of 1 Oct 2026: Google’s 3 Jun 2026 launch post lists impressions, pages, countries, devices and dates, and says it may add metrics over time, so check the report itself if this has changed. Google counts clicks from AI features in the regular Performance report’s Web figures, where they cannot be separated from other web clicks.
- 1,000 rows. Google applies the Performance report's 1,000-row table limit here too: a table can show at most 1,000 rows. A pages table with exactly 1,000 rows may have had its tail cut off, and the file cannot say whether it was; a table with more than 1,000 rows is not described as cut off at all.
- Zeros. Values Search Console shows as
~or-are zeros in the download, so a 0 means “zero or not available”. A table copied from the screen or from Data Studio (formerly Looker Studio) still has the~or-, which is not a number: this tool does not turn them into zeros, it skips those rows and lists them under “What the parser could not read”. - Pacific Time. Dates are Pacific Time in every view except the 24-hour view, which Search Console shows in your local time. A dates table can be days, weeks or months depending on the granularity chosen. An hourly table is not read: export with the Dates tab set to days.
- The newest data can be preliminary. The file does not record when it was exported, so the newest day is always treated as possibly still changing.
- Chart and table totals can differ. Google says this is usually because the chart is aggregated by property and the pages table by page. The table also shows at most 1,000 rows, so the two totals are not guaranteed to match, and a gap is not necessarily an error in your export.
- The start date. The report's data is reportedly available from 18 May 2026 with no backfill. That is what people using the report say; Google's help page gives no start date. It is used only to explain zeros before it.
- Pages are grouped by the final URL after redirects, mostly the canonical one, so a page can appear here under a different address than in your Performance export. Unmatched pages are listed, never guessed at.
- Sixteen months. Search Console shows up to 16 months of Performance data (Google's Search Central post of January 2018 introducing the new Search Console says “16 months of data”), and the Search Analytics API's search types (web, image, video, news, googleNews, discover) include no generative AI one: Google counts AI-feature traffic inside the Web figures, where it cannot be separated. An export is the way to get this report out, which is why the result offers a baseline CSV.
What happens to your file
Nothing leaves your browser. The file is read by JavaScript running in this tab and parsed in memory; it is not uploaded, there is no copy on a server, and nothing from it is written to a cookie or to local storage (the theme switch remembers light or dark and nothing else). The page loads no analytics and no third-party scripts.
You do not have to take our word for it. Open your browser's developer tools, choose the Network tab, run an analysis, and
watch it make no request. Two things back that up. This page carries a content security policy, readable in its source,
that blocks fetch, XHR, WebSocket, EventSource and beacon calls (connect-src 'none') and form posts
(form-action 'none'), and allows images only as inline data: URIs. A content security policy
does not cover every browser feature (WebRTC, for one), so the second check matters: the project's tests read this page's
own script and every module it imports, and fail on any of the browser's network APIs.
The site-wide script penlid.js, which every page loads, contains network calls for the signed-in app's
account switcher. This page never calls it, and a test checks that those calls sit only inside the switcher.
The two things that do leave this page's memory are the two you ask for: the baseline CSV you click to download, and the summary you click to copy.
Methods: the rules and thresholds
Each number below is a constant in public/assets/lib/ai-report.js (the read-size limit is in tool-ui.js). The project's tests compare the numbers quoted here with those constants; that is a check on the numbers, and not on every sentence. They are judgement calls, and they are the owner's to change.
- Reading the files
- A table is recognised by its columns, not its name. A dates table has a date column and impressions; a pages table has a page column and impressions. Two tables of the same kind are never added together: the one with more rows is read and the other is named. A choice of files totalling more than 64 MB is not opened. A row with a negative or fractional impressions value is not used, and is named. A row whose impressions cell is
~or-(what the screen shows; Google's download writes 0 there) is skipped and named, not read as 0, because a skipped row you are told about can be recovered and a made-up zero is a data point; an empty impressions cell is read as 0 and named in the notes. A date that appears more than once in the dates table had its rows added together, which doubles the day: it is named in the list at the top and left out of the weekly sums, the change and the 13–17 Aug check, though the total still counts it. A page address that appears more than once in the pages table is named in the list at the top, because its rows were added together and the share computed from it is wrong. A dates table whose dates carry a time of day (an hourly table, which Search Console offers only in its 24-hour view, in your local time) is refused with a sentence that says to export with the Dates tab set to days. - Which file is which
- A table with a Clicks column, or a CTR or Position column, is not the Generative AI report, which as of 1 Oct 2026 has none of them; it is refused in the first box.
- Weeks
- Sunday to Saturday, the way Search Console groups a weekly table, so these sums can be set beside its weekly view. A week is full only if all seven of its days are in the file. The newest day in the file is excluded as possibly preliminary, so a week it would have completed is not full. The change figure compares the first full week with the last, needs at least 2 full weeks, and is shown without a percentage when the first week is 0. When the smaller of the two weeks has under 100 impressions the percentage is flagged as mostly chance.
- Days reading 0
- Counted over the days after the report's reported start (18 May 2026) when every earlier day reads 0, and excluding the newest day. A day with no row at all is not a zero.
- 13–17 Aug 2026
- Google logged an under-count of AI impressions on those dates and says, in an update dated 21 Aug, that the missing data was restored. Each of the five days is compared with the same weekday in the 7 days before and the 7 days after (the median of the up to two matching days; the window itself excluded, the newest day excluded; at least 7 surrounding days are needed), so a weekend is compared with weekends. A day is only tested when that comparison figure is at least 60 impressions, and at least 3 of the five days must be testable. If every tested day is under 60% of its comparison figure the file is said to carry the dip; if none is, it looks restored; if some are, it is not called. The 60% line is set for counting noise only (Poisson counts): a site with more day-to-day variation than that will see “not called either way” more often, and a real dip is sometimes not called. A weekly or monthly file cannot be tested this way and says so.
- Concentration
- Shares of the pages table's impressions held by the top 1, 5 and 10 pages, from the rows present. A table of exactly 1,000 rows (Google's documented maximum) gets the warning that it may have been cut off and, if it was, that its shares are overstated; a table with more than 1,000 rows is not called cut off.
- Joining to the Performance export
- Addresses are compared after dropping the scheme, a leading
www.and a trailing slash, keeping the query string — the same normalisation the decay and did-it-work tools use. When one side has no host, a path is matched only if it matches exactly one page. Anything unmatched is listed. Share = AI impressions ÷ web impressions. Google says the report draws on the Web search type, so this is read as a share of the same impressions; that is an inference from Google's wording, not something it states. A page with more AI than web impressions is flagged and given no share, and when more than 20% of matched pages are flagged the page says the mismatch is probably in the date ranges, not stray rows, and no share is given, overall or for any page. When the two exports state different date ranges no share is given either, overall or for any page, and the baseline CSV says why on every page row. The web clicks and web CTR beside a share are the page’s regular Performance figures: Google counts clicks from AI features in them and the report cannot separate them out, so they are not AI clicks and not clicks without AI. - The highest-share list
- The top 10 pages by share, among pages with at least 100 web impressions and at least one AI impression, flagged rows excluded.
- Date ranges and filters
- Taken from each export's dates table, else from written-out dates in its Filters file; if the two exports differ, a warning goes at the top. A Search type other than Web on the Performance export, a different Web sub-type on the two (Web: text-based or Web: multimodal), or different page, query, country or device filters on the two, are warned about the same way. A dates table with days after today (Pacific Time) is warned about too.
- Weekly and monthly files
- Total, range, rows reading 0 and a change between the second and the second-to-last rows (the first row may not be a whole period and the last may be preliminary), which needs at least 4 rows. The change is flagged as mostly chance when the smaller of the two is under 100 impressions for a weekly table and under 400 for a monthly one. No day-level checks.
- The baseline CSV
- One header, then a row per week (or per row of a weekly or monthly table) and a row per page, each stamped with the dates it covers, or “unknown” when the upload did not say. A cell that would start with
=,+,-,@, a tab or a carriage return gets a leading apostrophe, so a spreadsheet does not run it as a formula. The file is plain UTF-8 with no byte-order mark, so it can be appended to next month’s and read by any tool; to open it in Excel with non-ASCII addresses intact, use Data > From Text/CSV and choose UTF-8.