monkeyman.agency
scaling

Facebook Says 312 Sales, Shopify Says 190: How to Reconcile Meta Ads and Shopify Numbers

Meta's dashboard and your Shopify orders report will never agree, and that's by design. Here's why the gap exists and the monthly reconciliation that tames it.

July 7, 2026 9 min read

Sofia runs Terra & Ember, a candle and home fragrance brand on Shopify doing about $1.4M a year, with Meta driving most of the paid traffic. In June, Ads Manager reported 312 purchases. Her Shopify orders report, filtered to Meta-tagged traffic, showed 190. On the discovery call she put it the way an eight-year veteran of ad accounts would: “I’m reconciling numbers for my accountant and the two totals just won’t match. They’ve never matched.”

They never will.

That’s not defeatism, it’s the starting point for actually fixing the problem. The two systems are counting different things, on different clocks, with different incentives. Once you know exactly where the 122-order gap comes from, you can shrink it, explain the remainder, and stop making budget decisions on the wrong number.

Two systems counting two different things

Shopify counts orders. A customer paid, an order exists, the timestamp is the moment of checkout. Clean, boring, auditable. It’s the number your accountant and your bank will always agree with.

Meta counts conversions it believes it caused. That single word, believes, is doing an enormous amount of work. If someone clicked your ad last Tuesday and bought on Saturday, Meta claims it. If someone scrolled past your ad without clicking and bought the next morning, Meta can claim that too. If iOS privacy settings hid the purchase from the pixel, Meta may model a conversion into existence based on the users it can still see.

Neither system is lying. They’re answering different questions. Shopify answers “what happened in my store”, Meta answers “what do we think our ads influenced”, and the second question is inherently squishier.

The gap between the two isn’t a bug you file a support ticket about. For most ad-driven stores we audit, Meta reports 30 to 60 percent more purchases than Shopify attributes back. Sofia’s 312 versus 190 is a 64 percent inflation, high side of normal. That alone told us her settings were maximally generous before we’d opened a single report.

Attribution windows do most of the damage

The single biggest lever is the attribution window, the length of time after an interaction during which Meta claims the sale. The default is 7-day click plus 1-day view. Shopify’s own analytics, by contrast, leans on last non-direct click within its own window, a fundamentally stingier model.

Here’s what that means with real behavior. A customer clicks the ad Monday, thinks about it, gets paid Friday, buys Saturday through a Google search for your brand name. Meta claims it, five days inside the click window. Shopify’s report credits Google. Same order, two owners, and if you’re also running Google ads, three dashboards each taking credit for one candle.

Timing splits the count further, because Meta books the conversion on the day of the ad interaction while Shopify books it on the day of the order, so a purchase that straddles a month boundary lands in June for Meta and July for Shopify. Month-end reconciliations inherit that drift every single time.

And the windows compound across channels, because every platform runs its own generous clock. Add the claimed conversions from Meta, Google and TikTok and you’ll routinely exceed your actual order count by half, and we hear it on every onboarding call, usually phrased as “my channels together claim more sales than I have.”

View-through conversions, the quiet inflator

Buried inside that default window is the piece most merchants have never consciously agreed to: the 1-day view. Someone’s thumb slowed down over your ad, they didn’t click, and they bought within 24 hours. Meta counts it exactly as it counts a click-through sale.

There’s a real argument for view-through mattering. Impressions do influence people; that’s why brand advertising exists. The problem is weighting a glanced-at impression the same as a clicked ad in your purchase column, because for a brand with strong organic traffic, a chunk of those buyers were coming anyway and happened to be shown an ad on the way in.

The fix isn’t philosophical, it’s a reporting habit. In Ads Manager, use the Compare Attribution Settings option to break the purchase column into 7-day click, 1-day click and 1-day view. When we ran Sofia’s June through that split, 74 of her 312 reported purchases were view-through. A quarter of the headline number, gone before we’d looked at anything else.

Read the click-only column as your defensible floor. View-through is context, not revenue.

What iOS privacy did to the numbers

Everything above was true before 2021. App Tracking Transparency made it stranger, because Meta now loses sight of a meaningful slice of iOS users between the ad and the checkout, and fills the hole with statistical modeling.

Modeled conversions are estimates of purchases Meta believes happened but couldn’t observe. Some of them are real orders sitting right there in your Shopify admin. Others are educated guesses. Meta’s own documentation at its Business Help Center is upfront that reported results include modeled data; the dashboards just don’t flag which rows.

In practice this cuts both ways. Modeling can undercount a genuinely strong campaign in the first 72 hours, then backfill it later, which is why last week’s ROAS quietly changes after you’ve already screenshotted it. And modeling can overcount when the algorithm’s assumptions run hot for your audience mix.

The practical tell is volatility. Pre-2021, the numbers moved when your ads moved. Modeled numbers move when Meta’s confidence moves, which is why we tell clients to stop reading day-by-day ROAS entirely and to judge nothing on a window shorter than seven days. If a number has to go in front of the accountant or the board, it waits for the month-end reconciliation.

You can’t audit the model. You can only anchor to the system that doesn’t need one, which is your order book.

The monthly reconciliation we run for every ad-driven store

This is the workflow that turned Sofia’s accountant conversation from an argument into a table. It takes about an hour once it’s routine. The first pass takes two.

