Features Ad Monitoring Reports Trends & Insights Google Ads Audit Creative Intelligence Industries SaaS E-commerce B2B Agencies Agency Resources Blog Case Studies Help Center Content Libraries CRO Guides Analytics Hub WooCommerce Shopify Pricing Log In Get Started Free

Shopify attribution not matching ad platforms: here is why

By Dror Aharon · CEO, COREPPC · Updated April 17, 2026 · 11 min read
Shopify attribution not matching ad platforms: here is why: editorial illustration
TL;DR

Shopify attribution not matching Meta or Google is the most common panic email we get, and in maybe 80% of cases the gap is not a bug at all, it is two measurement systems doing exactly what they were built to do and disagreeing by design. Meta reports $40k in attributed revenue for the week, Shopify shows $12k on the same campaign, and the founder assumes the pixel broke or somebody turned off tracking. Usually neither. Meta counts view-through conversions across a 7-day window, Shopify counts last non-direct clicks inside a 30-day lookback, and the math never reconciles without translation. The real question is not which number is right, it is which number to trust for which decision. Getting that straight fixes most of the anxiety. Actual pixel bugs do exist and matter a lot. They look different from a normal gap, and the 3-step diagnosis below separates them in about 20 minutes.

  • A 40 to 70% gap between Meta and Shopify is normal, not a bug.
  • View-through attribution is where most of the overstatement lives.
  • Last-click Shopify and modeled multi-touch ad platforms measure different things.
  • The 3-step diagnosis tells you when the gap is real and when it is a tracking problem.

Why Meta says 10x ROAS and Shopify says 2x (and both are correct)

The first time an operator sees Meta reporting 10x ROAS while Shopify shows 2x on the same spend, the reaction is always the same. Something is broken. Usually nothing is broken. Meta and Shopify measure different things with different rulebooks, and the gap is the predictable output of that difference, not a tracking failure.

Meta's ROAS is built on Meta's attribution window, which by default is 7-day click plus 1-day view per Meta's attribution setting documentation. Every purchase by somebody who clicked a Meta ad in the last 7 days, or saw one in the last 24 hours, gets credited to Meta. Even if they also clicked a Google Search ad, opened an email, and landed on the site via direct before purchasing. Shopify's marketing report, by contrast, runs on last non-direct click across a 30-day lookback. Shopify credits the last channel the customer clicked before buying, not every channel they touched. If that last click was Google Brand, Shopify gives Google Brand 100% of the credit. Meta gets zero, even if Meta ran the ad that created the demand two days earlier.

So a customer who saw a Meta ad on Tuesday, clicked a Google Brand ad on Wednesday, and bought on Thursday shows up as Meta-attributed in Meta Ads Manager, Google-attributed in Google Ads, and Google-attributed in Shopify. Three dashboards, same customer, three different stories. None wrong. Meta is answering "which of my ads were in the path?" Shopify is answering "which paid channel closed the sale?" Both valid, neither alone tells you the truth.

Attribution window: the first big gap

The attribution window difference is the biggest structural reason shopify attribution not matching ad platforms is the default state of every Shopify store. Meta's default is 7-day click and 1-day view. Google Ads defaults to 30-day click on Search and 1-day view on Display and YouTube. Shopify's own marketing report uses a 30-day click-only model and excludes view-through entirely. That means a customer who saw a Meta ad, did not click, and bought three days later gets counted in Meta's dashboard and completely ignored in Shopify's.

The practical effect compounds. A Shopify store running Meta and Google at roughly equal spend will almost always see Meta over-report relative to Shopify by 40 to 60% and Google over-report by 15 to 25%. The gap is wider on Meta because view-through is a bigger share of the claim. Google's 30-day click window actually aligns pretty well with Shopify's 30-day model, so the click-based numbers land within 10 to 20% of each other most weeks. Meta's view-through claim is where the real divergence lives.

The fix is not to change Meta's attribution window. Dropping Meta to 7-day click only will shrink the reported ROAS gap, but also weaken the optimization signal. The fix is to read Meta's number knowing it includes view-through, and Shopify's knowing it does not. Then compare the gap week over week. Stable gap means tracking is working. A gap that jumps 30% in a week means something broke and needs diagnosis.

