GA4 not showing data? 9 causes of zero (or almost zero) data and how to fix each
If GA4 shows zero or almost no data, the cause is usually one of three things: you are looking too early or in the wrong place, the tag is not reaching Google, or GA4 is receiving data but throwing it away (a filter or a consent setup). The quickest test is the Realtime report: open your site in another browser and see whether you appear within a minute. That one check tells you which half of this list to read.
Below are the nine causes we see most often, ordered from the cheapest check to the most involved one.
Quick triage
| What you see | Most likely cause | Start with |
|---|---|---|
| Realtime shows you, standard reports are empty | Processing delay, report filters, wrong date range | Causes 1, 8, 9 |
| Realtime shows nothing at all | Tag missing, wrong ID, GTM not published, blocked script | Causes 2, 3, 4, 7 |
| Data drops by a large share overnight, evenly across pages | Consent banner or a newly active data filter | Causes 5, 6 |
| Only Explorations are empty for older dates | Data retention setting | Cause 9 |
1. You are looking too early
GA4 is not instant. Google says processing can take 24–48 hours, and numbers can still change during that window. Realtime covers roughly the last 30 minutes; standard reports for "today" and "yesterday" are often incomplete.
- Brand-new property? The "No data received from your website yet" notice on the data stream can stay for a while even when the tag works. Check Realtime instead of waiting for the notice to disappear.
- Check the date range. The default range usually excludes today. If you just installed the tag, "Last 28 days" will look almost empty for days.
- Check the property time zone (Admin → Property details). A property set to a time zone far from yours shifts day boundaries, which makes the most recent day look low.
If Realtime shows your visit, wait a full day before going further.
2. You are looking at the wrong property, or the tag sends to a different one
This is more common than it sounds, especially in agencies or accounts with old test properties.
- Compare measurement IDs. In GA4, go to Admin → Data collection and modification → Data streams, open your web stream and note the Measurement ID (it starts with
G-). Then view your page source or use Tag Assistant and check which ID the page actually sends to. They must match. - An old Universal Analytics ID (
UA-…) does nothing now. Universal Analytics stopped processing data in 2023. If your site, theme or plugin still only has aUA-ID, GA4 receives nothing. - Several streams or properties? A site rebuild sometimes ships with a new tag pointing at a fresh property someone created "for testing". Check the account switcher at the top of GA4 for properties with recent data.
3. The tag is missing from some or all pages
A tag that used to work can disappear without anyone touching GA4.
- Theme or template updates can overwrite a manually pasted snippet in the header.
- A site rebuild or migration (new CMS, new shop system, new landing-page builder) often launches without tracking.
- Separate templates for checkout, blog or landing pages may never have had the tag.
- Single-page apps may send one
page_viewon first load and nothing after that unless page changes are tracked. Enhanced measurement's "Page changes based on browser history events" option (in the stream's enhanced measurement settings) covers many cases.
Open a few important pages, view the source and search for googletagmanager.com. If it is missing on some templates, that is your gap. GA4's troubleshooting guidance also points out the obvious: it only collects data from pages that include the tag.
4. Google Tag Manager changes were never published
If you use Google Tag Manager, saving a change in a workspace does nothing on the live site until you click Submit and publish a version.
- Check Versions in Tag Manager: is the live version the one with your GA4 tag?
- Use Preview mode to confirm the Google tag (or GA4 configuration) fires on page load. A tag that fires only on a trigger like a click or a form will produce almost no
page_viewdata. - Make sure the GTM container snippet itself is still on the site (see cause 3).
5. The consent banner blocks GA4 for most visitors
If your numbers dropped sharply the day a cookie banner was added or changed, start here.
- With Consent Mode in basic mode, Google tags do not load until the visitor accepts, so visitors who decline or ignore the banner are not measured.
- In advanced mode, tags load with consent denied and send cookieless pings that GA4 can use for modeling, but modeling only applies once a property meets Google's eligibility thresholds. Small sites often see the raw, lower numbers.
- A misconfigured banner can block everyone: for example, the default state is set to denied and the "accept" click never updates it, or the banner script loads after the Google tag. Test it yourself: accept all cookies in a private window and check Realtime.
The typical signature is a drop of a large share of traffic on one day, spread evenly across channels and pages. How to configure consent is a legal and product decision for your site; Google's consent mode documentation explains the technical options.
6. A data filter is excluding your traffic
GA4 data filters remove events before they are stored, and excluded data cannot be recovered later.
Go to Admin → Data collection and modification → Data filters and look at each filter's state (Testing, Active or Inactive).
- Internal traffic filter (every property has one, created in Testing state): if someone activated it while the internal traffic rule covers a very broad IP range, real visitors are excluded too. Check the rule under the web stream's tag settings ("Define internal traffic").
- Developer traffic filter: it excludes events sent in debug mode. If
debug_modewas left enabled in production (for example, in a GTM tag for testing), activating this filter removes nearly everything. Google's DebugView help notes that settingdebug_modeto false does not turn debug mode off; you have to remove the parameter.
If a filter is Active and you are not sure it's correct, switch it back to Testing first. In Testing mode, matching data is kept and labeled so you can see how much it would remove.
7. Something blocks the script before it reaches Google
The tag may be in the page and still never run.
- Script optimization plugins that delay or combine JavaScript ("load on user interaction", "delay JS") can stop the Google tag from firing for visitors who leave quickly, or at all.
- A Content Security Policy that doesn't allow Google's tag domains blocks the script; your browser console will show the error.
- Ad and tracking blockers block GA4 for some visitors. This explains a gap of some size between GA4 and server-side counts, not a drop to zero, unless your audience is unusually technical.
- A server-side tagging setup that is down or misconfigured can silently drop everything.
Open the browser developer tools on your site, go to the Network tab, filter for collect and reload. If no requests to Google Analytics appear (and you are not blocking them yourself), the script isn't running.
8. The report itself is filtered
Sometimes GA4 has all the data and the screen just isn't showing it.
- A comparison or filter is applied at the top of the report (for example, a single country or device). Remove it.
- The report was customized in the Library and now has a filter baked in. Compare with the same metric in Explorations.
- Data thresholds: when Google signals is enabled, GA4 may hide rows with small numbers to protect user privacy, and the report shows a notice. On low-traffic sites this can make reports look nearly empty. The reporting identity setting (Admin → Data display → Reporting identity) affects this.
9. Explorations show nothing for older dates
Standard reports keep aggregated data, but Explorations depend on the property's data retention setting (Admin → Data collection and modification → Data retention). Standard properties offer 2 or 14 months, and the default is 2 months. If someone never changed it, an exploration over last year's dates will be empty even though the standard reports show traffic.
Set retention to 14 months now. It only applies going forward, so the sooner the better.
What to do next
- Run the Realtime test. If you appear, work through causes 1, 8 and 9. If you don't, go through 2, 3, 4 and 7.
- If the data dropped sharply on a specific day rather than disappearing completely, check consent (5) and data filters (6), then annotate the date.
- Once data is flowing again, compare channels and landing pages to see whether the gap hides a real traffic change too. Our step-by-step traffic drop checklist covers that part, and the free GA4 traffic drop checker shows which segment changed most.
FAQ
How long should I wait before worrying about missing GA4 data?
If Realtime shows visits, give standard reports 24–48 hours. If Realtime shows nothing while you are on the site with blockers off, don't wait: the tag isn't working.
Can I recover data that GA4 didn't collect or filtered out?
No. GA4 cannot backfill data that was never sent, and events removed by an active data filter are not stored. Fix the cause quickly and annotate the gap so later comparisons account for it.
GA4 shows far fewer users than my server logs or Cloudflare. Is GA4 broken?
Not necessarily. Server-side counts include bots and visitors who block scripts or decline cookies. A steady gap is normal; a sudden change in the gap is what you should investigate.