Skip to main content
ga4-auditga4dtcanalyticsserver-side-tracking

GA4 Audit Checklist for Shopify Brands: 14 Checks

Start with one number: GA4 purchases against Shopify online orders for the same 30 days. Every other check on this list explains that gap or the attribution behind it.

CTO, Marketing Bar
Updated
15 min read
Two translucent frosted-glass ledgers side by side, one emerald-lit slightly fuller than the other, evoking the gap between Shopify orders and what GA4 actually records.

A GA4 audit for a Shopify brand starts with one number: GA4 purchases against Shopify online-store orders for the same 30 days. If the two sit within a few percent, GA4 is fit to steer ad spend; if GA4 is short by 20% or more, or reports more purchases than Shopify, something in the tracking is broken. The 14 checks below are ordered so you can find out which, with the exact screens to open in GA4, Shopify, Klaviyo and Meta.

Most published GA4 checklists audit the property in isolation. This one is written for a store whose source of truth is Shopify, so it adds the checks a generic checklist skips: the order-level reconciliation, Safari cookie lifetime, Klaviyo UTMs, Meta pixel/CAPI deduplication, Shopify's thank-you page upgrade and subscription renewals. For the event and parameter reference itself, use our full list of GA4 ecommerce events; this article doesn't repeat it.

TL;DR

Key takeaways

  • Reconcile first: (Shopify online orders − GA4 purchases) ÷ Shopify online orders, same dates, same time zone. Published practitioner guides call 10–12% normal for a basic setup and 2–5% achievable; above 20% points to a configuration error.
  • GA4 showing more purchases than Shopify means duplicate tags or a missing or inconsistent transaction_id. Fix that before anything else.
  • Four of the checks below don't appear in any of the five top-ranking GA4 checklists we read (US Google, October 24, 2026): Safari cookie lifetime, Meta CAPI deduplication, Klaviyo UTMs and Shopify's thank-you page upgrade.
  • The gap decides the scope: full audit, a re-config of the settings checks, or monitoring only.

Step zero: the reconciliation number

Pull the last 30 complete days. Use a date range that ended at least 24 hours ago, because GA4 keeps processing for a while (Littledata), and make sure the GA4 property and the Shopify store use the same time zone.

  • Shopify: Orders, filtered to the date range and to the Online Store sales channel. Leave out POS, draft and manually created orders, and subscription renewals: none of them pass through a web session, so GA4 never sees them in the browser (renewals have their own check, item 13).
  • GA4: the purchase event count, or Transactions in an Exploration.
LineValueHow it's calculated
Shopify online-store orders1,000Orders report, Online Store channel only
GA4 purchases830purchase event count, same dates
Gap17%(1,000 − 830) ÷ 1,000
ReadingRe-configAbove the 10–12% "normal" band, below the 20% "configuration error" line

Illustrative numbers. The bands come from Gropulse ("A discrepancy of 10% to 12% is considered normal for most stores"; "If your gap is over 20%, you likely have a technical configuration error"; a realistic target is "within 2% to 5%") and Analytico ("A variance of under 5% indicates a healthy implementation"). Neither is a Google benchmark.

A gap never closes to zero. Ad blockers, privacy browsers and visitors who decline consent stay invisible to GA4, and some customers leave the confirmation page before the browser sends the event (Littledata). The aim is to explain the gap and keep it stable, not to erase it.

The GA4 audit checklist: 14 checks

Write down the reconciliation gap

Record the number from step zero with the date range, the Shopify filter you used and the time zone. Every fix below is judged against it: re-run the same comparison two weeks after each change. If you report to clients or a board, put the gap in your agency report template so it stays visible.

One tag per Measurement ID

GA4 → Admin → Data streams → Web → copy the Measurement ID (G-…). Then find every place that sends to it: the Google & YouTube channel, any custom pixel under Shopify Settings → Customer events, theme.liquid (legacy Universal Analytics or gtag snippets), GTM containers, and apps with their own GA4 integration (Elevar, Stape). Two senders on the same ID double-count; a sender on an old ID loses events. Running both GTM and gtag.js, or two GTM containers, is the double-counting cause named in Krish TechnoLabs' audit guide.

Property basics: retention, internal traffic, referrals

GA4 → Admin → Data collection and modification → Data retention: standard properties offer 2 or 14 months, and the setting applies to explorations and funnel reports, not to standard reports (Google). Set 14 months so year-over-year explorations work. Then define internal traffic and activate the filter. Under Data streams → Web → Configure tag settings → Show all → List unwanted referrals, add third-party payment processors your checkout hands off to — Google gives exactly this case as the example (Google). Otherwise the purchase session is credited to the processor.

