Skip to content
Get started

Pivot analytics

Build the table yourself. It says what it covers

Every month it is the same job: export Search Console, paste it into a sheet, build the pivot, watch it break, rebuild it. And the export you started from only ever held a slice of the rows. This is that pivot already built, running over the history stored for your site. Above the table it prints how much of your traffic the numbers underneath actually account for.

The question it answers·“I need these numbers cut a completely different way.”
Where you'll find it·Analytics
Read-only access Free plan, no card
The pivot table under its heading line, which states how much of the site's clicks and impressions the detailed data underneath accounts for.

How it works

1

Drag eight dimensions and five metrics into four zones

The left rail lists everything you can pivot on: Date, Brand status, Query intent, Section, Country, Device, Query and Page, plus every custom grouping you have made for this project, which turns up as a dimension of its own. The metrics are Clicks, Impressions (summed per page, so a query that two of your pages answer counts on both), Distinct queries, CTR and average position (weighted by impressions, so 1 is the top of the results).

Drag a chip into Filters, Columns, Rows or Values, or put keyboard focus on it and press Enter, which sends a metric to Values and a dimension to Rows, or to Columns once Rows is full; the Filters zone is reachable by dragging. Drop a metric on a zone that takes dimensions and it refuses with a short note, This zone takes dimensions, rather than building something meaningless. Every zone card carries its own used-of-maximum counter, so you can see what is left before you run out.

Fields rail:drag a chip to a zone, or focus it and press Enter (a metric goes to Values, a dimension to Rows, then to Columns once Rows is full)
Rows, Columns, Values, Filters:four cards, each showing how many of its maximum are in use, each with a clear link
Granularity:a Date chip buckets by year, quarter, month, week or day
Filter member:each chip in Filters carries a dropdown, All or one member
Move up / Move down:reorder a chip inside its zone without dragging
Hide setup:collapse the builder once the layout is right
Reset:puts this view back to the layout it started with
The pivot builder: dimensions and metrics dropped into rows, columns, values and filters.
2

Subtotals computed in the database, not added up

Every level of the table is a real aggregate. The grouping is done in the database with GROUP BY ROLLUP, so a parent row is computed over its own rows instead of being summed from the children displayed beneath it. That matters most for the two figures that cannot be added at all: CTR is recomputed as clicks divided by impressions at every level, and average position is weighted by impressions at every level, subtotals included.

Where a rate has no impressions to divide by, the cell shows a dash rather than a zero. Column headers nest up to two deep, with a bold Total group beside them whenever a Column dimension is set; row headers nest up to three deep, each level with its own expander. Sorting is honoured at every one of those levels, not just the deepest. A middle level left on the default order is how a sorted-looking table quietly lies.

Sort:click any metric column header to sort by it at every row level, not just the deepest
Expand all / Collapse all:one button that folds or unfolds every row group at once, and renames itself to say which it will do
Detailed total:the sticky bottom row, named for what it actually totals, with a tooltip saying so

The Aug 2026 subtotal under Top sellers

Row Clicks Impressions CTR Position
Aug 2026 23143.3k0.53%28.1
Non-brand 22243.2k0.51%28.1
Brand 91267.14%10.8
If the two rows were averaged 3.83%19.45
Copied from the pivot pictured on this page. The parent row is computed over its own rows: CTR is 231 clicks divided by 43.3k impressions, and position is weighted by impressions, so 43.2k impressions at 28.1 outweigh 126 at 10.8. Averaging the two rows instead prints 3.83% and 19.45, a CTR none of the three rows has.
A pivot table with dimensions down the side and time across the top, expandable level by level, with subtotals recomputed at each level rather than added up.
3

Read the same table four ways, then open a query or page

A four-way switch restates clicks and impressions as absolute numbers, a share of the row, a share of the column, or a share of the grand total, without rebuilding anything. CTR and position are already rates and stay as they are. Each metric's leaf cells are heat-shaded on their own colour scale, on by default and switchable off; subtotal rows stay plain, so a shaded cell always means one real combination rather than a group.

Δ PoP prints the change against the previous date bucket beside each figure; it engages only when Date is the first Row dimension, it compares in date order rather than against whatever your sort happened to put above, and it prints nothing at all when the previous bucket was zero. Clicking a Query or Page row at the deepest row level opens a detail panel: its five figures, each measured against the equal window before it where one exists, then a chart drawing both periods on one timeline, and the groups that object belongs to.

Absolute / % row / % col / % total:clicks and impressions as counts or as shares
Heatmap:per-metric colour scales over the leaf cells, on by default
Highlight:three fixed rules, applied to leaf cells, with a count badge on the button when any are on
Δ PoP:change against the previous date bucket, needs Date as the first Row dimension
Table / Chart:the same layout as a grid or as lines and bars
4

Save the pivots you keep rebuilding, and export them

Each saved pivot is its own page in the sidebar, with its own name and layout. Rename, duplicate, reorder or delete them, with no limit on a paid project and 1 on a free one. A layout you build is kept in your browser and mirrored to the server as you edit it, so it survives a cleared browser and follows you to a second device. CSV re-runs the pivot and writes the table you are looking at: every nesting level flattened, every column group and the Total group included.