Click vs view-through: the 60% overstatement

View-through attribution is where most of the Meta vs Shopify revenue mismatch actually lives, and most operators do not realize how much of their Meta-reported revenue is coming from view-through until they split the report. Inside Meta Ads Manager there is a dropdown for attribution setting. Switch it from the default "7-day click or 1-day view" to "7-day click" only. The reported revenue usually drops 30 to 60%. That delta is the view-through credit Meta was claiming on purchases where the customer never actually clicked a Meta ad.

View-through is not worthless. Some impressions really did influence the purchase, and turning off all view-through credit underestimates Meta. But most of the claim is inflated. The person saw a Meta ad in feed, scrolled past without clicking, bought something 18 hours later from a Google Brand search, and Meta took 100% of the credit because the view window was still open. Multiply that across thousands of customers a month, and Meta reports $40k of revenue that Shopify and Google also claim in their own dashboards. Triple-counted revenue, single purchase.

The practical rule for reading Meta's dashboard in 2026: always check both attribution windows. Report the 7-day-click number in internal dashboards. Leave Meta's campaign setup on 7-day click plus 1-day view so the algorithm has enough signal to optimize. The 7-day-click number is closer to the Shopify-attributed number and closer to what you can actually reconcile against the P&L. The default number with view-through included is useful inside Meta for comparing campaigns against each other, not for answering "how much revenue did Meta actually drive?" That question needs incrementality. Our companion guide on the shopify attribution model 2026 walks through the incrementality part in detail.

Last-click Shopify vs modeled multi-touch ad platforms

Beyond the attribution window difference, Shopify and the ad platforms also run fundamentally different attribution models, and this is the second big source of shopify attribution discrepancy. Shopify is a last non-direct click system. Meta and Google both run multi-touch models that distribute credit across touchpoints in different ways, neither of which Shopify has any way to represent.

Meta's attribution is probabilistic and leans heavily on modeled conversions, which is Meta's way of handling purchases where the pixel fire got lost to iOS 18 or cookie blocking. Meta looks at historical data on similar users, estimates the probability that the purchase was driven by a Meta touchpoint, and attributes accordingly. The estimate is decent in aggregate, directionally useful, and impossible to audit line by line because the model is proprietary. Google's Data-Driven Attribution runs a similar shapley-value model inside the Google ecosystem, weighting every Google touchpoint based on its incremental contribution to conversion probability. Different math, same family of approach.

Shopify does none of that. Shopify runs a straightforward last non-direct click model, which means if the customer's last non-direct session before purchase was from a Meta ad, Shopify credits Meta. If the last non-direct session was a Google Brand click, Shopify credits Google Brand and Meta gets zero, even if Meta drove 4 touches before the Brand click. Simple, auditable, and structurally blind to the assist path. The Shopify Marketing Reports documentation explains the logic.

So Meta says "I was part of 60% of the paths that ended in purchase" and Shopify says "you were the last click on 18% of purchases." Both numbers are true. They answer different questions. Meta's number tells you what share of the funnel Meta participated in. Shopify's tells you what share of the close Meta got credit for. The gap between 60% and 18% is the assist rate, and it is structurally larger for top-of-funnel channels like Meta Prospecting and Google Display than for bottom-of-funnel channels like Google Brand and email.

The 3-step diagnosis for reconciling the numbers

