Field notes from the founders
Why your Meta Ads and Shopify numbers don't match (and which one to trust)
November 8, 2026
There's an old adage, popularly known as Segal's law: "A man with a watch knows what time it is. A man with two watches is never sure." Most D2C brands are wearing five. Meta says one thing, Google Ads says another, GA4 has its own view, Triple Whale has a fourth, and Shopify, the one closest to the money in the bank, disagrees with all of them.The first instinct is to treat the gap as a bug, and we've seen our fair share of those: a purchase event firing twice, a pixel lost in a theme update, an integration nobody has checked in a year. Fix them, and fast. Ad platforms optimise on the conversions you send them, so a broken or duplicated purchase event can badly hurt how well Meta or Google spends your budget. Fixing them still won't make your numbers agree. Every tool counts something slightly different, by its own rules, from its own partial view of your customers, and none of them has much reason to agree with the others.Every ad platform marks its own performance by rules it chose.Meta offers two attribution models, Standard and Incremental. Within Standard you choose a click window of one or seven days, add or remove a one-day view window and a one-day "engage-through" window for likes, shares and video plays, and decide whether to count every conversion or only the first. The default is seven days after a click or one day after someone saw the ad. Even the definition of a click moved this year: since March 2026 Meta has been rolling out a change so that a click means a link click, with everything else shifted into engage-through.Google Ads has defaulted to data-driven attribution since 2021, applied within a conversion window you set for each conversion action. By default that's 30 days after a click, three days after an engaged view of a video ad and one day after a view. GA4 also defaults to data-driven attribution, with its own model, its own data and a 90-day lookback. At the time of writing (November 2026), Triple Whale's help centre lists eight models of its own, from First Click and Last Click to Triple Attribution and Total Impact.So the same sale can be claimed by Meta (it showed an ad), by Google (someone searched your brand name), and by Triple Whale under whichever model you happen to have selected. Add up what every platform says it drove and you'll usually find more conversions than you have orders.The reason is incentives. Each platform is marking its own homework, and a platform that reported less credit for itself would look worse next to its competitors. There's no commercial reason for them to align, and quite a few reasons not to.Two Google products still tell different stories, for reasons well beyond the attribution model.They can see different people. If you sell into the UK or EU, your cookie banner almost certainly asks about analytics cookies and marketing cookies separately, and Google's consent mode passes those choices on as separate signals. A visitor who says yes to analytics and no to marketing is visible to GA4 and largely invisible to Google Ads, and the reverse happens too. Where consent mode runs in advanced mode, each tool then models the people it can't see (above a minimum traffic level), in its own way, and GA4 withholds small numbers in some reports to protect privacy.They join up journeys differently. GA4 decides how to stitch one person's visits across devices through its reporting identity settings, using your own user IDs where you have them, device IDs and modelling. Google Ads counts cross-device conversions using what Google knows about its signed-in users, which GA4 no longer uses in its reports (Google removed Google signals from GA4's reporting identity in February 2024). Same customer, same purchase, two different accounts of how they got there.It gets worse if you export GA4 to a data warehouse, which is the obvious move for a brand that wants to own its numbers. The export will never match the GA4 interface. Google says none of the consent-mode modelling is in the export, nor is Google signals data, and that the attribution GA4 applies in its reports can't be fully rebuilt from it. Even sessions have to be reconstructed, because every row in the export is an event, and Google doesn't publish its data-driven model in enough detail to piece the channel credit back together.In 2021 Apple's App Tracking Transparency gave iPhone users a one-tap way to refuse cross-app tracking, and most did. Meta lost sight of a large share of the journeys it used to observe. It shortened attribution windows, delayed reporting and filled the gaps with statistical modelling.Its main answer, though, was the Conversions API, which sends purchases to Meta from your server instead of relying on the pixel in the shopper's browser. A blocked or forgetful browser no longer loses the sale, and Meta gets the customer details it needs to match the buyer to an account. If you're spending serious money on Meta without the Conversions API, fix that before you touch the creative or the budget, because the algorithm is optimising on a fraction of your sales. On Shopify, the Facebook & Instagram app's Enhanced and Maximum data-sharing settings switch it on.Even with it, some conversions in Ads Manager are estimates, modelled to fill gaps in what Meta could observe, and Google Ads and GA4 model the users who decline cookies in the same way. Shopify's order count needs no such guesswork.Even if every platform used the same attribution rules, the numbers still wouldn't match, because they don't see the same events. This is the least understood reason for the gap.Browsers forget. Ad platforms recognise a returning visitor through cookies. Safari caps cookies set by a website's JavaScript at seven days, and at 24 hours if the visitor arrived through a tagged link from a known tracking domain, which is how someone arrives from a Meta ad. A customer who clicks on Monday and buys the following week on the same iPhone can look like a stranger. Ad blockers and privacy extensions remove the pixel altogether for some visitors.Two reporting routes can double count. Most brands now send purchases to Meta twice: once from the browser pixel and once from the server through the Conversions API. Meta is supposed to deduplicate them using a shared event ID. If the IDs don't match, because of an app conflict or a botched migration, the same purchase is counted twice.Google is pushing the same way, and your setup changes what it sees. Google offers server-side tagging, enhanced conversions (which send a hashed email with each conversion so Google can match it to a signed-in user) and, since 2025, Google tag gateway, which serves the Google tag from your own domain. Whether you use them, and how they're configured, changes how many conversions land in Google Ads and which clicks they're credited to, so two brands with identical customers can see quite different numbers purely because of their tagging.Shopify changed how checkout tracking works. It has retired the old checkout scripts that many tracking setups relied on, for Plus stores in August 2025 and for everyone else in August 2026. Pixels now run in a sandbox through Shopify's Customer Events. Every migration is a chance for an event to go missing or start firing twice, and many brands haven't checked since.Some orders never touch a browser. Subscription renewals from Recharge or Skio are generally created on the server, with no browser session and no pixel. Shopify counts them, and Meta usually never sees them. The same goes for draft orders and point-of-sale. For a high-retention brand this alone can be a big slice of the gap.Dates and values are counted differently. Meta reports a conversion against the day of the ad impression, Google Ads against the day of the ad interaction, and Shopify against the day of the order, so a sale that follows a click by six days can land in different weeks in different tools. Meta and Google Ads record whatever order value your integration sends them, which may or may not include tax and shipping, and they keep the original purchase where Shopify nets off refunds. That's one reason Google Ads ROAS and Shopify ROAS differ even when the order counts agree. We'd retire ROAS altogether: it caught on because it was easy to measure, it ignores margin and whether the customer ever comes back, and it nearly always looks great.There's one more source of disagreement, and for a retention business it's the expensive one. By default Meta counts every measurable conversion that follows an ad, whether the buyer is brand new or has been ordering from you for two years. A loyal customer who taps an ad on the way to a purchase they'd have made anyway becomes a prospecting conversion. Strip those customers out and the cost of acquiring a new one can look several times worse than the platform says.Take an illustrative month for a $15m brand, in round numbers.Meta. The brand spends $30,000 on prospecting. Ads Manager reports 600 purchases, a cost per purchase of $50. That's the number the social media manager quotes in every meeting.Step one: a neutral referee. GA4, using data-driven attribution, credits Meta with 330 of those purchases. The other 270 are view-through conversions GA4 never saw, modelled conversions, Safari visitors Meta remembered and GA4 didn't, and sales where GA4 shared the credit with brand search or a Klaviyo email. Cost per purchase: $30,000 ÷ 330 = $91.Step two: strip out existing customers. Pull the orders behind GA4's credit by transaction ID and look each one up in Shopify's customer records. 180 of the 330 came from people who had bought before. That leaves 150 new customers, and a cost per new customer of $30,000 ÷ 150 = $200.That's four times the $50 in Ads Manager, from nothing more exotic than a different referee and a customer lookup.Google Ads rarely escapes it. The same brand spends $20,000 on Google Ads, mostly brand search and Performance Max, and Google Ads reports 800 conversions at $25 each. GA4 credits Google Ads with 525. Brand search is how loyal customers find their way back to you, so the returning share is higher still: two in three, leaving 175 new customers. Cost per new customer: $20,000 ÷ 175 = $114, more than four times the reported $25.The blended view. Across all $50,000 of spend, Shopify shows 400 new customers in the month (the 325 above plus organic, referral and word of mouth), a blended CAC of $125. Finance sees $125 and the social media manager sees $50, and both are reading their number correctly.What you can do, without a warehouse, is make the gap explicable.Start in Shopify. Every online order stores the landing page the customer arrived on, and a click from a Meta ad carries an fbclid parameter in that URL, even when the ad has no UTMs. Pull last month's orders whose landing page contains fbclid or a Meta UTM.Next, split those orders into new and returning customers using Shopify's customer records. Then compare the new-customer count with Meta's reported purchases for the same month, on a seven-day click basis. What's left over is modelled conversions, returning customers, buyers who clicked and came back another way, and any double counting. If the gap moves sharply from one month to the next, check your pixel and Conversions API setup before you touch the budget.Each number is built for a different decision.Meta's numbers are for comparing ads and audiences within Meta. Compare like with like (prospecting against prospecting, say) and the ranking usually holds even when the totals are inflated, provided you check the new-customer split, since some audiences are far heavier with existing customers than others.Blended CAC (total marketing spend divided by Shopify new customers) is the number to run the business on. No platform's attribution model can inflate it, and it feeds straight into LTV:CAC.Contribution margin per new customer decides whether to scale. A campaign that acquires customers who never reorder is expensive however cheap its cost per purchase looks in the platform.Attribution is unsolvable. No model, however clever, can tell you for certain which of the five ads, two emails and one brand search a customer saw deserves the credit for their order, and every vendor that claims otherwise is selling you a model with a confident name.The best way to cope depends on the shape of your business and your marketing. A brand putting most of its budget into Meta prospecting, with a short path to purchase, can get a long way with the click-based reconciliation above and the occasional holdout test. A brand with heavy brand search, wholesale or retail alongside its own site, or a long consideration window will find channel-level credit far murkier, and should lean harder on blended numbers and incrementality tests.The biggest cost of all this is the argument it starts. Different teams and colleagues work from different numbers, so nobody trusts them and decisions stall.Finance looks at the $125 blended CAC, or the $200 cost per new customer, and concludes Meta is burning the marketing budget. The social media manager swears by the $50 in Ads Manager and wants to scale. Each has a dashboard that proves their point, and the budget decision slips another week.Since attribution can't be solved, the next best thing is a shared view of performance that everyone agrees to work from and act on. That's what a company brain for D2C is for. We can't fix an unsolvable problem, but we can give the whole team one common view of the metrics, rebuilt from structured data across every system you run, with sources always cited and a sensible default everyone works to (GA4's data-driven attribution, reconciled to Shopify's new customers, say). It reads the business LTV:CAC first, and its agents act on that view in the open. Pick one watch and agree to read it.If you're below roughly $1m in revenue, the samples are usually too small to separate signal from noise, so the hand reconciliation above is the better place to start.If you'd like a second pair of eyes on why your numbers disagree, book a call at signalovernoise.app/book-a-call or drop us an email at hello@signalovernoise.app.