My agent called analytics broken. The data just wasn't ready.
An agent read two days of Google Analytics numbers too early, filtered them to one traffic source, paused a campaign and wrote the error into a handover.
- Filed
- Reading
- 4 min
- Outcome
- Fixed
I do marketing for an app. On 16 October an agent was checking its ad campaigns for me. It read Google Analytics and told me engagement was broken.
Google Analytics 4, or GA4, is the tool that counts visits to a website. An “engaged” session is a visit where the person stayed at least ten seconds, viewed a second page or did something that counts. A healthy site has plenty. The agent saw almost none.
It was wrong twice, in two different ways.
What it got wrong
First, it filtered the data to one traffic source, “google / cpc”. A filter hides everything that doesn’t match. That source is where most paid Google clicks show up, but not all of them. One campaign sent 54 visits that day. The filter showed 22. It missed 32, including the only sign-up of the day. I spotted that sign-up in GA4 myself. The agent’s check hadn’t.
Second, it read data that wasn’t finished. GA4 shows numbers within minutes, but it needs one to two days to process them: sorting each visit into a traffic channel and judging whether it was engaged. Until then the numbers for recent days look broken, but they’re only early.
On that “0 engaged” reading, the agent recommended pausing the campaign, and I agreed. It then wrote that GA4 engagement had been broken since 16 October and put the claim into a handover for the developer. A handover is the document I send a developer so they can fix things. This one asked them to fix something that wasn’t broken.
The cost
The pause was short. About two hours after it, once I’d found the missed sign-up, the campaign went back on, desktop only. It was paused again the next day, but for a different reason: no conversions after about 20 in ad spend. That second pause came from ad-platform numbers, not from GA4.
On 18 October I asked: “Did you double check the engagement and attribution again? Is it still broken?” The agent reran it. For 16 October, once processed, 165 of 285 sessions were engaged. Sign-ups were 13: 10 from paid search and 3 from organic. The agent downgraded the handover item and marked the handover line wrong.
Why the agent got it wrong
It had no sense of when a number is final. A figure on the screen looks like a figure. The agent treated “0” as a measurement when it was a gap. Nobody had told it that GA4 needs a day or two.
The filter was a habit. Searching one source name is a quick way to get a clean answer. It also drops every visit labelled differently, and GA4 labels many ad visits as “Cross-network” (a channel GA4 uses for some ad formats) instead. The agent never checked what the filter threw away.
The rule I use now
Three changes. First, nothing from the last 48 hours of GA4 gets read. Second, results are grouped by channel group, which is GA4’s own sorting of traffic into Paid Search, Organic, Cross-network and so on. They are never filtered down to a single source. Third, a campaign’s results come from the ad platform’s own conversions, not from GA4.
Rule: how to read Google Analytics 4 (GA4) numbers.
Follow these steps every time you report on traffic, engagement or sign-ups from GA4.
1. Find today's date. Do not read, quote or draw any conclusion from GA4 data less than 48 hours old. GA4 is still processing it, and recent numbers look broken when they are only early.
2. If I ask about the last two days, say the data isn't final, and give me the newest day that is at least 48 hours old.
3. Never filter on a single source or medium such as "google / cpc". Group the results by channel group, so every visit is counted somewhere: Paid Search, Organic Search, Direct, Cross-network, Unassigned and the rest.
4. Show the total number of sessions next to every figure, so I can see whether the rows add up.
5. If a number looks broken, for example engagement near zero, do not call the tracking broken. First check whether the date is inside the 48-hour window. Then re-read the same day 48 hours later and compare.
6. Do not pause, change or stop any campaign based on GA4 alone. For results per campaign, use the conversions in the ad platform.
7. End every GA4 answer with one line: "Data checked up to [date]. Grouped by channel group. Nothing inside the last 48 hours was used."How to use it
Paste it into the instructions file your agent reads at the start of every session, in your project folder: CLAUDE.md for Claude Code, AGENTS.md for Codex and most other coding agents. If the file isn’t there, create it. In a chat app without files, paste it into the custom instructions, or at the top of a new chat that will look at analytics.
What to look for: the last line of every GA4 answer, with a date that is at least two days old, and a table with several channel groups instead of one source. If you get a single source or yesterday’s numbers, the rule isn’t being followed. Ask the agent to redo the answer.
What the fix doesn’t cover
The agent is quick at answering. It isn’t quick at knowing whether the answer is ready, and that part is mine to check. A reading that says everything has collapsed is the one to wait on.
Revision record
| First published. |