Get free audit →

Home / Blog / GA4 Purchase Firing Twice

Shopify · Tracking Troubleshooting

GA4 Purchase Event Firing Twice on Shopify: What to Check

If GA4 shows more purchases than Shopify, or the same transaction appears twice, the fix is not to delete random tags. You need to identify every path sending `purchase` to the same GA4 property and decide which one owns the event.

Short answer: A GA4 purchase event usually fires twice on Shopify when the same order is sent by two sources: the Google & YouTube app, GTM, a hardcoded gtag, a Customer Events pixel, Elevar/server-side tracking, or an old checkout script. GA4 can use `transaction_id` to reduce duplicate purchase reporting, but you should still remove or demote the duplicate source instead of relying on cleanup after the fact.

Keyword target

Key takeaways

Start by listing every GA4 sender

Do not start inside GA4. Start in Shopify. A single store can have GA4 installed through the Google & YouTube app, Google Tag Manager, theme code, a custom pixel, Elevar, Littledata, Analyzify, Stape/sGTM, or another app. Littledata’s duplicate tracking guide lists Google & YouTube Sales Channel, GTM, gtag in theme, custom web pixel, and third-party apps as common lingering sources.

Common duplicate patterns

The most common pattern is installing the Google & YouTube app for GA4 while an older GTM or theme implementation is still active. Another common pattern is enabling Elevar GA4 server-side while leaving native GA4 purchase active in the same property.

Duplicate pattern Impact Fix
Google & YouTube app + GTM GA4 purchase purchase appears twice disable one source
Elevar GA4 + native Shopify GA4 two purchase paths choose one source of truth
theme gtag + Customer Events pixel page/session and events duplicate remove old theme tag
old Additional Scripts + Web Pixel purchase repeats on thank-you remove legacy checkout script
browser + server with different transaction_id dedupe fails send stable transaction_id

Competitor/tool context

Elevar, Littledata, Analyzify, and Stape can all improve data quality, but each must be implemented as part of a clean ownership model. Adding a server-side tool on top of an existing native setup without removing the old purchase path often makes the dashboard worse, not better.

Diagnostic workflow

  1. Export Shopify orders for the test date range.
  2. Compare GA4 transaction count to Shopify order count using the same timezone.
  3. Search Shopify theme for gtag, GTM, G-, AW-, and purchase code.
  4. Open Customer Events and list all pixels.
  5. Open Google & YouTube app and check GA4 measurement settings.
  6. Open Elevar/Littledata/Analyzify/Stape settings and check GA4 destination.
  7. Run one test order and record transaction_id in every destination.
  8. Disable or demote duplicate sources one at a time.
  9. Wait for GA4 processing, then compare again.

What not to do

TrackingAudit validation checklist

Need the tracking checked before scaling?

TrackingAudit can compare Shopify orders against the active event stack and show which system is missing, duplicating, or misattributing purchases.

Get your free audit →

Frequently asked questions

Why does GA4 show duplicate purchases?

Usually because more than one tool sends the purchase event to the same GA4 property.

Can transaction_id fix it?

It helps only when the same stable transaction_id is present and GA4 can recognize the duplicate. You should still remove the duplicate sender.

Is the Google & YouTube app the problem?

Not always. It becomes a problem when it runs alongside GTM, Elevar, or another GA4 purchase source without a source-of-truth decision.

Should I create a new GA4 property?

Only as a last resort or controlled rebuild. First identify the duplicate source.

Sources