Reporting nobody trusts
Reporting nobody trusts (R-501) is when two dashboards show different numbers for the same thing and nobody can say which is right. The data is usually fine. The definitions are not: tiles labelled "revenue" or "conversions" pull different fields, scopes or dates, and no one owns the definition. The fix is a written metric register, not a new dashboard.
Symptom and cause
- Symptom
- Dashboards exist, but every meeting argues about whose number is right. The report gets opened once, then ignored.
- Cause
- No agreed definition per metric: "revenue", "conversions" and "sessions" mean different things in different tiles, pulled from sources that don't agree.
- Where it's caught
- Two dashboards showing different totals for the same thing; metrics with no documented definition or owner.
Why the same metric shows different numbers
Most "which number is right?" arguments are not tracking faults. They are six choices made differently in different tiles, usually by different people, and never written down. Each choice is legitimate on its own. The fault is that nobody can say which one a tile made.
Which revenue. GA4 has four fields with revenue in the name. Total revenue adds purchases, in-app purchases, subscriptions and ad revenue. Purchase revenue is purchases minus refunds. Gross purchase revenue is purchases before refunds. Item revenue counts items only, minus refunds, so the tax and shipping on an order are left out (whether VAT is left out depends on what the item prices carry). A tile called Revenue can be any of the four, or the store's own figure, which is a fifth definition. The exhibit below is three tiles called Revenue reading three different fields.
Which count. Key events in GA4 is the number of times users triggered any key event. Without a filter on event name, a tile labelled Conversions adds purchases, sign-ups and anything else marked as a key event into one total. Ecommerce purchases and Transactions are separate metrics. Google Ads conversions are a separate system again, with their own rules.
Which users. GA4 reports show active users, people who engaged in the date range. Total users is a different metric, counting every user who triggered any event. A tile labelled Users built on Total users runs higher than the GA4 report next to it.
Which channel. Session-scoped dimensions, such as Session source / medium in the Traffic acquisition report, credit the session's source on Google's paid and organic last-click basis, which ignores direct when an earlier source exists. Event-scoped dimensions, such as Source / medium without the prefix, follow the property's attribution model, data-driven by default. Revenue by channel can differ between two tiles that both show the right total.
Which day. GA4 uses the property's reporting time zone as the day boundary, so a store or ad account on another time zone splits a day differently. Changing the time zone only affects data going forward. Recent days also move: GA4 processing can take 24 to 48 hours, some data arrives up to 7 days late, and key event credit can shift for up to 12 days. Looker Studio caches GA4 data for 12 hours by default, so a dashboard can be half a day behind the GA4 screen next to it.
Which rows. Sampling and thresholding remove or estimate rows without saying so on the tile. That is its own code, R-502.
None of these gaps is a fault by itself. Two tiles with different definitions and different labels are fine. Two tiles with the same label and different numbers, or a number nobody can define, is R-501.
| Tile | Field it reads | 30 days | Verdict |
|---|---|---|---|
| Weekly marketing · Revenue | GA4 Purchase revenue | £128,400 | one definition |
| Board pack · Revenue | GA4 Item revenue (items only) | £104,900 | another |
| Finance sheet · Revenue | Store net sales export | £131,700 | a third |
| Metric register | none on file | n/a | no one owns Revenue |
How to catch it
- Start with the argument itself. Take the two numbers people disagree about and, for each, write down the source, the exact field, the filter and the date range. In Looker Studio, open the chart in edit mode and read the metric in the Setup panel; the tile title does not count. Same field, filter and dates with different numbers points at a data or sampling problem (R-502). Different fields under the same label is R-501.
- List every tile labelled Revenue across the dashboards people actually open. GA4 offers Total revenue, Purchase revenue, Gross purchase revenue and Item revenue. Note which one each tile reads, or whether it reads the store or the finance export instead. More than one field under one label is the fault.
- Check every tile labelled Conversions or Key events. If it uses the Key events metric with no event-name filter, it adds every key event together: purchases, sign-ups, anything marked. Compare it with Ecommerce purchases for the same range.
- Check the channel tiles. Session source / medium is session-scoped and paid and organic last click. Source / medium with no prefix follows the attribution model, data-driven by default. Two channel tables built on different ones disagree by channel and agree on the total.
- Check the dates. GA4's property details in Admin show the reporting time zone; compare it with the store and the ad accounts. Then compare totals over ranges that end at least two days ago (a rule of thumb from GA4's 24-48 hour processing, not a Google figure), and channel splits over ranges that end at least 12 days ago, because key event credit can shift for that long. A gap that only exists for recent days is timing.
- Ask who owns each number. If nobody can give the definition of the revenue tile in one sentence, or two people give different ones, that is the finding. A metric with no written definition and no owner is R-501 whatever the data says.
What putting it right involves
- Write the metric register before touching a dashboard. One line per number the business uses: name, one-sentence definition, source, exact field, filters, time zone, owner, and the normal gap to the store or ad platform. Keep it to the ten or so numbers that are argued about. It belongs in the same place as the tracking documentation (F-501).
- Pick one source per question. Finance revenue usually comes from the store or the finance system. Channel comparison comes from GA4, with one revenue field and one scope chosen on purpose. The register says which question each number answers, so a gap between them is expected and stated, not argued.
- Rebuild the tiles to the register. Rename every tile to say what it is, for example "Purchase revenue (GA4, net of refunds, session channel)". Filter key event tiles to named events. Remove tiles nobody can define. If a definition is wrong at the source, such as the purchase value itself, fix that first (F-302); a register cannot rescue a wrong value.
- Fix the day. Set the GA4 reporting time zone to match the store if they differ, knowing the change applies from that day on. Show the "data to" date on the dashboard and exclude incomplete days from weekly comparisons. In Looker Studio, set the data source's freshness to suit how often the report is read.
- Put the normal gaps on the dashboard. A line under the revenue tile such as "GA4 runs below the store: consent and blockers" stops the same argument every week. If the gap moves outside its usual range, that is a tracking fault to file, not a reporting one.
- Give each number an owner and a review date. Any new tile or changed definition goes through the register first. Check after one full reporting cycle: the same question asked in two places should return the same number, or a stated, explained difference.
Sources on file
- Analytics: Dimensions and metrics (Total revenue, Purchase revenue, Gross purchase revenue, Item revenue, Key events, Ecommerce purchases, Transactions, Active users, Total users, Session source / medium)support.google.com
- Analytics: Scopes of traffic-source dimensions (first user, session and event scope; session and user scope use last click, event scope follows the selected attribution model, data-driven by default)support.google.com
- Analytics: User metrics (reports show active users, users who engaged in the date range)support.google.com
- Analytics: Data freshness (processing can take 24-48 hours, data can arrive up to 7 days late, key event attribution can change for up to 12 days)support.google.com
- Analytics: Conversions vs. key events (key events in GA4, conversions in Google Ads, why they were split)support.google.com
- Analytics Admin API: Property resource (timeZone is the reporting day boundary; changes apply going forward only)developers.google.com
- Looker Studio: Manage data freshness (Google Analytics connector default every 12 hours, options 1, 4 or 12; editors can refresh at any time)docs.cloud.google.com
Cited in these case files
R-501 turns up as evidence across the archive. It is cited in:
- RECONCILIATION Reconciliation No. 01 — what moved this period A GA4 Data API quota change on record, the kind of upstream change that quietly alters what a dashboard returns.
- SYMPTOM GA4 withholds your smallest segments: data thresholding Rows withheld by thresholds are R-502. When two tiles disagree because one of them hides rows and nobody labelled it, the reporting fault is R-501.
Questions on this file
Why do my dashboards show different numbers for the same metric?
Usually because the tiles are not the same metric. "Revenue" can be GA4's Total revenue, Purchase revenue, Gross purchase revenue, Item revenue or the store's figure. "Conversions" can be every key event added together. Channels can be session-scoped or follow the attribution model, and days can split on different time zones. Open each tile and read the field, not the title.
Which revenue number in GA4 is the right one?
The one your register says, used for the question it answers. Purchase revenue (purchases minus refunds) is the usual choice for ecommerce channel reporting. Total revenue adds in-app, subscription and ad revenue. Item revenue counts items only, so the order's tax and shipping are left out. For finance totals, the store or finance system is the source of record, and GA4 is expected to sit below it.
Why doesn't my Looker Studio report match GA4?
First check it is the same field, filter, date range and scope. If it is, check timing: Looker Studio caches GA4 data for 12 hours by default, and recent GA4 days can still change. If the numbers still differ on an old, matched range, look at sampling and API limits, which is R-502.
Why is the Conversions number on our dashboard so high?
A tile built on the Key events metric with no event-name filter adds every key event: purchases, sign-ups, form starts, anything marked. Filter it to the event the tile is named after, or rename it. If the wrong events are marked as key events in the first place, that is F-104.
Is a difference between GA4 and the store always a problem?
No. GA4 typically runs below the store because some buyers decline consent or block scripts. It can sit above the store's net figure if refunds never reach GA4, because Purchase revenue only subtracts the refunds GA4 receives. Whatever the usual gap is, it belongs on the dashboard as a stated range. A gap that moves outside that range is a tracking fault, not R-501.
Do we need a new dashboard to fix this?
Rarely. The fix is agreeing what each number means and labelling it. Most teams already have the right data in the wrong tiles. Write the register, rebuild the existing tiles to it, and delete the ones nobody can define.