Tracking integrity for Shopify

Know when your Shopify tracking stops recording sales.

CommerceTrace runs a real checkout through your store, watches every step of the funnel report itself, and matches your Shopify orders against what analytics actually received — then tells you which handover lost the signal.

Private beta · no credit card Read-only No customer personal data

Here is where the evidence ends Suspected

Four orders in a row, within about an hour, that never reached your analytics. The pattern is unusual enough to investigate.

Proven
Your website sent the sale
Evidence ends
After that, nothing could be confirmed
Not observed
No sale ever reached Google Analytics

The problem

Noticing the numbers disagree is easy.
Knowing why is the hard part.

Shopify says one thing. GA4 says another. Your ads platform says a third. Every dashboard is confident, and none of them tells you which step in between stopped working — or whether anything is broken at all.

Question 01

Is it actually broken? GA4 takes hours to process, reports the item subtotal rather than the total, and converts currency. Several differences are supposed to be there.

Question 02

Since when? A theme update, an app install, or a container publish can break tracking silently. The reports keep rendering, just with less in them.

Question 03

Which step failed? The order exists. Somewhere between the checkout and Google's servers the event stopped. Knowing which link failed is the difference between a fix and a week of guessing.

Why it matters

Bad tracking doesn't just misreport.
It changes what you decide.

Every bidding algorithm, budget decision and channel comparison you make runs on the conversions your tracking reported. When those are wrong, the decision is wrong — and nothing in the report looks broken.

Same store · same 7 days

Shopify recorded 7 orders
Analytics recorded 3 sales
Not represented 119.96 USD

Four sales that happened, and that no report will ever show. This is a measurement gap — not money CommerceTrace recovers.

When purchases go missing
  • Reported conversion volume understates what actually sold
  • ROAS looks worse than it is, on channels that are working
  • Ad platforms optimise on an incomplete conversion signal

You cut budget on a campaign that was profitable.

When purchases duplicate
  • Revenue and conversion counts read higher than reality
  • ROAS looks strong on channels that are not performing
  • Bidding optimises toward numbers that were never real

You scale spend into a campaign that was losing money.

Trace the signal

A sale has to survive four handovers before it becomes a number.

CommerceTrace runs a real checkout on your store and watches each handover report itself. Where it can prove a step worked, it says so. Where the evidence runs out — and inside Shopify's checkout it sometimes does — it says that instead of guessing.

  1. Shopify order

    Order confirmed paid. This is the ground truth every other stage is measured against.

  2. Customer event

    The checkout reached the thank-you page and the purchase event was emitted.

  3. Data Layer

    Event present with transaction ID, value, currency, tax and shipping.

  4. Google Tag Manager

    Shopify's checkout runs tags in a sealed sandbox, so whether the tag ran cannot be seen from outside. This step is honestly marked unknown.

  5. Google Analytics

    No sale ever arrived. This is observed directly, not inferred.

Proven The sale reached your website's tracking Evidence ends Everything after that is unproven — so we do not blame it

What it finds

The faults that quietly cost you measurement.

Each of these is a distinct check with its own evidence and its own confidence grade. Every one has been reproduced against a real store by deliberately breaking tracking, detecting the break, and restoring it.

DUPLICATE_IN_GA4

Purchases counted twice

Two independent fires for one order — commonly a container tag alongside a hardcoded snippet. Revenue and conversions inflate, and bidding optimises toward numbers that were never real.

WRONG_VALUE · VALUE_MATCHES_TOTAL_NOT_SUBTOTAL

The wrong number reported

GA4 receives a value that does not match the order. A frequent cause is sending the grand total where Google expects the item subtotal, which inflates every revenue figure by tax and shipping.

MISSING_IN_GA4

Purchases that never arrive

Shopify confirms the order; no GA4 purchase carries a matching transaction ID. Reported revenue and conversion counts silently understate what actually sold.

WRONG_CURRENCY

Currency reported incorrectly

The customer was charged in one currency and GA4 was told another. Distinguished from GA4's own reporting-currency conversion, which looks identical in a report and is not a fault.

MISSING_ITEMS

Purchases with no items

Revenue arrives correctly but the ecommerce item array is empty. Product-level reporting and any audience built on items stop working, while the revenue total looks perfectly healthy.

FUNNEL_EVENT_NOT_OBSERVED

Funnel steps that never fire

A shopper demonstrably viewed a product, added to cart, or began checkout, and no matching GA4 event followed. Sales figures are unaffected; funnel reports and remarketing audiences quietly stop filling.

After the fix

One good day is not proof. Two in a row is.

