i launched a new client account last month and had 5 purchases inside the first hour. for about ten minutes it was the best launch i’d ever run. then i opened shopify, saw the orders weren’t there, and spent the rest of the afternoon in the tracking setup instead.
it wasn’t broken. it was attribution, and it’s the single most common reason these two numbers disagree.
01the short answer
meta ads purchases don’t match shopify orders because the two platforms measure different things. meta counts conversions it can attribute to an ad within its attribution window, including view-through conversions and modelled estimates. shopify credits the last non-direct channel before the order, over a 30-day window, and counts only what it can observe. a gap is expected. a gap that changes size from week to week is a tracking problem.
below: every reason the numbers split, how big the gap should be, how to tell attribution from a broken setup, and which number belongs in your monthly reporting.
02why meta ads purchases don’t match shopify orders
1. the attribution windows are different
in ads manager, the attribution setting sits at the ad set level. the default is 7-day click and 1-day view. the options are a 1-day or 7-day click window, plus a 1-day view window or none.
shopify’s marketing reports look back 30 days of sessions. if no purchase happens in 30 days, attribution resets to whatever source comes next. so the two platforms are looking at different stretches of time for the same order.
2. meta counts views, not just clicks
with the default setting, someone can scroll past your ad without clicking, buy a few hours later, and meta counts that purchase. shopify credits whatever source actually brought them to the site, or files it as direct.
that was my launch. five purchases, no clicks behind them. people saw the ads, went to the store on their own, and bought. meta was right that the ads were involved. shopify was right that nothing arrived from a meta link. on a brand new account with a small audience it looked alarming, because view-through conversions are a bigger share of the total when click volume is still tiny.
3. shopify uses last non-direct click
shopify’s marketing reports use last non-direct click by default. last click, first click, any click, and linear are available in the same report if you want to compare models, which is worth doing once so you can see how much the choice moves your paid numbers.
the practical effect: any order where the customer clicked an ad first and came back through email, organic search, or a paid search brand term gets credited elsewhere.
4. meta models the conversions it can’t see
when meta can’t observe a purchase directly, because of app tracking permissions, browser restrictions, or consent choices, it estimates. those estimates are included in your reported purchases. shopify never estimates.
5. what counts as a click changed in march 2026
meta narrowed click-through attribution to link clicks, and moved likes, shares, saves, and qualified video views into a separate engage-through bucket. if your reported click conversions dropped this spring and nothing in the account changed, that’s why.
6. untagged links land in direct
shopify identifies a session from the referrer or the utm parameters on the link. anything untagged, plus most in-app browser traffic, gets grouped as direct. that’s paid traffic shopify can’t credit to paid.
7. time zones, currency, refunds, and other channels
- time zone. ads manager reports in your ad account’s time zone, which is set when the account is created. shopify reports in your store’s. if they differ, every daily number is offset.
- currency. if the ad account and the store bill in different currencies, the revenue figures won’t line up even when the order counts do.
- refunds and cancellations. meta counts the purchase event at checkout and doesn’t remove it later. shopify’s net sales do.
- everything else in the store. shopify’s total sales include POS, wholesale, subscriptions, and repeat customers who never saw an ad.
meta is a decision tool. it tells the delivery system which creative and which audiences produce results, and it’s good at that. it was never built to be your books.
03how big should the gap be?
there’s no official benchmark, and anyone who gives you one is guessing about your store. in the accounts i run, meta typically reports somewhere between 10% and 40% more purchases than shopify credits to meta, and higher when a lot of spend sits in prospecting or video.
the number that matters is the ratio, not the size. track it weekly. if meta consistently reports 1.3x shopify’s meta-attributed orders, that’s your baseline, and you can report against it. if it jumps to 2.1x in a week, something broke.
04meta vs. shopify, side by side
| meta ads manager | shopify | |
|---|---|---|
| what it counts | conversions it can attribute to an ad. | orders placed in your store, from every channel including POS. |
| what counts as a touch | a link click on an ad, or an impression the person didn’t click. | a session that arrived with a tracked link or a referrer. |
| who gets the credit | the ad, even if the person came back later through search, email, or direct. | the last non-direct channel before the order. |
| how far back it looks | 7 days after a click, 1 day after a view, by default. | 30 days of sessions. |
| gaps in the data | filled in with modelled conversions. | nothing. untagged traffic is grouped as direct. |
| refunds | not deducted from reported purchases. | reflected in net sales reporting. |
| time zone | your ad account’s time zone, set when the account was created. | your store’s time zone. |
| what it’s good for | deciding which ads, audiences, and creative get budget. | reporting what the business actually sold. |
05how to reconcile meta ads and shopify in 20 minutes
do this once a month, at the same time, with the same settings.
- match the dates and the time zone. pull the same calendar month from both, and note the time zone on each. if they differ, compare full months rather than days.
- write down the attribution setting on every ad set. if some are 7-day click and 1-day view and others are 1-day click, your totals aren’t comparable to anything, including last month.
- pull meta: purchases, purchase conversion value, and spend for the month.
- pull shopify: the marketing report, filtered to the meta or facebook channel, in last non-direct click, for the same month.
- divide. meta purchases divided by shopify meta-attributed orders. that’s your ratio. log it in the same sheet each month.
- add the blended row: total revenue, total ad spend, and revenue divided by spend (mer). no attribution involved.
- check direct. if direct traffic is climbing while paid spend climbs, your paid links probably aren’t tagged.
this is the first thing i set up in any e-commerce engagement, before touching a campaign, because every budget decision after it depends on which number people are looking at.
06which number to run the business on
pick one number for the business and one for the ad account, and write down which is which.
- the business number: mer. total revenue divided by total ad spend for the month, across every channel. this tells you whether paid is working at the level your margin needs.
- the account number: platform roas and cost per purchase. used only to compare ads, audiences, and campaigns against each other, inside the same platform, over the same window.
the strongest test is neither dashboard: hold budgets flat for a few weeks, then raise or cut one channel and watch total revenue. slower than a dashboard, and it answers the question a dashboard can’t.
07when the gap is a real tracking problem
my launch turned out to be attribution, which is the usual answer. the way i checked took about five minutes: i switched the attribution setting to 1-day click, watched four of the five purchases disappear from the report, and knew they were view-through rather than a broken pixel.
these are the ones that aren’t attribution, and are worth chasing:
- the ratio between the two swings week to week without a change in spend or creative mix.
- shopify shows orders from a campaign meta reports zero purchases for.
- meta reports purchases at times your store shows no orders at all.
- direct traffic climbs every time you raise paid budgets.
- purchase events fire more than once per order, or the purchase value doesn’t match the order total.
start with the pixel and the conversions api setup, event deduplication, and your utm tagging, in that order. a conversion problem that looks like a creative problem is often this instead.
08common questions
why does meta show more purchases than shopify?
meta counts a purchase when someone clicked or viewed an ad inside its attribution window, even if the order later came through search, email, or a direct visit, and it fills gaps with modelled conversions. shopify credits the last non-direct channel before the order and counts only what it can see. meta’s number is almost always higher.
is meta lying about my roas?
no. it’s answering a different question. meta reports what its ads influenced under its own attribution rules. shopify reports what was sold. neither is designed to reconcile with the other.
what attribution window should i use for shopify stores?
most dtc accounts run the default 7-day click and 1-day view. 1-day click makes meta’s numbers look closer to shopify’s, but it also changes what the delivery system optimizes toward, so treat a switch as a test with a start date, not a reporting tweak.
does the conversions api fix the discrepancy?
it improves event matching, which usually recovers reported conversions that browser tracking misses. it does not make the two platforms agree, because they still use different windows and different credit rules. if you set it up, use event ids so browser and server events deduplicate.
does shopify track facebook ads?
shopify tracks sessions and orders, and identifies the source from the referrer or utm parameters on the link. it does not see impressions, clicks that didn’t land, or anything meta modelled. untagged paid links get filed as direct.
what is mer and how is it different from roas?
mer, or marketing efficiency ratio, is total revenue divided by total ad spend across all channels. no attribution involved. roas is platform-reported and attribution-dependent. mer is the number to run the business on.
how much of a gap is normal between meta and shopify?
in the accounts i run, meta usually reports somewhere between 10% and 40% more purchases than shopify credits to meta. what matters is whether that ratio holds steady. a stable gap is attribution. a gap that jumps in a week is usually tracking.
should i just turn off the pixel and go by shopify?
no. without conversion data, meta’s delivery system has nothing to optimize toward, and performance drops. keep the tracking, and change what you report on.
if your dashboards disagree and you’re not sure which one to act on, let’s chat.
sources: shopify marketing reports ↗ · ga4 attribution settings ↗ · meta on click attribution ↗
