GA4 event tracking has three failure modes. Events that fire when they shouldn't — duplicates that double your conversion counts and inflate revenue. Events that don't fire when they should — broken tags that silently drop conversions and starve Smart Bidding of data. And events that fire correctly but with wrong or missing parameters — technically present in reports but analytically useless or actively misleading.

All three are common. None announce themselves. This guide walks through the tools and process for auditing each failure mode systematically — starting with the instruments you need, then the step-by-step verification process for every event in your property.

The three tools you need

Tool 1

GA4 DebugView

GA4's built-in real-time event inspector. Shows every event firing on your device as it happens, with full parameter details. Access via Admin → DebugView. Requires either the GA4 debug mode parameter (?debug_mode=1 appended to your URL), the Google Analytics Debugger Chrome extension, or GTM preview mode active in the same browser. DebugView is the primary tool for verifying individual event behaviour — it shows the exact payload GA4 receives for each event.

Tool 2

Google Tag Assistant

Chrome extension that inspects all Google tags firing on a page, including GA4 measurement IDs, GTM containers, and their triggered tags. Useful for identifying duplicate measurement IDs, verifying which container is managing which tags, and catching cases where both a GTM-managed GA4 tag and a hardcoded snippet are active simultaneously. Download from the Chrome Web Store — it's free and essential for any tracking audit.

Tool 3

GTM Preview Mode

If your site uses Google Tag Manager, GTM's preview mode shows exactly which tags fired on each page interaction, which triggers activated them, and which variables resolved to which values. Access via the Preview button in your GTM container. GTM preview mode automatically activates GA4 debug mode, so DebugView will show events in real time while preview mode is running. Use both simultaneously for the most complete picture.

Step 1: Check for duplicate tags

Before verifying individual events, confirm that GA4 is only being loaded once per page. Duplicate tag loading — where both a GTM-managed GA4 tag and a hardcoded <script> snippet are present — is the most common cause of doubled event counts. Every event fires twice. Every conversion is counted twice. Revenue appears doubled.

Open Tag Assistant on your site's homepage. Look at the tags panel. You should see exactly one GA4 configuration tag associated with your measurement ID. If you see two GA4 tags — one from GTM and one from a direct script — you have duplicate firing.

One GA4 configuration tag per measurement ID in Tag Assistant — correct
Two GA4 configuration tags with the same measurement ID — duplicate firing. Remove the hardcoded snippet and manage everything through GTM, or vice versa.
!
Two GA4 configuration tags with different measurement IDs — may be intentional (staging vs production) or may indicate a migration residue. Verify which ID is active and whether both should be present.

Also check for multiple GTM containers. A site with two active GTM containers can result in GA4 events firing from both — particularly if a migration left the old container active. Tag Assistant shows all GTM containers present on the page.

Step 2: Audit the event list

Go to Admin → Events. This is your master list of every event GA4 has recorded in your property. Work through it systematically with three questions for each event:

  1. Is this event still needed? Properties accumulate events over time — old experiments, deprecated features, renamed events that were replaced but never removed. An event list with 40+ events is almost always carrying dead weight that adds noise to reports.
  2. When did it last fire? The event list shows last-activity dates. Any event that hasn't fired recently on an active site — particularly any event marked as a conversion — needs investigation.
  3. Is the naming convention correct? GA4 recommends snake_case. Scan for camelCase, spaces, hyphens, or mixed capitalisation. Each naming variant creates a separate event in GA4 even if it represents the same user action.

Build a simple inventory as you go — event name, expected trigger, last fired date, marked as conversion (yes/no). This becomes the checklist you verify against in DebugView.

Event nameExpected triggerConversionStatus to verify
purchaseOrder confirmation page loadYesFires once, all parameters present
begin_checkoutCheckout page loadNoFires on correct page
add_to_cartAdd to cart button clickNoFires on click, not on page load
form_submitContact form submissionYesFires on submit, not on every keystroke
file_downloadPDF or asset download clickNoFires on click, correct file_name parameter

Step 3: Verify events in DebugView

With your event inventory ready, activate DebugView and work through each event manually — performing the user action and confirming what GA4 receives. Open Admin → DebugView in one browser tab. In another tab, navigate to your site with the debug parameter active or the GA Debugger extension enabled.

For each event, verify four things:

1. It fires when it should. Perform the trigger action — click the button, submit the form, reach the page. The event should appear in DebugView within a few seconds. If it doesn't appear after 15–20 seconds, the tag is not firing.

2. It fires only once. Watch the DebugView stream carefully after performing a single trigger action. If the same event appears twice within a few seconds of each other, you have duplicate firing. Check GTM for multiple triggers on the same tag, and check for both a GTM-managed and hardcoded version of the same event.

3. It fires only when it should. Navigate to pages where the event should NOT fire and verify it doesn't appear in DebugView. A purchase event that fires on the homepage is a serious problem. A form_submit event that fires on page load rather than on submission is counting every page view as a conversion.

4. All required parameters are present and correct. Click the event in DebugView to expand its parameter list. Verify every required parameter is present with the expected value. For the purchase event specifically, confirm all of the following:

purchase event — required parameters:
  transaction_id  → unique order ID (string)
  value           → order total (number, not string)
  currency        → ISO 4217 code e.g. "GBP", "USD"
  items           → array with at least one item object
    items[0].item_id    → product identifier
    items[0].item_name  → product name
    items[0].price      → unit price (number)
    items[0].quantity   → quantity (integer)