Enhanced measurement

Data streams → Web → Enhanced measurement. The options are page views, scrolls, outbound clicks, site search, video engagement, file downloads and form interactions; scroll fires once per page "when a 90% vertical depth becomes visible" (Google). Confirm the ones you rely on are on, and that site search uses your store's query parameter (q on Shopify search).

Key events and one purchase action in Google Ads

Admin → Events: purchase must be marked as a key event (GA4's name for what it used to call conversions) (Google). Then in Google Ads → Goals → Conversions, check which purchase actions are Primary. During a tracking migration on one DTC account in Level, two purchase actions ran together for about two weeks, and Google Ads counted those orders twice. One Primary purchase action per account; the rest Secondary or removed.

transaction_id and server-side coverage

For web streams, "Google Analytics deduplicates purchase events with the same transaction ID" (Google). So every purchase must carry the Shopify order ID as transaction_id, in the same format from every sender. If the browser and a server container send the same order with different IDs (a suffix is enough), GA4 counts both (Analytico). For Stape, Elevar or a GTM server container, check its request logs, not only the workspace: a server container that is configured but receives no traffic looks fine in GTM.

Cross-domain measurement (if the path crosses domains)

Needed when a headless storefront, a separate landing-page domain or a booking tool sits between the visit and Shopify checkout. Admin → Data streams → Web → Configure tag settings → Configure your domains (Google). Without it, the session splits at the handoff and the purchase is credited to referral or direct. A standard Shopify store with checkout on its own domain doesn't need it.

Safari cookie lifetime

GA4's client_id lives in the first-party _ga cookie. Safari's tracking prevention deletes cookies created in JavaScript after seven days of Safari use without a visit, and also caps cookies set by a server that turns out to be a cloaked third party (CNAME or IP address) at seven days (WebKit). A returning Safari visitor after that window looks new, and the purchase loses its original source. In Safari → Develop → Web Inspector → Storage → Cookies, check the _ga expiry: about seven days means the cap applies. A server-side tagging endpoint on your own subdomain and IP range avoids it; a CNAME to a vendor's IP does not.

Consent

If the store shows a consent banner, check what GA4 does after a decline. With consent mode, tags send cookieless pings instead of storing cookies, and GA4 uses them for behavioral and conversion modeling; if tags are simply blocked until consent, there is no modeled data for those visitors (Google). Declined visitors widen the reconciliation gap either way; know which setup you have before you treat that part of the gap as a bug.

Klaviyo UTM tracking

Klaviyo → account name → Settings → Other → UTM tracking. The "Automatically add UTM parameters to links" toggle covers new campaigns and flow messages only; it "does not turn tracking on for existing messages that have it disabled" (Klaviyo). Open your highest-revenue flows and check that their links carry UTMs. Untagged email clicks land in GA4 as direct, so email looks smaller in GA4 than in Klaviyo.

Meta pixel and CAPI deduplication

GA4 isn't part of this match, but the same purchase drives Meta's bidding. Meta treats a browser and a server event as identical when the pixel's eventID equals the Conversions API event_id and the event names match (Meta). In Events Manager, open the Purchase event and check that both sources arrive and are deduplicated. When you export Meta data, count one purchase event name: in the Level account above, Meta returned the same purchase under five names (purchase, omni_purchase, offsite_conversion.fb_pixel_purchase, onsite_web_purchase, onsite_web_app_purchase), and summing them gave ROAS of 12.63× for a quarter whose real figure was 2.53×. The ROAS formula guide shows the full case; the Meta-side setup is in our Meta CAPI for Shopify article.

Shopify thank-you and order status pages

Shopify sunset checkout.liquid and additional scripts on the Thank you and Order status pages on August 28, 2025; script tags on those pages stopped for Plus stores the same day and for non-Plus stores on August 26, 2026 (Shopify, checked Oct 2026). Any purchase tracking that lived in additional scripts or a script tag on those pages no longer runs. Purchase tracking now has to come from the Google & YouTube channel, an app pixel, a custom pixel under Customer events, or a server-side integration. Place a test order and confirm one purchase reaches GA4 DebugView with the order ID.

Subscription renewals

If you sell through ReCharge, Skio, Bold or Shopify subscriptions, renewals are created without the customer in a checkout, so no browser tag fires for them. They reach GA4 only if an integration sends them server-side, for example through the Measurement Protocol, which Google describes as "intended to supplement, not replace, automatic data collection methods" (Google). Count renewal orders in Shopify for the month and compare with what GA4 received; decide whether renewals belong in GA4 revenue at all, and keep the same rule in the reconciliation.

UTM hygiene across paid, email, social and partners

Every paid campaign, email and SMS link, organic social link and affiliate or influencer link should carry utm_source, utm_medium and utm_campaign, with a distinct source per partner. GA4's channel grouping is built from these values; missing UTMs inflate direct.

What the top-ranking GA4 checklists cover and miss

We read the pages ranking for "ga4 audit checklist" on US Google (desktop, October 24, 2026, DataForSEO snapshot). The snapshot held 9 organic results: one audit tool, one YouTube video, one tools page, and six written checklists, of which one (Finalsite) blocked our fetch. The five we read in full:

CheckLinkedIn (45 items)Nice Looking Data (23)Krish TechnoLabs (24)Optizent (25)Analytics Mates (AI clean-up)Covered by
Reconcile against backend ordersyesnogeneralnono2 of 5
Data retention 14 monthsyesyesyesyesno4 of 5
Internal traffic / unwanted referralspartialyesyespartialyes5 of 5
Consent modeyesyesyesnono3 of 5
Cross-domainyesyesyesyesno4 of 5
Subscription renewalsyesnononono1 of 5
Safari cookie lifetimenonononono0 of 5
Meta pixel/CAPI dedupnonononono0 of 5
Email (Klaviyo) UTMsnonononono0 of 5
Shopify-specific stepsnonononono0 of 5

Five GA4 checklists ranking for "ga4 audit checklist", read October 24–26, 2026. Source: DataForSEO SERP snapshot (US, desktop, n=9 organic) and our reading of each page.

The property-level basics are well covered elsewhere, so items 3 and 4 above stay short. The published checklists stop at the store-level checks: what happens between a Shopify order and the number GA4 and the ad platforms report.

GA4 is one part of the tracking review

The GA4 audit is the first step of a GA4 + tracking setup engagement, and it is also part of the tracking-side review in our free PPC audit. The Meta side (pixel, CAPI and Shopify's customer events) is covered in our Meta CAPI for Shopify article; once those events are clean, they feed your Facebook ads reporting. The organic-search equivalent of this review is our SEO audit service for DTC brands. For how GA4 fits with the rest of a store's data, see our guide to ecommerce analytics for DTC, and for the analysis that BigQuery export makes possible across channels, our piece on marketing data analytics for DTC.

A wrong GA4 number travels: Smart Bidding optimizes toward the key events it imports, audiences are built from the events it receives, and the same gap ends up in client decks. It is one of the reasons agency client reports drift from reality.

After the fixes

Re-run the step-zero comparison with the same filter two weeks after each change and keep the log: date, change, gap before, gap after. A fix that doesn't move the gap was aimed at the wrong cause. Once the gap is stable under 5%, switch to monitoring: an alert on the gap and on daily GA4 purchase volume catches a broken tag within a day. If you're choosing a tool for that, our guide to ecommerce analytics software covers the options. If the gap stays above 20% after the re-config items, that's the point to bring in a Google Analytics agency.

CRO testing depends on clean GA4 data too. Our Shopify conversion rate optimization guide for how to prioritize experiments once the data is clean. For the broader case on why a DTC brand should run CRO as a standing practice rather than an occasional test, our conversion rate optimization agency for DTC brands article covers scope and cadence.

One Level account and five checklists behind the figures

The five Meta event names and the 12.63× vs 2.53× ROAS come from one anonymized DTC brand's Meta Ads and Google Ads accounts connected to Level, read from the platform APIs for Q3 2026. The double-counted Google Ads purchases happened during a tracking migration on the same account. They describe one store and say nothing about how common these gaps are. The checklist comparison is our reading of each written checklist in the DataForSEO snapshot above; "partial" means the page mentions the topic without the specific check. The reconciliation table uses illustrative numbers, with the bands quoted from the linked practitioner guides. Settings paths and platform behavior follow the Google, WebKit, Shopify, Klaviyo and Meta documentation linked in each item, checked October 2026.

Written by

CTO, Marketing Bar

Drives technical strategy across the agency — measurement, attribution, automation, and the AI tooling that keeps us ahead of platform changes.

Share