TrackCheck › Blog

GA4 not tracking Shopify purchases? A step-by-step fix

A practical repair guide for when GA4 shows zero purchases, or far fewer than Shopify. Find the break, fix it and prove it works.

By TrackCheck · Updated 15 October 2026 · 4 min read

Your Shopify dashboard shows orders coming in, but GA4's Monetisation reports are empty or way too low. This guide is the hands-on fix. (If GA4 tracks purchases but the totals just don't line up, start with why GA4 revenue doesn't match Shopify orders instead.)

The cause is almost always the same. Purchases happen on Shopify's checkout, and checkout doesn't run your theme code. Tracking has to reach checkout through an app pixel or a custom pixel, and that's where setups break.

Step 1: Confirm what's actually happening

  1. In GA4, open Reports › Realtime (or Admin › DebugView).
  2. In a private window, accept all cookies on your store and place a test order. A 100% discount code or Shopify's test payment mode keeps it free.
  3. Watch for a purchase event.

There are three possible results:

Step 2: Find out how GA4 is installed

There are three common routes. Many stores have more than one by accident.

RouteWhere to lookTracks checkout?
Shopify's Google & YouTube appSales channels / AppsYes, via an app pixel
Custom pixelSettings › Customer eventsYes, if coded correctly
GTM or gtag in theme.liquidOnline Store › Themes › Edit codeNo, theme code doesn't run on checkout

One more place to check: the old order-status page "Additional scripts" box. Shopify has been moving stores off legacy checkout scripts onto Checkout Extensibility. Purchase tracking that lived there stops working once a store is upgraded, and this is one of the most common reasons GA4 purchases suddenly drop to zero.

Step 3: Fix the purchase tracking

Option A: Google & YouTube app (simplest)

  1. Open the app and check it's connected to the right GA4 property. The measurement ID (G-XXXXXXX) should match GA4 › Admin › Data streams.
  2. Remove other GA4 installs (theme code, GTM GA4 tags, GA4 custom pixels), or you'll swap "missing" for "duplicated".
  3. Place another test order and check DebugView.

Option B: a custom pixel

If you need more control, go to Settings › Customer events › Add custom pixel. Custom pixels subscribe to Shopify's standard events. The purchase event is checkout_completed. Here's a minimal sketch, to be checked against Shopify's current Web Pixels API reference before you use it:

const s = document.createElement('script');
s.src = 'https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX';
document.head.appendChild(s);
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXX', { send_page_view: false });

analytics.subscribe('checkout_completed', (event) => {
  const c = event.data.checkout;
  gtag('event', 'purchase', {
    transaction_id: c.order?.id,
    value: c.totalPrice?.amount,
    currency: c.currencyCode,
    tax: c.totalTax?.amount,
    shipping: c.shippingLine?.price?.amount,
    items: c.lineItems.map(li => ({
      item_id: li.variant?.product?.id,
      item_name: li.title,
      price: li.variant?.price?.amount,
      quantity: li.quantity
    }))
  });
});

Custom pixels run in a sandbox, so values like the page URL can look different from your storefront. Consider passing page_location from event.context.document.location.href. GTM Preview mode won't see a custom pixel, so test with DebugView and the Network tab.

Not sure what your store fires before consent?

Send us your URL and we'll run a free homepage pre-consent scan: which trackers and cookies load before a shopper chooses. No obligation.

Get my free scan Use the free checklist

Step 4: Check consent isn't blocking everything

Each custom pixel and app pixel respects Shopify's Customer Privacy API. That's correct behaviour: visitors who reject analytics shouldn't be tracked. But misconfiguration can block everyone:

If purchases appear only when you accept, consent is working. The remaining gap is the visitors who decline, which is expected. See our Shopify cookie banner guide for banner settings.

Step 5: Make sure revenue is recorded

GA4 needs both value and currency on the purchase event to record revenue. If currency is missing, revenue won't be counted properly. In DebugView, click the purchase event and check:

Step 6: Check the GA4 property

Step 7: Prove it with a reconciliation

A few days after the fix, compare GA4 transactions with Shopify Online Store orders, day by day. Then match transaction IDs against your order export. You should see a steady capture rate, with no sudden drops and nothing over 100%. If GA4 now shows more purchases than Shopify, you've got duplicates. Our duplicate purchase events guide covers that.

Quick checklist

Want it checked properly?

The TrackCheck Health Check is a fixed-price review for UK Shopify and WooCommerce stores: a full consent test (before choice, after "Reject all", after "Accept all", including Consent Mode v2 signals), a GA4-vs-orders reconciliation, a prioritised fix list and a recorded walkthrough, delivered in 5 working days.

See Health Check pricing Start with a free scan

This article is technical guidance, not legal advice. Platform menus change; check the vendor's current documentation if a setting has moved.