Your Shopify admin shows an order. Your GA4 purchase report does not. The customer paid, the money is there, and the ad that brought them looks like it did nothing. If you run a store where buyers pay through a bank link or another payment provider that sends them away from checkout, this is a known pattern, not a mystery.
This post explains where the gap comes from, how to confirm it on your own store, and how Hitsteps handles the order side of it. It does not promise to close every gap, and it says so where it can’t.
What the gap looks like
A merchant in a recent r/GoogleAnalytics thread described it like this: the customer picks a bank link, pays at the bank, and closes the tab. Shopify gets the payment and creates the order. GA4 never records a purchase. Several European stores seem to see it with off-site payment methods, and the missing orders tend to share one payment method.
You will usually notice it in one of three ways:
- Shopify reports more orders than GA4 for the same week.
- Ad platforms show fewer conversions than your real sales for one campaign or one country.
- A payment method looks like it “never converts” in GA4, even though it brings paid orders in Shopify.
Why GA4 misses these orders
GA4’s purchase event normally fires in the browser, when the buyer loads the order confirmation page. That is the moment your tag runs, sends the transaction, and attributes it to the visit.
With an off-site payment, the buyer leaves your checkout, pays elsewhere, and is supposed to come back. If they close the tab after paying, or the provider does not redirect them back, the confirmation page never loads in their browser. Shopify still gets the payment confirmation from the provider, so the order exists. But no browser ever ran your tag, so GA4 has nothing to record.
Other things can also remove purchases from GA4 and stack on top of this: visitors who decline analytics consent, ad blockers, and tags that were set up on the wrong checkout step. These are separate causes. If you only fix one, a gap can remain.
How to check it on your store
You do not need a tool for a first answer. Take one week of orders and compare two lists:
- Export the order numbers from Shopify, with the payment method for each.
- Export the transaction IDs from GA4’s purchase report for the same dates and timezone.
- Mark the orders that are in Shopify but not in GA4, and sort them by payment method.
If the missing ones cluster around one off-site method, you have found your cause. If they are spread evenly across every method, look at consent and tag setup first. Be careful with timezones and refunds, because both can make two correct reports disagree. The post on why web analytics tools give different numbers covers the usual mismatches.
What merchants try
Two fixes come up in that thread, and both are reasonable:
- Make the payment provider send the buyer back to your confirmation page, where the provider allows it.
- Send the purchase to GA4 from the server once Shopify marks the order paid, using GA4’s Measurement Protocol. This needs the visitor’s GA identifiers saved with the cart or checkout beforehand, and orders that skip the cart can still lose them.
One caution raised in the same thread is worth repeating. Any workaround must respect consent. If a visitor declined analytics, saving their identifiers in the cart to send later defeats the point of the choice. Store the identifiers only after consent.
Where Hitsteps fits
It is worth being exact about what Hitsteps does here, and what it does not.
When Commerce is connected to a Shopify store, Hitsteps keeps two separate lanes. Browser events from the storefront describe shopper behavior: product views, cart adds, checkout steps. Verified orders come from Shopify itself, through authenticated webhooks that Hitsteps checks against Shopify’s order data. Only that second lane is treated as financial proof.
For the gap in this post, that matters in one way. A paid order is recorded because Shopify says it was paid, not because the buyer loaded a thank you page. So an order paid at a bank and never returned to your site can still show up in your Hitsteps Orders report.
What it does not do:
- It does not invent the visit. If the buyer never came back, Hitsteps may have no pageview linked to the order. Those orders stay counted and are shown as not linked to a visitor, and Hitsteps does not guess who a buyer was.
- It does not change what GA4 or your ad platforms report.
- It starts counting from the day your store is connected and verified. It does not import older orders.
- Commerce is opening gradually, so it may not be available on your site yet. Your plan and the app’s setup screen show what applies to you.
In practice, you can use the Orders report as a second record of what Shopify paid, and the Data Quality report to see how many orders have no linked visit. That gives you a number for the size of the gap on your own store, which is more useful than a guess.
The Ecommerce and Shopify guide walks through connecting a store and reading each report. If you want the whole picture of how Hitsteps compares with Google’s tool, see the GA4 comparison.
A short checklist
- Compare a week of Shopify orders with GA4 purchases and group the missing ones by payment method.
- If one off-site method stands out, ask the provider about returning buyers to your confirmation page.
- If you send purchases from the server, save identifiers only after consent.
- Keep a second record of paid orders that does not depend on the browser, and check how many of them have no visit attached.
Want to see what a shopper journey looks like in Hitsteps before you connect anything? The no signup demo shows a session replay and a heatmap preview from a simulated shop. Nothing is recorded and you do not need an account.