google analytics6 min readBy Phloz team

GA4 DebugView vs Realtime: which to trust when

Realtime and DebugView answer two different questions. Use the wrong one and you'll either miss data that's fine or trust an event that's broken. How to tell which to open, and what each can't tell you.

TL;DR

GA4 gives you two live debugging surfaces and they answer two different questions. Realtime answers "is any data arriving at all?" — it shows aggregated activity from everyone on the site in the last 30 minutes, with almost no parameter detail. DebugView answers "is this event firing with the right parameters?" — it shows a second-by-second event stream from debug sessions only (your test device), with every parameter and user property visible. Reach for Realtime to confirm the pipe isn't dead; reach for DebugView to confirm a specific conversion is shaped correctly. Neither is the system of record — both are validation tools, and a green light in either does not mean the event will land correctly in your reports or attribution.


If you've ever stared at GA4 Realtime trying to confirm a purchase event has the right value and currency, you've used the wrong tool — and probably concluded something was broken when it was fine, or that it was fine when it was broken. The two live views look similar enough that people pick whichever they opened last. They're not interchangeable. Here's the split, and when each one will lie to you.

What each view actually shows

Realtime (Reports → Realtime) is a dashboard of the last 30 minutes of activity across all traffic — every real visitor, no debug flag required. It's built to answer "are people on the site right now, and roughly what are they doing?" It shows event counts, top events, users by source/page/geo. What it does not reliably show is the parameters on an event. You can click into an event card and see some parameter values, but it's aggregated and sampled — it is not a faithful payload inspector. Realtime's job is liveness, not correctness.

DebugView (Admin → DebugView) is a timeline of individual events from sessions that are in debug mode only. Each event appears as it fires, with its full parameter set and user properties expandable underneath. It's the faithful payload inspector Realtime isn't — but it's deliberately blind to normal traffic. If your device isn't flagged for debug, DebugView shows nothing, and that "nothing" means "no debug sessions," not "no data."

The mental model: Realtime is the smoke detector; DebugView is the bench multimeter. One tells you the building isn't on fire. The other tells you whether a specific wire carries the voltage you expect.

How an event gets into DebugView

DebugView only shows debug-flagged traffic, which is the part people trip on. A session enters debug mode through any of:

  • GTM Preview / Tag Assistant — connecting Preview automatically flips debug_mode on for that session. (This is why, the moment you're debugging in GTM Preview, your events start streaming into DebugView with no extra step.)
  • The Google Analytics Debugger Chrome extension.
  • debug_mode: true set on the GA4 config or event tag.
  • Server-side / Measurement Protocol calls that include debug_mode in the payload (or hit the validation endpoint).

If none of those is active, DebugView is empty by design. The single most common "DebugView is broken" report is just a closed Preview tab or a disabled extension.

Which to open — by question

You're trying to answer…OpenWhy
"Is the site sending GA4 anything at all?"RealtimeAll traffic, no setup, instant liveness check.
"Did my published container start working?"RealtimeConfirms hits are now arriving in production.
"Is my purchase event sending the right value/currency/items?"DebugViewOnly it shows the full, faithful payload.
"Did this exact button click fire the event I expect?"DebugViewPer-event timeline isolates your test.
"Is my server-side / Measurement Protocol event landing?"DebugViewSend it with debug_mode; it won't be obvious in Realtime.
"Are real users hitting the new landing page right now?"RealtimeDebugView only ever shows your debug sessions.

The rule of thumb: counts and liveness → Realtime; parameters and correctness → DebugView.

Where each one will mislead you

Realtime makes "arrived" look like "correct." An event showing up in Realtime proves it reached GA4. It proves nothing about whether value was a number or the string "undefined", whether currency was set, or whether the conversion was deduplicated. Marking a conversion "done" off a Realtime count is how broken value parameters survive for months. If correctness matters — and for revenue events it always does — that check belongs in DebugView.

DebugView makes "no debug traffic" look like "no data." Because it only shows debug sessions, an empty DebugView during a quick look usually means you aren't in debug mode, not that the site is dark. Never conclude the tracking is dead from DebugView — that's Realtime's job.

Both make "live" look like "in my reports." Realtime and DebugView are validation surfaces, not the ledger. Standard GA4 reports settle over 24–48 hours, and attribution, conversion modeling, and channel grouping apply after collection. An event can be flawless in DebugView and still land in "Unassigned" or get filtered by a property setting. The live views verify collection; they say nothing about reporting and attribution — which is exactly why verifying conversions end-to-end means not trusting a single dashboard.

The 60-second routine that uses both correctly

  1. Realtime first — is the pipe alive? Load the site in a normal window. See yourself appear in Realtime within ~30 seconds? Collection works. Nothing at all? That's a container/tag problem, not a parameter problem — go fix that before touching DebugView.
  2. DebugView second — is the event right? Open GTM Preview (auto-enables debug), trigger the exact event, and read its full payload in DebugView. Confirm every parameter you depend on — value, currency, transaction_id, IDs — is present and the right type.
  3. For server events, force debug. Send the Measurement Protocol call with debug_mode and confirm it in DebugView; don't expect it to be legible in Realtime. (If you're deciding whether an event even should be server-side, that's a separate call.)
  4. Then stop trusting the live views. They confirmed collection. Whether it shows up correctly in reports is a 24–48h question, and part of the standing GA4 audit, not a one-time glance.

Why this is more than a GA4 tip

The DebugView/Realtime mix-up is a small instance of the thing that quietly wrecks agency reporting: a green light that's answering a different question than the one you asked. Realtime says "alive," you hear "correct." DebugView says "no debug sessions," you hear "no data." Tracking fails silently and specifically — never with an error message, always with a dashboard that looks plausible. The fix isn't a better glance; it's treating verification as a repeatable routine with a defined source of truth, so "is it actually firing, correctly, end to end?" has an answer that isn't a screenshot of Realtime.

That discipline is what Phloz is built around: every client's GA4 property, GTM container, and pixels modeled as nodes you can audit on a schedule, with the whole tracking setup mapped and health-checked instead of re-derived from memory each time a client asks. The product case lives on CRM for SEO agencies and the pricing page. But the habit stands on its own: open Realtime to ask "alive?", open DebugView to ask "correct?", and don't let either answer the other's question.