The short answer
Meta and Shopify disagree because they answer different questions: Meta counts purchases by people who saw or clicked an ad inside its attribution window, while Shopify credits the last non-direct click before the order.
Read the full answer
Meta's default setting is 7-day click plus 1-day view, per its own Business Help Center, so a sale from somebody who saw an ad and never clicked it counts for Meta and shows as direct or email in Shopify.
Shopify's marketing reports default to a last non-direct click model over a 30-day lookback and let you switch between five models, which means two people reading the same Shopify report can get different totals.
The instinct that Meta is inflating is not reliable: per Stella's geo holdout study of 46 DTC brands, the mean incrementality factor was 1.21, meaning Meta drove about 21% more revenue on average than its dashboard claimed, with wide variation by brand.
Shopify looks back four times further than Meta does on clicks, and thirty times further than Meta's view window. A tool with a longer lookback does not necessarily report more sales for a channel, because Shopify also discards view-through entirely and gives the credit to whatever touched the visitor last.
Source: Meta Business Help Center and Shopify marketing attribution documentation, 2026 · log scaleEvery brand running Meta ads on Shopify hits this in the first month, and most then spend a quarter trying to reconcile two numbers that were never going to agree.
The two tools are not measuring the same thing, and neither is broken. Knowing which question each one answers is more useful than closing the gap, and the size of the gap tells you something about your own traffic that neither number does on its own.
Why don’t my Facebook ads and Shopify numbers match?
Meta and Shopify disagree because they use different attribution rules, different lookback windows and different definitions of a credited sale. Meta counts purchases by people who saw or clicked an ad inside its window. Shopify credits whichever non-direct link the visitor used last before ordering.
Four differences produce almost all of the gap. Meta’s view-through credit, which Shopify has no equivalent for. The window lengths, which differ by a factor of four on clicks. Meta’s modelled conversions, which estimate what it cannot observe. And the date each system books the sale against, which is the click date for Meta and the order date for Shopify.
None of those is an error. They are design decisions, and they point in opposite directions, which is why the gap can run either way depending on your category and purchase cycle.
| Meta Ads Manager | Shopify marketing reports | |
|---|---|---|
| Default model | 7-day click plus 1-day view | last non-direct click |
| Lookback on clicks | 7 days | 30 days |
| Credit for an unclicked impression | yes, inside 1 day | none |
| Estimated conversions | yes, where the event is unobservable | no, real orders only |
| Date the sale is booked against | the ad click date | the order date |
| Models you can switch between | attribution window, set per ad set | five, switched inside the report |
Both columns are from each platform’s own documentation, read October 2026. Neither column is a measure of what the ads caused, which is the section below.
The practical consequence is that reconciling the two dashboards is not a solvable task. Picking one as your reporting standard and running a holdout to check what the ads actually caused is the version of this problem that has an answer.
What attribution window does Meta use by default?
Meta’s default attribution setting, which Meta calls standard attribution, is 7-day click plus 1-day view, per Meta’s Business Help Center. A purchase counts for an ad if the person clicked it within seven days of buying, or saw it without clicking within one day of buying.
The view window is the part that surprises people. Somebody who scrolls past your ad, never clicks, and buys through a Google search four hours later is a Meta conversion on the default setting. Shopify will record that order as organic search or direct, so the same sale appears in both tools under different owners.
Meta also reports modelled conversions where it cannot observe the event directly, which includes a large share of iOS traffic after the tracking permission prompt. Those are estimates, labelled as such in Meta’s documentation, and Shopify counts only orders that exist.
You can change the setting, and you should read it in your own account rather than trust any article about it, this one included. Meta has revised these windows before, the old default was 28-day click, and the current setting is visible on every ad set.
Switching it to 1-day click removes view-through credit entirely, which is the single most useful diagnostic here. Our piece on how long Facebook ads take to work covers what else changes when you edit a live ad set.
How does Shopify decide which channel gets the sale?
Shopify’s marketing reports credit the last non-direct click before the order, looking back 30 days by default. A visitor who clicks a Meta ad, leaves, then returns three days later through an email link gives the sale to email, because email was the last non-direct touch.
Shopify also offers several models in the same report, including last click, first click, any click and linear alongside the default. Switching models changes the channel totals without changing a single order, which is worth knowing before you compare your figure against a colleague’s.
Two structural issues inflate the direct channel in every Shopify account. Links shared without UTM parameters arrive as direct, and some payment redirects strip the referrer on the way back. Both quietly move revenue out of paid social and into a bucket nobody can act on.
The upside of Shopify’s model is that it only counts real orders, so it will never show revenue that did not happen. The downside is that it cannot see influence it did not receive a click for, which on a platform where most ad exposure produces no click is a large blind spot.
How big a gap between the two is normal?
No published benchmark says what size of gap is normal, and the figures circulating online come from vendors selling attribution tools rather than from a study anyone can check. Numbers like “20% to 35% is normal” appear widely with no stated method, sample or date, and they should not be used to judge an account.
The reason there is no benchmark is that the gap depends on variables that differ per brand: iOS share of traffic, how much of your audience sees ads without clicking, average order value, consideration cycle length, how disciplined your UTM tagging is, and how much email and organic traffic you have for Shopify to assign credit to instead.
What you can do is measure your own gap and watch it, which is more useful than a benchmark anyway. Record both numbers weekly for a quarter and the ratio between them stabilises into something you can plan around. A sudden move in that ratio is a real signal, usually a tracking break rather than a performance change.
Treat a stable gap as normal for your account and an unstable one as a diagnostic. Our guide to what a good ROAS looks like covers why the reported figure and the bank account diverge even once the gap is stable.
Which one is right?
Neither is right, because neither measures what the ads caused. Both count sales that happened near an ad, and a share of those would have happened without it. The question the discrepancy is standing in for is incrementality, and no dashboard answers it.
The direction of the error is not what most people assume. Per Stella’s incrementality study, covering 46 inverse-holdout tests on DTC brands, the mean incrementality factor was 1.21, meaning Meta drove roughly 21% more revenue than its own dashboard reported. The same work found that reported ROAS did not predict the true result, so a high in-platform ROAS is not evidence that Meta is over-attributing.
That result cuts both ways. On average in that sample Meta undercounted, and individual accounts ran in both directions, which is why Stella says the mean hides the spread. Per the same write-up the sample was 46 self-selected ecommerce brands turning over $15m to $100m a year, so it is a warning against confident assumptions rather than a new rule.
The practical takeaway is that you cannot infer the direction of your own error from either dashboard. A holdout test is the only instrument that answers it, and our guide to measuring influencer marketing ROI sets out how to run one on creator and paid spend.
How do you check the gap without a new tool?
Check the gap with three settings changes and no new software. Set both tools to the same time zone, compare a trailing 7 to 14 day window that closed at least a week ago, and switch Meta to 1-day click only.
The time zone step matters more than it sounds. Meta’s reporting runs on the ad account’s time zone and Shopify on the store’s, and a mismatch shifts revenue across day boundaries in a way that looks like a tracking fault.
Comparing a closed window removes the second-largest source of noise. Meta credits a sale to the date of the ad click rather than the date of the order, so the last few days of any report are still filling in. A window that closed a week ago has stopped moving.
Switching Meta to 1-day click isolates the view-through component. Whatever disappears from Meta’s reported purchases when you make that change is the share of the gap caused by people who saw your ads and never clicked them, which is usually the biggest single piece. Our piece on why Meta CPMs rise covers the delivery-side reasons that same audience gets expensive.
What should you actually do about it?
What you should actually do is pick one number as your reporting standard and stop reconciling the other. Most consumer brands are better served by Shopify or a blended figure, because it is conservative and it ties to money that arrived, with Meta’s in-platform numbers used for creative and ad set decisions where relative performance is what matters.
Fix the mechanical leaks while you are in there. Tag every outbound link with UTM parameters, including links in bios, emails and partner placements, and check that your Shopify direct channel is not absorbing traffic that has an obvious source. That work shrinks the unexplained portion of the gap without any new tooling.
Then put a holdout on the calendar. One geo or audience holdout per quarter, long enough to clear noise, tells you the multiplier between your reported number and your real one, and that multiplier is what you should be planning budget against.
Keep the two dashboards for different jobs. Meta for which creative and which ad set, Shopify for how much money the business made, and the holdout for whether the spend was worth it. Our guide to tracking signups and subscriptions after the iOS privacy changes covers the equivalent problem on the app side, where the measurement gap is wider still.
The short version
The two tools answer different questions. Per Meta’s Business Help Center the default attribution setting is 7-day click plus 1-day view, so purchases from people who never clicked count for Meta. Shopify’s reports credit the last non-direct click over a 30-day lookback and offer five selectable models, so its totals move with the model you pick.
Ignore the circulating “normal gap” percentages, which have no stated method. Measure your own ratio weekly instead, and treat a sudden change in it as a tracking fault rather than a performance change.
Neither dashboard measures what the ads caused, and the direction of the error is not predictable: across 46 geo holdouts on DTC brands, Stella found a mean incrementality factor of 1.21, with individual brands running both above and below 1.0.
Align time zones, compare closed windows, switch Meta to 1-day click to size the view-through share, tag your links properly, and run a holdout once a quarter.
One limit worth stating: Stella’s sample was 46 self-selected DTC brands, so use it as a reason to test rather than as a number to apply to your own account.
Frequently asked
Should I trust Facebook Ads Manager or Shopify?
Neither, as a measure of what your ads caused. Meta tells you how many purchases happened after an ad impression inside its window, which includes sales you would have made anyway.
Shopify tells you which link the visitor last used, which misses anyone who saw an ad and came back via search or direct. Use a holdout test to settle what the ads actually caused.
Why does Meta report more purchases than Shopify shows?
Usually view-through credit and modelled conversions. Meta's default 1-day view window counts purchases from people who saw the ad without clicking, and Shopify has no concept of a view, so those orders appear under direct, search or email there.
Meta also estimates conversions it cannot observe, such as after an iOS tracking opt-out, while Shopify reports only real orders.
Why does Shopify sometimes show more Facebook sales than Meta does?
Because Shopify's lookback is longer. Shopify's default model looks back 30 days for the last non-direct click, where Meta's default click window is 7 days, so a purchase 12 days after a click counts in Shopify and not in Meta.
Long consideration cycles and high average order values make this direction more common than people expect.
How do I compare the two fairly?
Compare completed windows, in the same time zone, with Meta set to 1-day click only. Meta credits a sale to the date of the ad click while Shopify books it on the order date, so a trailing 7 to 14 day window that closed at least a week ago removes most of the date-shift noise.
Setting Meta to 1-day click shows you how much of the gap is view-through credit.
Will a third-party attribution tool fix the discrepancy?
No, it adds a third number. Tools such as server-side tracking or a multi-touch platform can improve data capture and give you a consistent model across channels, which is useful.
None of them can tell you what would have happened without the ads, which is the actual question behind the discrepancy.
How often should I run a holdout test?
Once a quarter is enough for most brands, and once before any large budget decision. A geo holdout needs several weeks and enough volume for the difference to clear noise, so it is not a weekly diagnostic.
Between tests, pick one number as your reporting standard and track its trend rather than reconciling two dashboards every Monday.



Should You Hire an App Growth Consultant, an Agency, or Do It In-House?
How Is ASO Different on the App Store vs Google Play?
Why Does It Cost So Much to Acquire App Users on Paid Social?