Why ad platforms miss some of your sales (and how to fix it)
Meta and Google only count the sales their browser pixel catches, so they miss a real share of your Shopify orders. Why it happens, and how sending them back fixes it.
Most of the attribution posts I write are about dashboards disagreeing. This one is about something quieter and, honestly, more expensive: the sales your ad platforms never see at all.
When you run ads on Meta or Google, one of the main ways the platform learns that a sale happened is a small piece of code, the pixel, firing in the shopper's browser at checkout. That is client side tracking. Platforms have other signals too, but the browser is a big one, and it is the one that breaks most often. When the pixel does not fire, that path goes quiet, and the platform can miss the sale even though you received the order and got paid.
So the platform ends up running your campaigns on a partial view. It is grading your ads with some of the results missing. Let's look at why that happens, and what you can actually do about it.
The one-sentence version
Your store records your orders reliably, on its own server. Your ad platforms lean heavily on a browser pixel that misses a real share of those orders. The fix is to hand the platform the sales it missed, from your server, so it can measure and target with the full picture.
Everything below is a specific way that plays out.
The gap is on the platform's side, not yours
Your store keeps a clean record of your orders. That part is dependable. The ad platform is different: it mostly counts a sale when its pixel fires inside the shopper's browser. When the browser does not, or cannot, send that signal, the platform is left guessing about a real sale.
There are a lot of everyday reasons the pixel does not fire:
- The shopper starts on one device and buys on another.
- Safari and other browsers clear tracking after a few days.
- Most iPhone users opt out of tracking when asked.
- The shopper leaves to pay somewhere, like an express checkout, PayPal, or Klarna, and the signal is lost on the way back.
- Ad blockers and consent banners quietly stop the pixel.
How much gets missed varies a lot, by store, by how people pay, by how much of your traffic is on iPhone. Different studies put it anywhere from around 15 percent of orders to a third of them. The honest answer is that it depends, and the only real way to know your number is to measure it on your own store. Whatever it is, your store has those orders. The platform does not.
Two examples to make it concrete.
Cross-device. A shopper is scrolling Instagram on their phone. They see your ad, tap through, and browse your store, but they do not buy right then. Later they sit down at their laptop and place the order there. The purchase happened on a different device, where the platform never saw them. So as far as Instagram is concerned, that ad produced nothing. The sale is real and sitting in your store, but the platform has no idea it belongs to that ad.
Blocked pixel. A shopper on the same phone clicks your ad and buys a few minutes later, but their browser blocks the pixel at checkout. The order still lands cleanly in your store, but the platform's pixel never fired, so it does not connect the sale to the ad. Same result: you have it, the platform is missing it.
In both cases nothing is broken on your side. The information exists. It just never reached the platform.
How to close the gap
The idea is simple. Since your store already holds the order, hand the platform the sales its browser tracking missed, straight from your server. No browser involved. This is what people mean by server side tracking, or sending conversions back to the platform.
Here is what actually goes back for each recovered sale:
- The confirmed order and its value. These come from your store, so they are solid.
- A match key, so the platform can recognise the shopper. The best one is the click ID the platform put on the ad, if the shopper's earlier visit carried it. When there is no click ID, you can instead send a securely hashed version of something the shopper gave you at checkout, like an email or phone number, that only the platform can match on its own side.
- Nothing, if there is no usable match key. An order the platform has no way to recognise is better skipped than sent as noise.
Getting the click ID onto the right order is its own bit of work. It means connecting the order back to the visit that carried the ad click, on the server, after the fact. Do that well and far more orders arrive with a real match key attached.
Where the merchant's settings and the shopper's consent allow it, the customer details are normalized and securely hashed before anything is sent, so raw emails or phone numbers never leave in the open. This is standard for how platforms accept server-side conversions, but it is worth being deliberate about consent rather than treating it as a checkbox.
What happens when you send it back
When the platform receives the order and the match key, it tries to find that shopper in the ad interactions it already recorded. This is the important part: sending is not the same as matching. The platform accepts what you send, then attempts the match on its side. Some will match, some will not. You are improving the odds, not guaranteeing that every sale gets connected.
For the ones that do match, the platform gains something it did not have: this shopper, who saw this ad, went on to buy. Across many recovered sales, a few things tend to follow.
The platform measures more of the real picture. It is filling in sales it could not see before, so its view of what your ads actually produced gets closer to the truth.
You may see the platform report more conversions, and that is expected. Once it has more complete data, its reported numbers can go up. Part of that is real sales it finally connected. It can look like double counting at first glance, and it usually is not, but the cleanest thing you can do is tell your team the reported numbers will move, so nobody panics on day one.
Better data can feed better targeting and bidding, if you choose to use it that way. More matched sales give the platform a fuller set of outcomes to learn from, which can help it find more people like your real buyers. Whether that flows into automated bidding depends on how the recovered conversions are set up in your account. Even then, a lift is possible, not promised. It depends on match quality, volume, your bidding strategy, and plenty else.
Here is the whole flow, step by step:
- A shopper clicks your ad and browses your store.
- At checkout, the platform's pixel either fires (the sale is recorded) or it does not (the sale is missed).
- Either way, your store records the order on its server, with its value and a match key.
- For the missed ones, you send the order back to the platform, server to server.
- The platform tries to match it to the ad interactions it already has.
- The matches give it a more complete picture: better measurement, and better targeting if you use it that way.
Treat your own recovery as a metric, not a one-time switch. As this runs, the share of orders your platforms can tie back to an ad should climb over the first few weeks and then settle. Watch that number. If it stalls, something upstream broke.
A fair word on the limits. This does not make tracking perfect, and it is not something most stores can wire up on their own reliably. Numbers across your store, the platform, and your reports will never match to the last order, because each one counts a little differently. The goal is not a perfect match. It is a more complete picture for the platform, so it can measure and target with less guesswork, and a steady improvement over where you started.
How Prism does this
Prism already holds the confirmed order and its value from Shopify, and reconstructs the first-party journey that led to it, so it knows which orders carried an ad click and which did not. For the sales your platform missed, Prism sends them back from the server: the order, its value, and the best available match key, and it skips the ones with nothing to match on. You get a fuller, more honest picture in the platform without touching your campaigns.
If your bigger question is still why the numbers on your dashboards disagree in the first place, those are separate reads worth having: why Google Ads conversions don't match Shopify and why Meta and Shopify never agree.
If you run a Shopify store and want to see how many of your sales your ad platforms are missing, reach out to the team and we will show you your own number first.
Quick answers
Why do my ad platforms report fewer sales than Shopify? Their browser pixel misses orders when the shopper switches devices, blocks tracking, opts out on iPhone, or gets redirected through an express checkout. Your store still records every order; the platform just never saw a chunk of them.
What is server-side conversion tracking? Sending confirmed sales to the ad platform from your server instead of relying only on the browser pixel. It fills the gaps the pixel leaves.
Will my conversion count go up after I turn this on? Often yes, because the platform finally has data it was missing. That rise is expected, not double counting, and platforms reconcile overlaps on their side. Tell your team ahead of time so the jump doesn't look like a bug.
Does sending a sale guarantee the platform credits it? No. The platform accepts your data and then tries to match it to a person it already knows. Some match, some don't. You improve the odds; you don't force a match.
Is this safe for customer privacy? Customer identifiers are normalized and securely hashed before they are sent, and it should only run where the merchant's settings and the shopper's consent allow it. Raw emails and phone numbers do not leave in the open.
Sources
See which channels actually drive your revenue.
Prism reconstructs the full customer journey and reconciles every order back to Shopify - so your numbers finally agree.