Before you spend three hours inside Meta Events Manager looking for a pixel bug, run this 3-step diagnosis. About 80% of "Shopify attribution not matching Meta" issues resolve in step 1 or 2. The remaining 20% are actual tracking problems, and step 3 finds them.

  1. Compare Meta's 7-day-click number to Shopify's marketing report, not Meta's default number. Inside Meta Ads Manager, switch the attribution window dropdown to "7-day click" only. Pull the 7-day-click revenue figure for the same date range as Shopify's marketing report. If those two numbers are within 30% of each other, tracking is fine and the gap is just attribution window math. We see this resolve the complaint in about half of cases. If the gap is still above 40%, move to step 2.
  2. Check event deduplication in Meta Events Manager. Pull up the Purchase event, look at the Event Match Quality score and the dedup rate. EMQ above 7.5 and dedup above 80% means CAPI is working and events are matched. EMQ below 6 or dedup below 50% means either browser and server events are firing without a shared event_id, or two pixels are firing on the same page. Both inflate Meta's reported revenue beyond what Shopify can reconcile. Fix the pixel setup first and the gap will narrow. Our Meta CAPI setup guide walks through the exact fix.
  3. Run a test purchase and audit the event log. Open the store in incognito, complete a test purchase using a coupon code, then check Meta Events Manager's Test Events tab, Shopify's pixel event log, and Google Tag Assistant simultaneously. The Purchase event should fire exactly once in each system with matching event_id, matching value, matching currency. If any of those are off, that is your bug. If all three match on a single test purchase, the gap is structural (window + model differences), not a tracking failure.

Most operators skip step 1 and go straight to "something must be broken." Run the three in order, in that order. You save three hours and usually find the real answer in step 1.

When the gap is normal and when it is a pixel bug

The hard part of shopify attribution not matching is not reconciling the numbers, it is knowing when to stop trying to reconcile. A certain gap is normal and healthy. A different kind of gap is a bug and needs fixing. Telling them apart is the operator skill that separates the people who trust their numbers from the people who panic-email their agency every Monday.

Normal gap patterns look like this:

Bug patterns look different:

The stable-vs-sudden distinction is the single most useful signal. A 50% gap that holds steady for six months is almost certainly normal attribution window math. A 50% gap that appeared last Tuesday is almost certainly a deploy that broke something. Theme update, GTM change, CAPI token expired, Shopify app disconnect. All of those show up as sudden gap changes, and they are all fixable inside an afternoon once you know to look.

Which number to trust for budget decisions

The final question underneath every shopify meta attribution gap conversation is the one that actually matters. Which number do I use to decide where to put next month's spend? The honest answer is that no single number is the right one for every decision, and the operators who try to make one number answer every question are the ones who keep getting burned.

For intra-platform decisions, which campaign inside Meta to scale, which ad set to pause, which creative to kill, use the platform's own number. Meta's attribution is the right lens for Meta campaign-level work because every campaign was measured by the same ruler. The ROAS comparison between Meta campaign A and Meta campaign B is clean inside Meta. It stops being clean the moment you try to compare Meta campaign A against Google Brand search, because different rulers.

For cross-platform budget decisions, which is more important in your month, Meta or Google, use Shopify's marketing report or a blended reconciled view. Shopify reconciles every channel against the same last-click rule, so the comparison between Meta, Google, TikTok, and email is apples to apples. The absolute number is conservative and understates Meta's real contribution, but the relative ranking between channels is accurate. That is what you need for budget allocation.

For real marketing efficiency, which is the only question that hits the P&L, use blended ROAS calculated as total revenue minus organic and email, divided by total paid spend. Margin-adjust it against your gross margin for the number that actually predicts profit. Validate the whole stack with a quarterly geo holdout test, because every model has bias and the only way to catch the bias is measurement. The attribution model guide walks through the blended math in detail.

So three numbers for three decisions. Platform-reported for intra-platform optimization. Shopify-attributed or blended for cross-platform ranking. Margin-adjusted blended for true efficiency. The attribution gap between Meta and Shopify stops being a problem once you stop trying to make one number do all three jobs.

Frequently asked questions

