If your GA4 numbers don’t match what your gut tells you about which channels are actually driving sales, you’re not alone. It’s one of the most common support requests we see from Shopify merchants, GA4 shows revenue, but the source/medium breakdown looks wrong, “(direct)” traffic is inflated, and Google Ads conversions don’t line up with what GA4 is reporting.
Most of the time, the problem isn’t GA4 itself. It’s how it was connected to Shopify in the first place, half-finished setups, duplicate tracking, or gaps in how Shopify’s checkout hands data back to Google.
This guide walks through setting up GA4 as a genuine source of truth for a Shopify store: creating the property and data stream correctly, choosing between Shopify’s native Google integration and manual tracking, marking the right events as conversions, and avoiding the attribution traps that quietly corrupt reporting for months before anyone notices.
Start with the right GA4 property structure
Before touching Shopify, get the GA4 side right.
- In your Google Analytics account, create a new property (Admin > Create Property). Give it a name that clearly identifies the store, especially if you run multiple brands or regional storefronts.
- Set the reporting time zone to Australian Eastern Standard/Daylight Time (or your store’s actual time zone) and the currency to AUD. Getting this wrong at setup means historical reports never quite line up with your Shopify admin figures later.
- Create a web data stream for your storefront domain (Admin > Data Streams > Add stream > Web). This generates your Measurement ID (formatted like G-XXXXXXX), which is what Shopify needs to send data to GA4.
- While you’re in the data stream settings, turn on Enhanced measurement for things like scroll tracking and outbound clicks, but be aware that Shopify’s native integration handles ecommerce events separately, so this is mostly for supplementary engagement signals, not your core purchase funnel.
One property per store is the standard approach. If you run separate storefronts for different countries or brands, use separate properties (or at minimum separate data streams) rather than merging everything into one, it keeps attribution and conversion data clean per storefront.
Connect Shopify to GA4 the right way
This is where most of the confusion starts, because Shopify has changed how tracking works more than once, and a lot of guides online are written against outdated methods.
The current recommended method is Shopify’s native Google & YouTube channel app, available free from the Shopify App Store. Once installed, it walks you through linking your Google account and connecting your GA4 property directly, no code required. This is the method Shopify actively supports going forward, because it uses Shopify’s server-side and checkout-integrated event pipeline rather than a client-side script bolted onto your theme.
Here’s why that matters: Shopify deprecated adding tracking scripts to checkout.liquid or the “Additional scripts” box in checkout settings. Checkout pages now run on Shopify-hosted checkout infrastructure that doesn’t allow arbitrary third-party JavaScript the way older self-hosted checkouts did. If you’re on a theme still referencing “Additional scripts” for GA4, that method is on its way out (or already unavailable), it shouldn’t be your long-term tracking foundation.
For teams that need custom event tracking beyond what the native app sends, a “wishlist add” event, a custom form completion, a loyalty sign-up trigger, the supported path is Shopify’s Web Pixels API via a custom pixel (Settings > Customer events in Shopify admin), or a checkout UI extension on Shopify Plus. Web Pixels run in a sandboxed context Shopify controls, which is more restrictive than old script injection but also more stable, it survives checkout updates instead of breaking every time Shopify ships a change.
Setup checklist: connecting GA4 to Shopify
- [ ] Install the Google & YouTube channel app from the Shopify App Store
- [ ] Link your Google account and select (or create) the correct GA4 property
- [ ] Confirm the connection status shows “Connected” under the app’s dashboard, not just “Pending”
- [ ] Check Shopify admin > Settings > Customer events to see what’s firing, this is also where any custom pixels you add via the Web Pixels API will appear
- [ ] Remove any legacy GA4 tags left over in checkout scripts or theme.liquid from a previous setup
- [ ] Test a full purchase in a test order (or a $1 test product) and confirm the event appears in GA4 Realtime reports
What the native integration sends automatically
Once connected properly, Shopify’s native Google channel integration sends GA4’s standard enhanced ecommerce events automatically, without any extra configuration:
view_item, when a customer views a product pageadd_to_cart, when a product is added to the cartbegin_checkout, when the customer starts the checkout processpurchase, when an order is completed, including transaction ID, value, currency, items and (where available) coupon data
This event set maps to GA4’s standard ecommerce reporting, which means your Monetisation reports, funnel exploration, and item-level performance data populate correctly without custom event mapping. It’s genuinely one of the better native ecommerce integrations available for any platform, you don’t need a tag management platform just to get baseline purchase tracking working.
What it doesn’t give you automatically: richer behavioural events like view_cart, filter/sort interactions, or on-site search terms. If those matter for your reporting, that’s what the Web Pixels API custom pixel setup is for, but treat it as an addition to the native integration, not a replacement.
Marking key events (conversions) in GA4
GA4 doesn’t treat every event as a conversion by default. You need to explicitly mark the events that represent real business value.
Go to Admin > Events, find purchase in the list, and toggle it on as a key event (GA4’s current term for what used to be called a “conversion”, you’ll see both terms depending on which part of the interface you’re in). For most Shopify stores, purchase is the only event that truly needs to be a key event, since it’s tied to actual revenue.
Some stores also mark begin_checkout or a custom “high-intent” event (like a click on a WhatsApp or phone contact link for B2B stores) as a secondary key event, which is reasonable if your sales cycle isn’t purely on-site checkout. Be selective, marking too many low-value events as key events dilutes what “conversion rate” means in your reporting and makes it harder to read at a glance.
Cross-domain tracking: does this apply to your store?
For most standard Shopify and Shopify Plus stores, checkout runs on the same root domain as your storefront, and Shopify’s native integration handles the session continuity for you, you don’t need to manually configure cross-domain measurement.
Where it becomes relevant is if you’re running a headless or composable setup, where the storefront sits on a separate domain or subdomain from Shopify’s checkout, or if customers pass through a third-party domain (a landing page builder, a separate quiz or configurator tool) before reaching checkout. In those cases, configure cross-domain measurement in GA4 (Admin > Data Streams > your stream > Configure tag settings > Domains) to list every domain in the customer journey, otherwise GA4 treats the handoff as a new session with a new (often self-referral) source.
If your architecture is headless, this is worth getting a specialist to check rather than guessing, it’s easy to have this half-working, where tracking fires but sessions fragment, without realising it for months.
Consent mode and Australian privacy expectations
Australia doesn’t have a GDPR-equivalent law mandating a cookie banner the way the EU does, so plenty of Australian Shopify stores run without one. That said, a few things are worth building in as good practice, especially if you sell into the EU or UK too:
- If you use a consent management platform (via a Shopify app or custom implementation), make sure it’s configured to work with Google Consent Mode, so GA4 adjusts its measurement behaviour based on what the customer consents to, rather than either over-collecting or breaking entirely when consent is declined.
- Review your Privacy Policy page to accurately describe that GA4 and any ad platforms are in use, this is about the Australian Privacy Act’s transparency expectations around data collection, not a specific cookie-consent mandate.
- If you’re a Shopify Plus merchant selling into the EU/UK, Consent Mode isn’t optional in the way it can feel optional for an AU-only audience, get it configured properly rather than bolting it on later.
The attribution pitfalls that quietly wreck your data
These are the issues we see most often when reviewing GA4 setups for Shopify merchants who booked a GA4 tracking review because “the numbers don’t add up.”
Self-referral from payment gateway redirects
Customers who pay via PayPal, Afterpay, Zip or a similar redirect-based gateway briefly leave your domain to authorise payment, then return to complete the order. If GA4 doesn’t recognise that returning domain as part of the same session, it can log a new session with “self-referral” as the source, the payment gateway’s domain shows up as a referral source in your channel reports, and the original marketing channel that actually drove the sale gets lost.
The fix: make sure payment gateway domains are in your referral exclusion list (Admin > Data Streams > your stream > Configure tag settings > List unwanted referrals). Shopify’s native integration handles common gateways reasonably well out of the box, but check this list periodically, especially after adding a new payment method like Afterpay or Zip.
Double-counting from a manual tag plus the native app
This is the single most common issue we find: a store has the native Google & YouTube channel app correctly sending purchase events, and a leftover manual GA4 tag from an old Google Tag Manager setup, both firing on the same order. The result is purchases counted twice and revenue inflated, until someone reconciles GA4 revenue against actual Shopify order totals and finds a mismatch.
To check: open GA4 Realtime, place a test order, and watch how many purchase events fire. One event, one transaction ID is correct. If you see two events for the same order, you have a duplicate source and need to remove one, almost always the older manual tag.
Inconsistent UTM tagging across campaigns
This isn’t a Shopify-specific issue, but it hits Shopify merchants constantly: email campaigns, paid social, and influencer links without consistent UTM parameters all get bucketed into generic channels like “Organic Social” or “(direct)” instead of attributing correctly to the specific campaign. Build a simple UTM naming convention before you launch campaigns, not after, retrofitting historical data isn’t possible.
Feeding GA4 into Google Ads conversion import
Once purchase is correctly marked as a key event and firing exactly once per order, you can import it into Google Ads as a conversion action (Google Ads > Tools > Conversions > + New conversion action > Import > Google Analytics 4 properties). This is generally the more reliable long-term approach compared to running a separate, parallel Google Ads conversion tag, because it inherits GA4’s deduplication and attribution logic rather than adding a second independent tracking layer that can itself double-count.
A few things to check once it’s connected:
- Confirm the imported conversion shows the correct conversion value (order revenue), not just a count
- Set the correct attribution model in Google Ads for the imported conversion (data-driven attribution is the current default and generally the most useful for stores with reasonable order volume)
- Watch for a conversion lag between the click and the import appearing in Google Ads, it’s not instant, and panicking over a 24-48 hour reporting delay is a common false alarm
Getting this chain right, GA4 property, native Shopify integration, clean key events, and a clean Google Ads import, is what turns GA4 from “a dashboard nobody trusts” into an actual decision-making tool for where your marketing budget should go.
When to bring in a specialist
If you’ve read this far and you’re not confident your current setup matches it, particularly around duplicate tracking or self-referral, that’s worth investigating properly rather than guessing. A structured Shopify GA4 tracking setup review checks the data stream configuration, confirms events are firing exactly once, validates the payment gateway referral exclusions, and reconciles GA4 revenue against your actual Shopify order data so you know the numbers you’re reporting on are real.
FAQ
Do I still need Google Tag Manager if I use Shopify’s native Google & YouTube app?
Not for standard ecommerce tracking, the native app sends view_item, add_to_cart, begin_checkout and purchase without GTM. You’d only add GTM (via a custom Web Pixel) if you need custom events the native integration doesn’t cover, and even then, plenty of stores manage this through the Web Pixels API directly without a full GTM implementation.
Why does GA4 show different revenue to my Shopify admin?
The most common causes are duplicate purchase tracking (a manual tag plus the native app both firing), test orders that weren’t filtered out, or a timezone/currency mismatch between the GA4 property settings and your store settings. Reconciling a sample of individual orders against their GA4 transaction IDs is the fastest way to isolate which one is happening.
Is Shopify’s native GA4 integration good enough, or do I need custom tracking?
For most stores, the native integration covers the core purchase funnel well and is the right foundation. Custom tracking via the Web Pixels API becomes worthwhile once you need behavioural detail beyond the standard four events, for example, on-site search tracking, filter usage, or loyalty program interactions.
Can I add GA4 tracking directly to checkout.liquid?
No, Shopify has moved away from allowing arbitrary script injection into checkout pages for most stores, in favour of the native app and the Web Pixels API / checkout UI extensions. If you find an old guide recommending checkout.liquid script edits, treat it as outdated.
How long after connecting GA4 should I trust the data?
Realtime reports confirm events are firing correctly within minutes. For trend reporting and channel attribution, give it at least 1-2 weeks of live data before drawing conclusions, since GA4’s data-driven attribution model needs a reasonable volume of conversions to model channel contribution accurately.
If you’d rather have someone confirm your setup is clean before you start making budget decisions off it, book a call with our team or start with a Shopify audit that includes a tracking review.