The hardest question after a tracking fix is whether it actually worked. A single clean result can be luck. CommerceTrace keeps the issue open until it has seen the problem stay fixed twice in a row.

  1. Issue found Sales are not being reported
  2. Fix seen A later check comes back clean
  3. Verifying Still open — one clean result is not enough
  4. Resolved Two clean results in a row. Now it is closed.

And if it breaks again later, the issue reopens rather than quietly staying green.

Run on Tuesday Purchase tracking healthy
Theme update · app install · container publish
Run on Thursday Purchase events stopped arriving
Regression

Something that worked on Tuesday does not work now. Because the earlier run proved it healthy, the change is the evidence — you know it broke, and roughly when, without reconstructing it from a report.

Today this is run-to-run comparison. You run a check and it compares against the last one. Scheduled unattended checks and alerting are the next thing being built — they do not exist yet, and this page will not pretend they do.

Evidence, not guesses

Six questions between a sale and a number.

Every sale has to clear each of these before it becomes a figure in a report. CommerceTrace asks all six, and answers the last one honestly.

  1. Did Shopify record the sale? Yes
  2. Did your website notice it? Yes
  3. Was the sale handed on with the right details? Yes
  4. Did your tag manager run? Can't see
  5. Did it reach Google Analytics? No
  6. So — is this broken, or just unproven? Suspected

The fourth answer is the one that matters. Shopify runs checkout tags in a sealed sandbox, so we cannot watch your tag manager work — and we will not pretend we can. The sale is missing, that much is certain. Blaming the step we could not see would send you to fix the wrong thing.

What each verdict means

Confirmed

The evidence shows the problem directly.

The mechanism is observable and no benign explanation fits.

A GA4 purchase exists for the order and reports a value that cannot be reconciled with Shopify by tax, shipping, discounts, or currency conversion.

Suspected

The evidence points one way, the mechanism is unproven.

Strong enough to act on, not strong enough to assert.

An order fifteen hours old with no GA4 purchase. Very likely a real gap — but Google does not guarantee when processing finishes, so it is not stamped confirmed yet.

Inconclusive

Judging would mean guessing, so it doesn't.

The reason is named, so you know what would settle it.

An order placed twenty minutes ago, or one whose transaction ID Google grouped into an (other) row. Neither absence proves anything.

Expected

A difference, and a reason it belongs there.

Not every gap is a fault. Most of them are not.

GA4 reporting in USD while the customer paid in CAD. The values differ by exactly that day's exchange rate — the tracking is working correctly.

It would rather say “I don't know yet” than say “this is broken” and be wrong.

The product

Every finding opens into the evidence behind it.

Findings are written for the person who has to decide whether to act — what happened, what it affects, and what to check next — with the technical classification kept one click away rather than in the headline.

The Issues view. A funnel health finding reads add_to_cart is not reaching GA4, marked warning with medium confidence. Below it a table lists orders #1001 to #1004, each Missing In GA4 with status suspected, severity error, value 29.99 USD and medium confidence, followed by a possible incident window covering all four orders totalling 119.96 USD.
Findings list — funnel health and order-level reconciliation, each graded by confidence.
A finding detail page titled add_to_cart is not reaching GA4. It lists the affected funnel stage, issue status, recovery verification, severity and confidence, above a section headed What this means for your advertising explaining that the step is not being recorded in GA4 even though shoppers perform it, and that sales figures are unaffected.
Finding detail — the advertising consequence stated before the technical reason code.

What it can reach

The least access that can answer the question.

A diagnostic tool should not be able to do more than diagnose. Everything below is a limit of what the software can do, not a policy it promises to follow.

Read only

It cannot change your store.

One Shopify scope: read_orders. The client issues read queries exclusively — there is no write path in the code to reach.

No theme edits. No tag changes. No Google Tag Manager container writes.

No customer data

It never asks who bought.

The order query requests no name, email, phone, or address, which keeps it at Shopify's protected customer data Level 1.

Order numbers, amounts, currencies, timestamps and line items. Nothing that identifies a shopper.

Revocable

You grant it, and you can take it back.

Google access uses one read-only scope through Google's own consent screen. No service account to create, nothing to paste.

Revoke from your Google account at any time, or disconnect here — which revokes it at Google too.

How it works

Four steps, and you keep control of all of them.

  1. We set up your access

    During early access we connect your store with you: read-only Shopify orders, and Google Analytics through Google's own consent screen using your account. Nothing to install, nothing to paste.

  2. Your real orders are checked

    Every order in the period is matched against what Google Analytics recorded — allowing for the several ways Google may have stored the order number.

  3. A real checkout is run

    To see how sales are reported now, CommerceTrace shops your store the way a customer does and watches each step of the journey report itself.

  4. You get a graded finding

    Each result says how sure it is, what it affects, and the one specific thing worth checking next.