Why does Meta show 10x more revenue than Shopify on the same campaign?
Meta counts every purchase by anyone who saw or clicked a Meta ad within the attribution window, which is 7-day click plus 1-day view by default. Shopify only counts the last non-direct click before purchase, so if the customer saw a Meta ad but then clicked Google Brand before buying, Shopify gives Google Brand 100% of the credit and Meta gets zero. The 10x gap usually means Meta's reported revenue includes a lot of view-through claims on purchases that actually closed through other channels. It is not a bug, it is structural. Switch Meta's attribution window to 7-day click only inside Ads Manager and the gap typically narrows by 40 to 60%, which is the view-through over-claim.
Is a 50% gap between Meta and Shopify normal?
Yes, for most Shopify stores running Meta at any meaningful scale. The typical stable gap we see across audits is 40 to 70% higher reported revenue in Meta than in Shopify, and that range is normal as long as it is stable week to week. What matters is stability, not the size of the gap itself. A 50% gap that holds for six months is attribution window math doing its job. A 50% gap that jumped from 20% last week is a tracking bug and needs diagnosis. Check the Event Match Quality score in Meta Events Manager as the first signal. If EMQ is above 7.5 and dedup is working, the gap is almost always structural not buggy.
Can I make Meta and Shopify attribution match exactly?
No, and trying to is the wrong goal. The two systems measure different things by design. Meta measures what share of purchase paths its ads participated in, Shopify measures what share of paths closed with its channel as the last non-direct click. Those are different questions, and the numbers will never match no matter how clean your pixel setup is. The realistic goal is a stable, predictable gap that you understand. Once the gap is stable, you read each number for the decision it is good at. Meta's number for Meta campaign optimization, Shopify's for cross-channel budget allocation, blended for efficiency. Expect the two dashboards to show different numbers, always.
What if Shopify shows Meta-driven orders but Meta Ads Manager shows zero?
That is a pixel fire failure, almost always a broken CAPI connection or a disconnected Facebook and Instagram app in Shopify. Shopify's marketing report is reading UTM parameters from the landing URL, so orders tagged with utm_source=facebook still show up as Meta-driven in Shopify even when Meta's own pixel never fired the Purchase event. Best to check the Facebook and Instagram app connection status in Shopify admin first, then check Meta Events Manager for recent Purchase events. If Events Manager shows zero purchases for a period when orders clearly happened, the CAPI token likely expired or the app disconnected. Reconnect and the reporting catches up within 24 hours.
How do I know if my pixel is actually double-counting?
Look at Event Match Quality and dedup rate in Meta Events Manager under the Purchase event. If dedup rate is below 50% or EMQ is below 6, events are likely firing twice without a shared event_id, which inflates Meta's reported revenue by 40 to 100% depending on how bad the doubling is. Run a test purchase in incognito and watch the events log in real time. One Purchase event should appear with both "Browser" and "Server" sources matched via the same event_id. If you see two separate Purchase events with different event_id values, or two browser pixels firing, that is your double-count. Kill every stray pixel and make sure only the Shopify Facebook and Instagram app is firing events.
Should I switch Meta's attribution window to 7-day click to match Shopify?
No, and this is a trap a lot of operators fall into after their first reconciliation attempt. Switching Meta's attribution window to 7-day click only will shrink the reported-vs-Shopify gap on your dashboards, which feels clean. But it also removes view-through signal from Meta's campaign optimization, which weakens the algorithm's learning and usually costs you 10 to 20% in real performance over a few weeks. Best to leave Meta's in-platform attribution on the default 7-day click plus 1-day view so the algorithm has full signal. Then in your reporting dashboards, pull the 7-day-click number separately for comparison against Shopify. Two reports, one clean optimization setup.

Shopify attribution not matching Meta or Google is almost always the attribution window plus model difference doing what they were designed to do, not a bug. The fix is mostly a reading fix, not a technical one. Meta over-reports because it counts view-through and runs a multi-touch model. Shopify under-reports because it runs last-click and ignores view-through. The stable gap between them is the assist rate, which is a useful signal in itself. Real pixel bugs exist, and the 3-step diagnosis catches them in 20 minutes. Run it in order every time somebody panics about the gap. Most weeks the answer is "nothing is broken, the numbers are doing what they should." The weeks it is something broken, the diagnosis finds it fast. Trust each number for the decision it is built for, validate the stack with a quarterly geo holdout, and the attribution gap stops being the weekly fire it feels like right now.

Get a full X-ray of your ad account

Paste your Meta and Google Ads. See exactly where signal is leaking. Free. 60 seconds.

Start my audit
Dror Aharon
Dror Aharon
CEO, COREPPC

Ran paid media for 70+ Shopify brands. COREPPC manages $12M+ a year across Meta and Google for ecommerce and SaaS operators.