Your GA4 migration is probably broken (and here's how to tell)
Most GA4 setups I audit are missing 40-60% of the events they think they're tracking. Here's what goes wrong and how to check yours in 10 minutes.
I’ve audited somewhere north of 80 GA4 properties in the last two years. The number of setups that were actually tracking what their owners thought they were tracking? Maybe twelve.
That’s not an exaggeration. I keep a spreadsheet. Most GA4 migrations are missing between 40% and 60% of the events the team believes are firing. The dashboards look fine. The reports pull numbers. Everyone nods in meetings. And the data underneath is garbage.
Here’s why this keeps happening and how you can check your own setup in about ten minutes.
The five things that break
1. Event naming chaos
Universal Analytics had a rigid structure: Category, Action, Label. You could argue it was annoying, but it forced consistency. GA4 said “name your events whatever you want” and teams heard “don’t think about naming conventions at all.”
I see this constantly. One client had add_to_cart, addToCart, Add To Cart, and cart_add all firing across different parts of their site. Four events tracking the same action. Their reports showed a quarter of the actual add-to-cart volume under each name.
GA4 is case-sensitive. It treats Page_View and page_view as different events. And there’s a 500 distinct event name limit per property. I’ve seen properties hit that limit with duplicate variations alone.
The fix is boring: write down your naming convention. Stick to snake_case. Document every event in a spreadsheet before you touch GTM. I know, nobody wants to do the spreadsheet. Do the spreadsheet.
2. Missing ecommerce tracking
This one kills me. Google published a whole new ecommerce data model for GA4. Items replaced products. The parameter names changed. The data layer structure changed. And a shocking number of migrations just… didn’t update the ecommerce implementation.
I audited an ecommerce brand doing about $4M annually through their site. Their GA4 showed zero revenue. Zero. They’d been running like that for seven months. Their old Universal Analytics ecommerce data layer was still firing, but GA4 doesn’t read that format. Nobody checked because “we migrated everything.”
If you’re running ecommerce, open your GA4 Monetization reports right now. If you see revenue, good. If you see zeros or numbers that look suspiciously low compared to your actual sales, your ecommerce tracking is broken or partially broken.
The GA4 ecommerce spec requires specific parameter names: items (not products), item_id (not id), item_name (not name). Getting even one of these wrong means GA4 silently drops the data. No error. No warning. Just empty reports.
3. No cross-domain tracking
If your user journey spans multiple domains, like your main site is on example.com and checkout happens on shop.example.com, you need cross-domain tracking configured. In Universal Analytics, this was a common setup that most agencies handled. In GA4, the configuration moved to the admin panel and a lot of migrations skipped it.
Without cross-domain tracking, a single user visiting both domains gets counted as two users. Your acquisition reports inflate because the second domain shows up as a referral from the first. I’ve seen this double-count inflate user numbers by 35% for one SaaS client whose pricing page was on a subdomain.
Check this: go to Admin > Data Streams > your stream > Configure tag settings > Configure your domains. If you have multiple domains in your user flow and this list is empty, you’re losing session continuity.
Not sure what your GA4 is missing? I'll audit your setup and show you exactly where the data gaps are.
Book a Free Audit →4. Broken conversions
GA4 changed how conversions work. In Universal Analytics, you set up Goals with specific conditions. In GA4, you mark events as conversions. Simple enough, except the migration didn’t carry over your goal configurations automatically.
I see two failure modes here. First, teams mark events as conversions but the events themselves aren’t firing correctly (see problem #1). Second, teams set up conversion events but don’t configure the event parameters they need for reporting. You end up with a conversion count but no idea which page, which campaign, or which product drove it.
One B2B client had generate_lead marked as a conversion. The event was firing on their contact form submission. But they hadn’t included the form_name parameter, so they couldn’t distinguish between their “Request Demo” form and their “Newsletter Signup” form. Both counted as the same conversion. Their demo request numbers were inflated by 3x because newsletter signups were mixed in.
5. Default channel groupings left untouched
This one is subtle and widespread. GA4 has Default Channel Grouping rules that determine whether traffic shows up as “Organic Search,” “Paid Social,” “Email,” etc. These rules are based on UTM parameters and source/medium values.
The problem: GA4’s default rules don’t know about your specific tools. If you use a CRM that appends its own tracking parameters, or an email platform that uses non-standard UTM values, that traffic gets dumped into “Unassigned.” I’ve seen properties where 20-30% of traffic sits in “Unassigned” because nobody customized the channel groupings.
Go to your Acquisition reports. Look at the “Unassigned” channel. If it’s more than 5% of your traffic, you have channel grouping issues. You need to either fix your UTM conventions or create custom channel groups in GA4 admin.
How to check your setup in 10 minutes
You don’t need a full audit to know if things are broken. Here’s a quick sanity check.
Minute 1-2: DebugView Open GA4 > Admin > DebugView. Install the Google Analytics Debugger Chrome extension. Browse your site. Watch events come in. Are you seeing the events you expect? Are the parameter values populated? If DebugView shows nothing, your basic tracking is broken.
Minute 3-4: Realtime report Open the Realtime report. Have a colleague (or yourself in an incognito window) complete a key action on your site. Form submission, purchase, whatever matters most. Does it show up? Does it show up with the right event name?
Minute 5-6: Event count comparison
Go to Reports > Engagement > Events. Look at your key events over the last 7 days. Compare these numbers to what you’d expect. If your site gets 10,000 pageviews a day in your CMS analytics but GA4 shows 4,000 page_view events, something is blocking or misconfigured.
Minute 7-8: Ecommerce check If you sell anything online, go to Monetization > Ecommerce purchases. Is there revenue data? Does it roughly match your actual revenue? A 10-15% discrepancy is normal (ad blockers, consent, etc.). A 50%+ discrepancy means broken tracking.
Minute 9-10: Source/medium check Go to Acquisition > Traffic acquisition. Look at Session source/medium. What percentage is “(not set)”? What percentage is in “Unassigned”? High numbers in either mean your attribution data is unreliable.
If you found problems in three or more of these checks, your GA4 setup needs a proper audit. Not a quick fix. An audit.
What good actually looks like
I’ll share a real example, anonymized. A mid-market ecommerce brand came to me in late 2025. They’d migrated to GA4 eighteen months earlier. Their in-house marketing team was making budget decisions based on GA4 data.
Before the audit, their GA4 showed:
- 45,000 monthly sessions
- $180,000 in monthly ecommerce revenue
- 62% of traffic from organic search
- 1.2% conversion rate
After fixing their setup, the actual numbers were:
- 73,000 monthly sessions (cross-domain tracking was broken, losing 38% of sessions)
- $310,000 in monthly ecommerce revenue (ecommerce data layer was missing half the product categories)
- 44% organic search, 18% was actually paid social that was miscategorized
- 0.9% conversion rate (the higher conversion rate was an artifact of undercounted sessions)
The marketing team had been underinvesting in paid social because GA4 wasn’t attributing those conversions correctly. They were also reporting a conversion rate that was 33% higher than reality, which made their funnel look healthier than it was.
That’s the thing about broken analytics. It doesn’t look broken. You still get numbers. You still get charts. You make decisions. The decisions are just wrong.
Frequently asked questions
Q: How do I know if my GA4 migration is broken?
Run a 10-minute sanity check: open DebugView to verify events fire, compare GA4 event counts against your CMS or server logs, and check your ecommerce Monetization reports for revenue discrepancies. If you find problems in three or more areas, your setup needs a full audit.
Q: Why is my GA4 ecommerce revenue showing zero?
GA4 uses a different ecommerce data model than Universal Analytics. The parameter names changed: you need items instead of products, item_id instead of id, and item_name instead of name. If your old UA data layer is still firing, GA4 silently drops the data with no error or warning.
Q: Does GA4 handle event naming differently than Universal Analytics?
Yes. Universal Analytics used a rigid Category/Action/Label structure, while GA4 lets you name events freely. GA4 is also case-sensitive, treating Page_View and page_view as different events. Stick to snake_case and document every event name in a spreadsheet before implementing in GTM.
Q: How much data loss is normal in GA4?
A 10-15% discrepancy between GA4 and your actual numbers (from your CMS, payment processor, or server logs) is typical due to ad blockers, consent opt-outs, and technical issues. A 50% or greater gap indicates broken tracking that needs immediate attention.
What to do about it
I won’t pretend this is something you can always fix yourself. Simple issues like event naming and channel groupings, sure. But ecommerce data layers and cross-domain configurations often need someone who lives in GTM and GA4 daily.
What you can do right now: run the 10-minute check I described above. Write down what you find. If the numbers don’t match reality, you at least know you have a problem. That’s step one.
Step two is deciding whether the problem is costing you money. If you’re a content site running display ads, slightly off pageview counts might not matter much. If you’re spending $50k/month on paid media and optimizing based on GA4 conversion data, broken tracking is directly burning your budget.
I’ve stopped being surprised by how many companies are making six-figure media decisions on data that’s fundamentally wrong. But I haven’t stopped being bothered by it.
Check your setup. Do the ten minutes. You might not like what you find, but at least you’ll know.
Artem Reiter
Web Analytics Consultant