Tracking
How 552 purchases went uncounted, and how we found them.
By Felix Grant4 min read
An online learning company was selling more than its analytics said. By matching every order in its payment records to a purchase in GA4, we found 552 purchases that GA4 had never counted. The method does not depend on guessing the cause, and it works on any site.
Problem
The problem
The company sold online courses. Sales in its payment records were consistently higher than purchases in GA4, and the usual explanations of consent, ad blockers and refunds didn't account for the whole gap.
A gap between payments and analytics is normal. A gap nobody can explain is not, because every decision downstream is built on it.
Impact
Why missing purchases matter
Missing purchases are not just a reporting problem. They change where money goes. Ad platforms optimise on what they can see, so if Google Ads or Meta never hear about a sale, they learn to find fewer people like that buyer.
If the missing sales come mostly from one route, such as email or a particular payment method, that channel looks worse than it is. Teams cut what appears to underperform and spend more on what appears to work. And once people know the numbers are wrong but not by how much, they stop using them.
Method
How we found them
Start by getting both lists. Export every order for a fixed period from the source of truth, whether that is the payment provider, the ecommerce platform or the order database. Export every GA4 purchase for the same period with its transaction ID, date, value and source. Use the same time zone for both.
Then match on order number. Every order falls into one of three groups: in both, meaning counted correctly; orders only, meaning sold but never counted in GA4; and GA4 only, meaning counted but not a real order, such as duplicates, tests or the wrong ID. If GA4 isn't sending an order number at all, fix that first. Without it you can only compare totals, and totals hide the problem.
Next, describe the missing orders. For each one, pull everything the order system knows: payment method, product, device, discount code, date and time, customer type, and whether the customer returned to the confirmation page. Then look for what the missing orders share that the counted ones don't. Missing purchases rarely happen at random. They cluster around a payment method, a product type, a checkout route or the date something on the site changed.
Once a pattern shows up, reproduce it. Buy something the same way with your browser's developer tools open and watch what fires. Fix the cause, wait a full period and run the match again. The orders only group should shrink to what consent and blocking explain. If it doesn't, there is another cause.
Missing purchases cluster. Find the cluster and you find the cause.
Causes
The usual causes
Off-site payment shows up as missing orders clustered on PayPal, Klarna, bank transfer or a card security page that doesn't return cleanly. A skipped confirmation page shows up when customers close the tab after paying, or land on a page with no tag. A second checkout, such as an upsell, bundle or subscription app that was never tagged, shows up as missing orders for particular products.
Tag timing problems appear when the purchase event fires before GA4 has loaded or the page redirects too quickly. A changed template shows up as missing orders starting on a specific date. And a missing or unusable transaction ID means purchases reach GA4 but can't be matched.
Consent declines look different: missing orders spread evenly across products and payment methods. Consent will always account for some missing purchases in the UK. The point of the match is to separate that baseline from gaps you can fix.
Your site
How to check your own site
Pick one full month. Export orders with order number, value, payment method and date, and GA4 purchases with transaction ID, value, date and source. The free BigQuery export makes this easier; otherwise use an exploration. Match them in a spreadsheet on order number, count the three groups, and sort the orders only group by payment method, product and date. Then reproduce the most common cluster and fix it.
For a small store, a first pass takes a day or two. For larger sites, or where orders come from several systems, it is worth automating the match so it runs every month.
Fixing the tag stops future losses but doesn't fix history. Before changing budgets, re-read the last few months of channel results with the missing purchases in mind. And check whether your ad platforms receive purchases through their own server connections, such as Meta's Conversions API. If they rely only on the browser tag, they missed the same sales. If your sales and your analytics disagree, our Discover audit at £1,950 runs this match for you and gives your developer a fix list.
Key takeaways
- Match every order to a GA4 transaction ID for one full month
- Split orders into counted, missing and GA4 only
- Group the missing orders to find the cluster, then reproduce it
- Consent explains an even spread; clusters point to fixable faults
- Re-read past channel results before moving budget

Written by
Felix Grant
Founder of Kitebox, a business technology and AI consultancy that builds what it recommends. Based in Mallorca, working with UK businesses.
About Felix →