Common parameter errors to watch for: value passed as a string ("49.99") instead of a number (49.99), currency passed as a symbol ("£") instead of an ISO code ("GBP"), transaction_id reusing the same value for every order (often "undefined" or "order_id"), and items array present but empty.

Step 4: Audit conversion events specifically

Conversion events deserve a separate, more rigorous pass because their accuracy directly affects Smart Bidding, campaign reporting, and every CRO decision you make. Go back to Admin → Events and filter for events with the conversion toggle enabled.

The zombie conversion check

For each conversion event, check when it last fired. GA4 doesn't surface this prominently — you need to go to Reports → Engagement → Events, filter for the specific event name, and look at the trend over time. A conversion event that shows consistent activity up to a point and then flatlines is a broken tag. A conversion event that shows no activity at all since it was created was likely never implemented correctly.

The volume sanity check

For your primary purchase or lead conversion event, compare GA4's reported count against your actual business records for the same period. Go to Reports → Monetisation → Ecommerce purchases (or filter by your conversion event in the Events report) and note the total for any recent 30-day period. Compare against your CRM, e-commerce platform, or payment processor for the same dates.

GA4 vs platform comparisonWhat it indicates
GA4 within 3–5% of platform countNormal — small gap from ad blockers and privacy browsers
GA4 significantly higher than platformDuplicate event firing — purchase event firing twice per transaction
GA4 10–20% lower than platformTracking gap — likely payment processor attribution, Consent Mode v2 missing, or tag firing inconsistently
GA4 50%+ lower than platformSerious tracking failure — purchase event not firing for a large proportion of transactions

The Smart Bidding signal check

If Google Ads is connected, go to your Google Ads account and check which conversion actions are active and receiving data. A GA4 conversion event that's imported into Google Ads as a conversion action but has stopped firing is silently degrading Smart Bidding performance. The campaign continues to spend. The algorithm continues to optimise. But the signal it's optimising against is weeks or months out of date.

Step 5: Verify the ecommerce funnel

If your site has e-commerce functionality, the full event funnel requires seven events in sequence. Each missing event is a funnel step you cannot analyse. Work through each one in DebugView by navigating the purchase journey on your site:

view_item — fires on product page load with item_id, item_name, price
add_to_cart — fires on add-to-cart action, not on page load
view_cart — fires on cart page load with items array
begin_checkout — fires at checkout initiation
!
add_shipping_info — fires when shipping details are entered or selected. Most commonly missing event after add_payment_info.
!
add_payment_info — fires when payment method is entered. The most commonly absent funnel event — its absence makes checkout abandonment analysis impossible. Full guide →
purchase — fires on confirmation page with transaction_id, value, currency, items array

Any missing event means you have a blind spot in your funnel analysis. You can see that users are abandoning somewhere between add_to_cart and purchase — but without each intermediate event, you cannot determine where.

Step 6: Check naming consistency

Go to Admin → Events and sort the event list alphabetically. Scan for naming inconsistencies — the same conceptual event appearing under multiple names due to casing differences, formatting variations, or incremental naming changes that weren't cleaned up.

Common examples of fragmented events:

formSubmit, form_submit, Form Submit — three names for the same event. GA4 treats them as three separate events.
button_click, ButtonClick, button-click — same problem. Hyphens are not valid in GA4 event names and get replaced with underscores, creating further confusion.
lead_gen, lead_generation, lead — naming drift over time as different team members implemented the same concept differently.

For historical variants that can't be re-tagged, use GA4's event renaming feature in Admin → Events → Modify event to consolidate them going forward. For new implementation, enforce snake_case as the standard across your entire team before anything is deployed.

After the audit: what to do with your findings

A thorough event tracking audit will typically surface a mix of immediate fixes and longer-term improvements. Prioritise in this order:

  1. Duplicate firing — fix immediately. Every hour it runs is doubled conversion data corrupting your reports and Smart Bidding.
  2. Broken conversion events — fix within 24 hours. Every day a conversion event is down is a day of missing signal for campaigns that are actively spending.
  3. Missing purchase parameters — fix within the week. Revenue data is wrong until this is resolved.
  4. Missing funnel events — schedule for the next sprint. Important but not causing active data corruption.
  5. Naming inconsistencies — fix going forward with a naming convention document. Historical fragmentation can be addressed with event renaming in GA4.
Document everything before you fix anything. Screenshot the DebugView output for each broken event before making changes. This creates a baseline that shows exactly what was wrong — useful for reporting the impact of your fixes and for diagnosing any regressions after deployment.

The manual audit process described above takes two to four hours for a typical e-commerce property — longer for complex implementations with many custom events. GA4 Health Check automates the detection side of this process: identifying zombie conversion events, duplicate firing indicators, missing ecommerce funnel events, and parameter completeness issues across your entire property in 60 seconds. The DebugView verification is still worth doing for any issues flagged, but the automated audit tells you exactly where to look.

Event tracking problems are the hardest data quality issues to find manually — and the most expensive to miss. A purchase event firing twice for six months means six months of doubled revenue data, doubled conversion counts, and Smart Bidding optimising against a signal that's twice as strong as reality. Run an automated audit on your property →
Travis Gunn
Founder of GA4 Health Check. Working with Google Analytics since 2013, with over 250 clients audited across almost every industry vertical. 100% Job Success on Upwork for over a decade.