Fix the comparison first: same date range, same timezone, and Ads Manager switched to a click-only attribution column. You’re deliberately comparing Meta’s most conservative claim against Shopify’s records, apples to apples for once.

Then pull the Shopify side with UTMs, not vibes. Every ad in the account gets tagged, no exceptions, and the Shopify analytics reports filtered by those UTM parameters become your “orders that verifiably arrived from Meta” count. Untagged ads are invisible ads at reconciliation time.

A note on the tagging itself, because this is where the workflow quietly dies in month two. Agree a UTM naming convention once, write it into the campaign brief, and audit it on the first of the month before pulling anything. One renamed campaign or a duplicated ad set with hand-typed parameters and your Shopify filter starts missing orders, which reads as the gap widening when nothing actually changed. We keep the convention to five fields and a date stamp, nothing clever.

Now log three numbers in a spreadsheet: Meta click-only purchases, Shopify UTM-attributed orders, and total store orders. The ratio between the first two is your discrepancy rate, and that ratio, not either raw number, is the thing worth watching. A stable 1.4x means the systems disagree consistently, which is fine. A jump from 1.4x to 2.3x in one month means something broke: a pixel event, a consent banner update, a landing page redirect eating UTMs, we’ve seen all three.

Close the loop by reconciling revenue, not just counts, because average order values differ between claimed and actual orders more than most people expect.

Which number gets to decide the budget

None of the above matters if the wrong number still runs the meeting.

Our rule: platform ROAS compares campaigns, blended MER judges the channel. In-platform ROAS is directionally useful inside Meta, where every campaign inflates by roughly the same rules, so campaign A beating campaign B usually means something real. But the moment ROAS leaves the platform and walks into a budget conversation, swap it for MER, total Shopify revenue divided by total ad spend. MER can’t be gamed by attribution settings because it doesn’t use any.

Sofia’s June MER was 4.1 against a breakeven of 2.6. Healthy, and nobody had to believe a single Meta-claimed conversion to see it. Her in-platform ROAS that month said 6.8, a number that had been quietly justifying budget increases the blended math only partly supported.

Pick the decision number once, write it down, and stop letting whichever dashboard flatters the current mood chair the meeting.

When server-side tracking is worth the plumbing

The Conversions API sends purchase events from your server to Meta directly, patching browser-side losses from ad blockers and Safari. For most Shopify stores it’s already half-installed, since the native Meta channel app includes a CAPI integration with the pixel.

Worth real engineering attention when spend is meaningful, five figures monthly, because event match quality genuinely improves targeting and the delivery algorithm optimizes better with more complete signals. Not worth it as a discrepancy cure, and this is the part the tracking-tool vendors won’t say: CAPI feeds Meta more data, but attribution logic stays Meta’s. The gap narrows some. It does not close.

Third-party attribution tools sit in the same drawer for us. Useful triangulation at scale, one more model to argue with below it. So the priority order stays: UTMs and a reconciliation habit first, CAPI health second, paid attribution tools a distant third.

What we keep telling clients

The merchants who struggle with this longest are the ones treating the discrepancy as a puzzle with a solution. It isn’t. It’s a permanent property of running ads inside someone else’s measurement system. The goal is to make it explainable, stable and irrelevant to your decisions, in that order.

Explainable means you can tell your accountant exactly why the totals differ, window by window, in plain sentences. Stable means you track the ratio monthly and only investigate when it moves. Irrelevant means your budget runs on blended math that no platform can inflate.

And there’s a mindset shift hiding under the spreadsheet work. Meta’s number isn’t your sales report, it’s a vendor’s invoice for claimed influence. You’d never let a supplier’s invoice write itself into your books unchecked, this one shouldn’t either.

Sofia’s July close took forty minutes. Same gap, roughly, 1.5x on the click-only comparison, but this time it arrived pre-explained in a three-line summary her accountant accepted without a follow-up email. The ads didn’t change. The arguing stopped.

Questions we get every week

Is Facebook lying about my sales?

No, it’s answering a different question with generous defaults. Meta reports conversions it believes its ads influenced, inside windows you can inspect and change. Switch the report to click-only attribution and the number gets a lot more honest, and a lot smaller.

Which number do I give my accountant?

Shopify’s, full stop, because it’s the record of actual paid orders and the only figure that survives an audit. Meta’s dashboard is a marketing measurement, not a books-of-record system.

Will the Conversions API make the numbers match?

It narrows the gap by recovering events browsers lose, and it’s worth having healthy at meaningful spend. But attribution rules, view-through and modeling still apply, so the two totals will keep disagreeing. Expect improvement, not agreement.

What discrepancy rate is normal?

Most ad-driven Shopify stores we audit sit between 1.3x and 1.6x on a click-only comparison. The exact ratio matters less than its stability, because a steady ratio is measurement style while a sudden jump is a breakage worth chasing.

Do I need a third-party attribution tool?

Not before the basics. If your UTMs are clean and the monthly ratio is logged, a paid tool mostly adds one more model to argue with. They earn their fee at higher spend, when you’re weighing budget across three or more channels and need triangulation rather than truth.

Tired of three dashboards claiming the same sale? Talk to us about a tracking and attribution audit and we’ll hand you a reconciliation workbook your accountant will actually sign off on.

Need help with this?

Send us your store. We'll send back an audit.

Send us your store URL. We'll send back a free audit within 48 hours.

Phone (optional)