Who it's for

Anyone who has to defend a number.

Shopify merchants

You can see that GA4 is missing sales you know happened. You need to know whether it is a real fault and what to send your developer.

Performance marketers

Bidding optimises toward the conversions it is fed. Duplicated or missing purchases distort spend long before anyone notices the reports look odd.

Agencies

Prove tracking was intact when you handed it over, and catch a client's theme update breaking it before the monthly report does.

Ecommerce and data teams

Reconcile the storefront against the warehouse with a defined verdict vocabulary rather than a spreadsheet and an argument.

For agencies

You cannot manually audit every client store every week.

So tracking breaks are found by the client, in a monthly report, weeks after the theme update that caused them. The useful question is not "is everything fine" — it is "which two stores should I look at today".

39 Healthy
2 Needs attention
1 Confirmed broken

An illustration of the shape, not a live screen. Portfolio view is planned; today CommerceTrace checks one store at a time.

Prove it worked at handover

A graded result on the day you shipped is a record you can point at when tracking breaks three months later.

Catch it before the client does

Finding a break yourself and reporting it is a very different conversation from being told your reporting is wrong.

Send a developer one specific thing

"Tracking is broken" costs a week. "The purchase event is not reaching GA4, and here is the evidence" costs an afternoon.

Questions

Shopify and GA4 tracking, answered.

Why don't my Shopify and GA4 revenue numbers match?

Some difference is normal and expected. GA4 reports the item subtotal rather than the order total, converts into the property's reporting currency, takes hours to finish processing, and drops events entirely when a shopper declines analytics consent.

Beyond that, the common causes are purchase events that never fire, events that fire twice, and events that report the wrong value. CommerceTrace separates the explainable differences from the real faults, and names which one applies to each order.

Six reasons a tracking tool reports a fault that isn't there →

How do I find missing purchase events in GA4 on Shopify?

Take each Shopify order and look for a GA4 purchase carrying a matching transaction ID — allowing for the fact that GA4 may hold the order name, the order ID, or the confirmation number. An order with no match after GA4 has finished processing is a genuine gap.

CommerceTrace runs that comparison for every order in the window, then traces the chain — customer event, Data Layer, Google Tag Manager, GA4 request — to show how far the signal travelled before it stopped.

What causes duplicate purchase events on Shopify?

Usually the same purchase tag firing from more than one place: a GA4 tag in Google Tag Manager alongside a hardcoded gtag snippet in the theme, a duplicated tag or trigger, or a thank-you page a shopper reloads.

Duplicates inflate revenue and conversion counts. CommerceTrace distinguishes two genuinely independent fires from one event observed twice through transport retries or reporting aggregation, and only calls the first case a duplicate.

Does CommerceTrace change anything in my store?

No. It requests the read_orders scope only, and its Shopify client issues read queries exclusively — there is no write path in the code. GA4 is read through the Data API using read-only access you grant with your own Google account.

It never edits your theme, your tags, or your Google Tag Manager container.

Does it read my customers' personal data?

No. The Shopify query requests no customer name, email, phone, or address, and the GA4 reports it runs are aggregate and carry no user-level identifiers.

It reads order numbers, amounts, currencies, timestamps, and line items — what is needed to reconcile an order against an analytics event, and nothing more. See the privacy policy for the full inventory.

What does an inconclusive result mean?

That the evidence does not support a verdict, and that saying so is more useful than guessing. An order placed twenty minutes ago with no GA4 data yet is not missing — GA4 has not finished processing it.

If Google groups transaction IDs into an (other) row, samples the report, or applies thresholding, a specific order cannot be confirmed absent. In each case the result is inconclusive and the reason is named, rather than a false alarm being raised.

Do I need Google Tag Manager to use it?

No. The Shopify-to-GA4 reconciliation works regardless of how your tracking is implemented, because it compares two records of the same sale rather than inspecting your setup.

Google Tag Manager appears in the tracking chain because it is where breaks most often occur on Shopify stores. If you do not use it, that stage simply is not part of your chain.

See what a check turns up on your store.

CommerceTrace is in private beta. We set the connection up with you, run a check against your real orders, and walk you through what the comparison found — before any of it costs you anything.

The request takes one line each:

  • Your email
  • Your store URL
  • What you use for tracking optional
Request a free audit

Opens your mail app with those lines ready.

Private beta · no credit card · read-only access you can revoke at any time.

The first audit is free. CommerceTrace will be a paid product after the beta — pricing is not set yet, and beta participants will hear it from us before anything changes.