Growth systems Book a call
,

GA4 Setup Checklist for E-Commerce: Validate Before You Scale

Most GA4 setups look working but track revenue wrong by 20-50%. Use this 10-minute DebugView test and checklist to fix purchase events before scaling ads.

Your GA4 dashboard shows revenue data. Your Shopify order dashboard shows something different — sometimes by 30%, sometimes more. That gap isn’t a quirk of attribution models.

Every ROAS figure you used to justify ad spend was built on wrong numbers.

Most GA4 setup checklists for e-commerce treat installation as the finish line. Connect the property, enable e-commerce reporting, paste the snippet, and move on to reports. The Shopify documentation walks you through a toggle.

None of those guides tell you how to confirm the data is accurate before you build any decision on it. Small stores end up running dashboards that look healthy but are functionally broken.


What’s the biggest mistake e-commerce stores make when setting up GA4?

The biggest mistake is treating live pageview data as proof that setup is complete. Seeing traffic in GA4 doesn’t mean purchase events are firing correctly. The most destructive GA4 errors — duplicate purchases, missing revenue values, broken transaction IDs — don’t look like failures.

They produce numbers that seem plausible but are 20 to 50% wrong.

What most stores do: install the integration, see data arriving, and move on to reports. The green checkmark in Shopify’s GA4 settings panel feels like confirmation. It isn’t.

That checkmark confirms the connection exists. It says nothing about whether purchase events carry the three parameters GA4 needs to count revenue accurately.

What it actually costs: A Shopify apparel store at $85k/month ran paid ads for four months using GA4 ROAS data. Their reported ROAS held at 4.2x. When their agency cross-checked GA4 against Shopify’s order dashboard, GA4 revenue was overstated by 38%.

The actual ROAS was 2.6x. They had been scaling a campaign that wasn’t profitable.

The cause was a post-purchase upsell app. The app reloaded the order confirmation page to present the upsell offer. The purchase event fired on the original load and again on the reload — same transaction, two events.

GA4’s deduplication couldn’t help because transaction_id was undefined on both fires. Deduplication requires a real, unique ID to work.

The 20% move that fixes most of this: run a DebugView purchase validation before linking a single ad account. More on that process in a moment.

The second most common error: purchase events firing on checkout initiation

Some GA4 implementations place the purchase event trigger on begin_checkout instead of the order confirmation page. This happens most often with older GTM setups and certain Shopify app stacks.

Every checkout attempt records as a completed purchase. Abandoned carts inflate revenue. Conversion rates appear 3 to 5x better than reality.

This isn’t detectable from GA4’s standard reports. The events look correct. Revenue figures look healthy.

Tracing one transaction through DebugView is the only way to catch it.


How do I know if my GA4 purchase event is actually tracking correctly?

A working purchase event fires exactly once per confirmed transaction. It carries a unique transaction_id, a non-zero value, and at least one product in the items array. All four conditions must be true at the same time.

Failing any one corrupts a different part of your reporting.

Each parameter does a distinct job.

transaction_id prevents duplicate counting. GA4’s deduplication logic uses this value. If two purchase events fire with the same non-empty transaction_id, GA4 counts the revenue once.

If transaction_id is undefined or empty, deduplication fails silently. This happens when a checkout template references a deprecated variable. Every duplicate fire becomes a new transaction.

value carries the revenue figure. A purchase event with value: 0 records a $0 transaction. Your conversion count goes up.

Your revenue data is meaningless. This is common in WooCommerce stores using the Google Site Kit plugin. The plugin passes the event but strips the revenue value by default on some theme configurations.

items is the array of products purchased. Without it, GA4 can’t populate product-level purchase reports. You can see that conversions happened.

You can’t see which SKUs drove them, which products lead on cart attachment, or which drive higher order values.

Platform note for WooCommerce:

The free Google Site Kit plugin frequently passes incomplete purchase events. Missing items arrays appear on a significant portion of WooCommerce installations using this plugin. Fix it by switching to the dedicated WooCommerce Google Analytics integration plugin.

Or rebuild the event in Google Tag Manager using the dataLayer.

A WooCommerce home goods store at $55k/month made this switch and recovered 90 days of usable product-level purchase data. Their best-performing SKU by revenue — invisible before — became the basis for a new ad creative test. ROAS on that product line increased by 0.8x within six weeks.


What’s the fastest way to confirm my GA4 tracking is clean?

One 10-minute test using GA4 DebugView catches 80% of e-commerce implementation errors. Open DebugView, complete a test purchase using a $1 discount code, and verify exactly one purchase event fires. Confirm all three required parameters are present.

If the event fires twice or any parameter is missing, stop all other configuration work and fix it first.

