Article: Why Your Meta and Shopify Sales Data Never Match (And How to Fix It)

Why Your Meta and Shopify Sales Data Never Match (And How to Fix It)
If you run ads on Meta and sell on Shopify, I'm willing to bet you've stared at both dashboards on the same morning and felt your stomach drop. Meta says you made ₹80,000 in sales yesterday. Shopify says ₹52,000. Neither number is wrong. But neither one is telling you the full story either.
I've sat with dozens of Indian D2C fashion founders who thought their tracking was "broken." Most of the time, it isn't. The two platforms are simply built to measure different things, in different ways, on different timelines. Once you understand why the panic usually turns into something much more useful: a plan.
This is the article I wish someone had handed me the first time a client asked, "Why don't my numbers match?"
Key Takeaways
-
Meta and Shopify aren't measuring the same event; one tracks ad-influenced actions, the other tracks completed transactions.
-
Attribution windows are the single biggest reason for the gap, followed by currency, refunds, and tracking gaps.
-
Neither dashboard is "the truth." Shopify is closest to your bank account; Meta is closest to your ad performance.
-
A small, consistent gap is normal. A huge or growing gap usually points to a fixable tracking issue.
-
Working with a performance marketing agency that understands both platforms saves you from making decisions on bad data.
Why do Meta and Shopify never show the same sales numbers?

At the simplest level: Meta reports what it thinks its ads caused. Shopify reports what actually got paid for.
Meta's ad manager doesn't wait for a bank transfer to confirm a sale. It counts a "purchase" the moment someone completes checkout after interacting with your ad even if that person later cancels, requests a refund, or if the browser event never fires cleanly. Shopify, on the other hand, only counts an order once it's actually placed in your store, regardless of whether an ad had anything to do with it.
So you end up with two systems answering two different questions:
-
Meta asks: "How many people bought something because of my ad?"
-
Shopify asks: "How many orders came through my store, from any source?"
Those are not the same question even though the dashboards sit side by side and beg you to compare them.
What is an attribution window, and why does it break the math?
This is usually the biggest single cause of mismatched numbers, and most brand owners have never heard the term.
An attribution window is the amount of time Meta will "look back" after someone clicks or views your ad, to decide whether a later purchase counts as coming from that ad. By default, many advertisers use a 7-day click / 1-day view window. That means:
-
Someone sees your Instagram ad on Monday.
-
They don't click it, but they think about the outfit for two days.
-
They come back on Wednesday, search your brand name on Google, and buy directly.
-
Meta still counts that as an ad-driven sale, because the view happened within the attribution window.
Shopify has no concept of an attribution window at all. It just sees "an order came in on Wednesday." It has no idea an ad was involved three days earlier so it never subtracts or adds anything based on ad exposure.
The wider your attribution window, the more sales Meta will claim credit for and the bigger the gap you'll see against Shopify.
Which other factors cause the mismatch, beyond attribution?
Attribution windows get most of the blame, but they're rarely the only issue. Here's what else is usually in the mix:
-
Refunds and cancellations: Shopify updates your revenue when an order is refunded. Meta often keeps counting the original "purchase" event, since it already fired before the refund happened.
-
Currency and rounding differences: if your ad account or reporting currency is set differently from your store currency, small conversion and rounding gaps add up over time.
-
iOS 14.5+ and browser tracking limits: privacy changes mean Meta's pixel doesn't always get a clean signal back from every device, so it has to model or estimate some conversions instead of directly observing them.
-
Ad blockers and cookie restrictions: some purchases genuinely can't be tracked back to an ad click, even though the sale happened.
-
Time zone settings: Meta and Shopify may report "today's sales" using different time zones, which shifts orders from one day into the next on one dashboard but not the other.
-
Multiple traffic sources for the same order: someone might click a Meta ad and a Google ad and an email link before buying once. Each platform may claim that one sale.
How big should the gap actually be?
There's no universal "correct" percentage, because it depends on your ad spend, your attribution settings, and how much of your traffic comes from paid social versus other channels. But a useful gut-check:
|
Factor |
What Meta Shows |
What Shopify Shows |
Why They Differ |
|
Timing of the sale |
Counted the moment checkout completes, within the attribution window |
Counted only when the order is actually placed |
Attribution window vs. real-time order log |
|
Refunded orders |
Often still counted as a "purchase" |
Revenue is adjusted downward |
Meta doesn't always sync post-purchase events |
|
Multi-touch customers |
May claim credit if the customer saw/clicked the ad recently |
Counts the order once, regardless of channel |
Each ad platform can claim the same sale |
|
Currency |
Based on ad account currency settings |
Based on store currency settings |
Conversion/rounding differences |
|
Tracking signal loss |
Some purchases are modeled/estimated |
Every completed order is logged directly |
iOS privacy changes, ad blockers, cookie limits |
As a rough starting point, many brands I work with see Meta reporting somewhere between 10–30% higher revenue than Shopify shows for the same period but I'd rather you check your own gap than anchor to a number that may not apply to your store.
If your gap is small and stays roughly the same month over month, that's normal it's just how the two systems are built. If the gap is huge, growing, or unpredictable, that's usually a sign something in your tracking setup needs attention.
Which number should you actually trust when making decisions?
Neither number, on its own, should run your business. Here's how I'd use each one:
-
Use Shopify for anything financial: cash flow, inventory planning, actual profit and loss. This is the number closest to what's really in your bank account.
-
Use Meta for campaign-level optimization: which ad, audience, or creative is performing relative to other ads, not as an absolute revenue figure.
-
Never scale ad spend based on Meta's reported ROAS alone. Cross-check it against Shopify's actual order data over the same period before deciding to spend more.
A good rule I give clients: let Meta tell you what to test next. Let Shopify tell you what to pay yourself this month.