The file opens with comment lines naming your selected range, the window detailed data actually exists for and the sampling percentages. And when rows were capped, a line immediately above the Detailed total row says how many are missing from the file, so a truncated export cannot be read as the complete dataset.

+ New page:start another saved pivot; no limit on a paid project, 1 on a free one
⋮:rename, duplicate or delete a page
Drag the grip:reorder the list
CSV:exports the current table with those disclosures written into the file
The saved pivot pages in the sidebar, each with its own name, a grip to reorder it and a menu to rename, duplicate or delete it, with New page under the list.

Which window, and which half of Google's data

From Google's complete totals

Window
The detailed window inside the range you pick
On screen
What the share line above the table divides by
What the amber banner's "at least" share divides by

From Google's detailed sample

Window
The detailed window inside the range you pick
On screen
Every row of the pivot table
The Detailed total row
What both shares count

Whatever range you pick (7 days, 28 days, 3, 6 or 16 months, all history, a named week, month or quarter, or a custom span), each rolling preset is clamped to the first day actually stored, so a window can never claim days that do not exist. On a free project, which stores 14 days, the picker offers only the last 7 days and everything kept, with the real dates on the button; a paid archive keeps a rolling 24 months, about eight more than Search Console itself serves.

The rows come from Google's detailed query × page data, not from the complete per-day property totals the Dashboard uses: Google publishes that breakdown for only part of your traffic and anonymizes the rest, so the two do not match and this screen never pretends they do. Above the table a live line reads "· detailed data covers ~N% of clicks / ~M% of impressions", measured against the detailed window inside your range rather than the whole range, because dividing a 90-day numerator by a 6-month denominator published a sampling rate that was mostly just missing days; when the two differ the line names the window it used.

The bottom row is labelled "Detailed total", not "Total", with the tooltip "Total over Google's query + page level data, a subset of your clicks. The Dashboard shows complete property totals." The amber banner above the table words its own impressions share "at least" on purpose: our stored rows carry a count per page while Google counts a search-results impression once per query, so those rows are de-duplicated before that comparison, which makes that figure a floor rather than an estimate.

When the screen cannot answer honestly it withholds rather than guesses. Pick a range that starts before detailed data begins and a banner names the first day the detailed data covers, then says "Your selected range starts earlier, so every figure below reflects only the covered part." A rate with no impressions behind it renders as a dash rather than 0, a missing point breaks the chart line rather than being drawn as zero, and a pivot that would run past its 25-second database budget comes back as "This pivot is too large to build", naming the two things you can change: narrow the date range, or group by something with fewer members.

The thresholds, stated

Zone caps are 3 Row dimensions, 2 Column dimensions, 5 metrics and 6 filters. The two dimension caps are re-enforced on the server, where the request parser slices rows to 3 and columns to 2 before the query is built, so the pivot itself can never be asked for a deeper nesting than the builder allows.
300 members per row level, and the 300 that survive are chosen by clicks before your sort is applied, so ordering by average position cannot bury your busiest rows behind 300 one-impression queries.
Filter dropdowns list the 1,000 members with the most clicks and label the cut in amber: "top 1,000 of" the true member count, with the note "Use a Row or Column dimension to reach the rest."
Highlight thresholds are fixed at three: striking distance is position 5-15, winning is position 3 or better, low CTR is under 2%. Δ PoP prints nothing for a move under 0.05%, or under 0.05 places for position. The pivot endpoint itself is capped at 60 requests a minute, tighter than the rest of the app, because it is the heaviest query in it.

Exactly what you are looking at

  • It is a sample, and it is labelled as one. Google withholds the query and page breakdown for low-volume traffic, so the counts and rates here describe the covered part of your site rather than all of it. That is why Distinct queries reads lower here than on the Queries page. Complete property totals live on the Dashboard.
  • The on-screen coverage percentage is stated only where it can be measured honestly. Set a filter and it gives way to a description of the rows, "· Google's query + page data (a subset of total clicks)", because a filtered numerator over an unfiltered property total is the wrong sum. The CSV preamble applies the same rule: with a filter active the file prints the reason in place of a figure, and with no filter it writes the share in.
  • The screen names the cut under the table ("Showing top 300 · N more rows not shown. Refine with filters") and again inside it ("N more under Non-brand. Add a filter to see them"), and the CSV writes the omitted count into the file, so the size of what the cap held back is on the page and in the export every time. Narrow the range or add a filter and those rows come back.
  • Export is CSV, and only CSV: one button writes the whole expanded table into one file, along with the count of rows the cap held back and the coverage preamble. The chart view answers a narrower question than the table, by design: it plots the first Row dimension on the x-axis, and a non-date chart draws the top 14 members by clicks.

Connect your site and see the first answer today

Sign in with Google, pick a property, and your dashboard fills in while you watch, with the screen counting the days as they land.

Read-only access Free plan, no card Nothing to install