Most store owners spend hours building custom reports and audiences before running this test. Run the test first. Everything else comes after.

Step-by-step:

  1. Open GA4. Navigate to Admin > DebugView.
  2. Install the Google Analytics Debugger Chrome extension. This activates debug mode for your current browser session.
  3. Create a $1-off discount code in Shopify or WooCommerce. Use a real checkout — Shopify’s Preview mode does not trigger purchase events.
  4. Add one item to your cart, apply the code, and complete checkout with a real payment method.
  5. Watch DebugView in real time. One purchase event should appear within 5–10 seconds of the order confirmation page loading.
  6. Click into the event. Confirm transaction_id is a real order number, not undefined. Confirm value is greater than zero and items contains at least one product.
  7. Refresh the order confirmation page. Watch DebugView again. A second purchase event on refresh means you have a duplication problem.

The entire sequence takes 10 minutes. Most stores running it for the first time find at least one failure.

A Shopify skincare brand at $120k/month ran this test after a quarterly review flagged unusual conversion rate variance. They found transaction_id: undefined across all purchase events. The checkout theme was pulling from a deprecated Shopify Liquid variable.

GA4’s deduplication had been failing silently on every transaction for months. Their developer fixed the variable reference in 20 minutes.

After 30 days of clean data, their actual conversion rate was 2.4% — not the 3.1% GA4 had been reporting. They reallocated $3k/month in ad spend from an overperforming campaign to one that cleaner data had uncovered. ROAS on the reallocated budget reached 3.8x within 60 days.

What to do when the test fails:

  • Two purchase events fire: check for page reload triggers, upsell apps that reload the confirmation URL, and all-pages GTM tags.
  • transaction_id is undefined: check your checkout template’s Liquid variables or GTM dataLayer for the variable name passing the order ID.
  • value is zero: confirm the currency parameter is in ISO 4217 format (USD, not $). Also confirm value is passed as a number, not a string.
  • items is empty: for Shopify, check whether your theme pushes product data to the dataLayer before the GA4 tag fires. For WooCommerce with Site Kit, switch to a different integration method.

What does a complete GA4 setup checklist for e-commerce look like after validation?

Build three things in this order: the checkout funnel exploration, the Google Ads link, and a weekly revenue cross-check. Custom dimensions, predictive audiences, and scheduled reports are secondary. Get these three working first.

The checkout funnel exploration:

Go to Explore > Funnel Exploration. Build a four-step funnel: view_item → add_to_cart → begin_checkout → purchase. Run it against the last 30 days.

The drop-off between steps tells you where to focus. A 60% drop between begin_checkout and purchase points to checkout friction — slow load times, unexpected shipping costs, limited payment options. A 70% drop between add_to_cart and begin_checkout points to a cart problem that typically responds to cart abandonment email sequences.

This report is only accurate if your events are clean. That’s why validation comes first.

Linking Google Ads:

Go to Admin > Google Ads Links and connect your account. If your purchase events were duplicating before the fix, your Google Ads Smart Bidding algorithm was training on inflated conversion values. After you correct the underlying event and relink, expect 2–4 weeks before Smart Bidding stabilizes on accurate figures.

During that window, manual CPC or a conservative target ROAS bid strategy gives the algorithm time to recalibrate without overspending.

The weekly three-minute cross-check:

Every Monday, pull the previous week’s revenue from GA4 Reports > Monetization > E-commerce Purchases. Compare it against the same date range in Shopify or WooCommerce.

A variance under 5% is normal — typically explained by attribution timing differences. A variance over 10% means something broke and needs investigation before it corrupts another 30 days of data.

A Shopify pet supplies store at $200k/month added this cross-check after fixing duplicate purchase events in January. They caught a second duplication issue in March within six days of it starting. A newly installed review app was reloading the confirmation page.

Previously that kind of error ran undetected for months.

Their Google Ads Smart Bidding, now training on consistent accurate values, reduced cost-per-acquisition by 22% over the following 90 days. No campaign changes. No bid adjustments.

Accurate conversion data replaced inflated signals. The algorithm did the rest.


A GA4 dashboard full of reports built on a misfiring purchase event isn’t analytics — it’s a well-formatted guess. The stores that trust their data aren’t the ones with the most reports. They’re the ones who validated the foundation before building on it.

Run the DebugView test this week. If your purchase event passes all three checks, you have a setup worth using. If it doesn’t, every report you pull until you fix it is pointing you in the wrong direction.

Fix the data first. The reports will be there when you’re ready.

The newsletter

One playbook. One metric. Every week.

Get each new playbook the day it drops — time-boxed, built on free tools, and each one names the metric it moves.

Please enable JavaScript in your browser to complete this form.
Name

No spam. No fluff. Unsubscribe anytime.