How can you actually fix or reduce the mismatch?
You can't make the two numbers identical. That's not realistic, given how differently they're built. But you can shrink the gap and make it more predictable:
-
Standardize your attribution window and stick with it, so you're comparing the same window month over month instead of a moving target.
-
Set up server-side tracking (Conversions API) alongside your pixel, so Meta gets more complete purchase data even when browser-side tracking is blocked.
-
Match your time zones and currencies across Meta Ads Manager and Shopify settings.
-
Review your refund workflow: make sure cancelled or refunded orders aren't silently inflating your ad platform's reported revenue.
-
Build a simple weekly reconciliation habit: pull both numbers into one sheet and track the percentage gap, not just the raw rupee difference. A stable percentage means your tracking is healthy; a swinging one means something changed.
-
Get a second, neutral data layer: some brands connect a dedicated analytics tool that pulls both Shopify and ad-platform data into one clean view, so you're not manually reconciling two dashboards every week.
This is exactly the kind of setup work a fashion marketing agency that lives inside Shopify and Meta every day can do much faster than trying to figure it out alone mostly because we've already made (and fixed) these mistakes across other fashion stores.
Where does this leave you?
Mismatched numbers don't mean your store is broken. They mean you're looking at two different lenses on the same business: one built for ad optimization, one built for actual revenue. The fix isn't finding the "real" number. It's knowing which lens to use for which decision, and tightening your tracking so the gap stays small and predictable.
If you'd rather not untangle attribution windows, server-side tracking, and reconciliation sheets on your own, that's exactly the kind of work we do at Code To Couture. As a fashion marketing agency and performance marketing agency built specifically for Indian D2C fashion brands, we set up the tracking, manage the ad spend, and make sure the numbers you're making decisions on actually mean something. If your Meta and Shopify data have been driving you a little crazy, let's take a look at your setup together.
FAQ
-
Q: Is it normal for Meta and Shopify numbers to never match exactly?
Yes. Because of attribution windows, refunds, and tracking limitations, a small, consistent gap between the two is expected not a sign of broken tracking. -
Q: Should I trust Meta's ROAS number when deciding how much to spend on ads?
Not on its own. Use Meta's ROAS to compare ads against each other, but confirm actual revenue impact against your Shopify order data before increasing spend. -
Q: Does iOS tracking really affect how many sales Meta can see?
Yes. Privacy changes on iOS mean Meta can't always directly observe every purchase, so it estimates some conversions instead of tracking them precisely, which can widen the gap. -
Q: Can a digital marketing agency for fashion brands actually close this gap?
An agency can't make the platforms report identically no one can but a digital marketing agency for fashion brands that understands both systems can set up proper server-side tracking, standardize your attribution settings, and build a reconciliation process so the gap becomes small and predictable instead of confusing. -
Q: What's the first thing I should check if my gap suddenly gets much bigger?
Check your attribution window settings first, then look for a spike in refunds or cancellations during that period; those two account for most sudden jumps in the mismatch.
