Skip to content
Tracking and attribution

Why Meta Ads and Shopify Never Agree on Your Sales (and Which to Trust)

Meta reports purchases Shopify can't find, and Shopify shows sales Meta never saw. The seven causes of the gap and which number to trust for each decision.

Updated 6 min readBy Tera Ads editorial teamFacts checked

On this page
  1. What each system is measuring
  2. The seven causes of the gap
  3. Which number to trust for which decision
  4. How to reconcile the two in 20 minutes
  5. Make one screen the source of truth
  6. Frequently asked questions

Meta Ads and Shopify disagree because they count different things: Shopify records every order your store took, once, on the day it was placed, while Meta counts purchases it can connect to an ad click or view inside its attribution window, dated to the ad interaction, and modelled when tracking is incomplete. Neither is broken. For revenue and profit, trust Shopify. For comparing campaigns inside Meta, use Meta, checked against Shopify.

Key takeaways

  • Shopify is the record of what was sold. Meta is an estimate of what its ads influenced.
  • The gap usually comes from attribution windows, view-through credit, modelled conversions, timing and cross-channel double counting.
  • Meta and Google can both claim the same order, so platform totals add up to more than your store sold.
  • In India, RTO adds another gap: Meta counts orders that are never delivered.
  • Use Shopify (after returns) for revenue and profit, and platform data, checked against UTM-tagged orders, for campaign decisions.

What each system is measuring

Shopify's order list is the closest thing you have to the truth about sales. Every order appears once, with its value, discounts, taxes, payment method and status. It doesn't know which ad caused it, beyond the last tracked referrer or UTM tags on the visit.

Meta's purchase count is a different object. When someone buys, the Meta pixel (in the browser) and the Conversions API (from your server, if set up) send a purchase event. Meta then asks: did this person click or see one of our ads inside the attribution window? If yes, the purchase is attributed to that ad, dated to when the ad was clicked or seen. When Meta can't match an event to a person, for example because of browser privacy features, it may estimate (model) the conversion.

So the two numbers answer different questions: "what did my store sell?" and "what does Meta believe its ads influenced?"

The seven causes of the gap

Why Meta Ads and Shopify report different sales.
CauseEffect on Meta vs ShopifyHow big it can be
Attribution window (click and view)Meta credits sales days after the ad interactionLarge for considered purchases
View-through creditMeta counts people who saw an ad and bought later without clickingLarge for brands with heavy prospecting
Cross-channel double countingMeta and Google both claim the same orderPlatform totals often exceed store sales
Modelled conversionsMeta estimates purchases it can't observeVaries with tracking quality
Date of attributionMeta dates the sale to the ad interaction, Shopify to the orderDays shift between reports
Tracking gapsMissing pixel or Conversions API events, ad blockersMeta under-reports
Cancellations, returns and RTOMeta keeps the purchase; Shopify or your courier records it as lostLarge for COD-heavy Indian brands

Attribution windows and view-through

Meta's default attribution setting has long been 7-day click and 1-day view. In 2026 Meta narrowed what it reports: the 7-day and 28-day view-through windows stopped returning data in its Ads Insights API from 12 January 2026 (PPC Land). Even so, a 1-day view window means someone who scrolled past your ad and bought the same day through a Google search can be counted as a Meta purchase. Check the attribution setting in your own Ads Manager columns before comparing numbers.

Double counting across platforms

Google Ads applies its own attribution to the same order. A buyer who clicks a Shopping ad and later an Instagram ad can be claimed by both. That is why adding Meta and Google revenue often gives you more than Shopify shows, which is the main argument for running total budget on MER instead of summed ROAS.

Where the gap between Meta-reported and Shopify sales comes from, in an illustrative month
Where the gap between Meta-reported and Shopify sales comes from, in an illustrative month

Timing

Meta dates a conversion to the day of the ad click or view; Shopify dates it to the order. A click on 30 September followed by a purchase on 2 October is a September sale in Meta and an October sale in Shopify. Over a month this evens out; over a day or a week it can make a campaign look very good or very bad.

Tracking gaps

The opposite gap happens too. If your pixel misses events (theme changes, checkout extensions, ad blockers) and the Conversions API isn't set up, Meta sees fewer purchases than happened and under-credits its ads. A Meta purchase count far below your UTM-tagged Shopify orders from Meta is a sign of broken tracking, not weak ads.

RTO and cancellations

In India this is often the biggest gap that nobody puts on the chart. Meta counts the purchase at checkout. If that cash-on-delivery order is refused at the door, Meta never hears about it. Industry data puts RTO on COD orders at about a quarter of shipments (Shipway ShipNotes coverage), so a COD-heavy campaign can overstate kept revenue by 20% or more. The full method for correcting it is in true ROAS after RTO and COD.

Which number to trust for which decision

Which source to trust for each decision.
DecisionNumber to use
How much did we sell?Shopify, net of cancellations, refunds and RTO
Are we profitable after ads?Shopify revenue after returns, minus total ad spend and costs
How much to spend in total?MER on delivered revenue
Which Meta campaign to scale?Meta's campaign ROAS, checked against Shopify orders with Meta UTMs
Is our tracking working?Meta purchases vs Shopify orders tagged with Meta UTMs

How to reconcile the two in 20 minutes

  1. Tag every ad link with UTM parameters. Meta supports dynamic URL parameters, so campaign and ad names flow into Shopify sessions automatically.
  2. Pick one week, at least 10 days ago. That gives attribution windows and cancellations time to settle.
  3. Count Shopify orders with utm_source set to Meta (facebook, instagram, fb, ig) and their net revenue.
  4. Compare with Meta's purchases and purchase value for the same dates. Note your attribution setting.
  5. Read the ratio, not the difference. If Meta reports 1.3x the UTM-tagged revenue, that ratio is your "Meta inflation factor" for this account. Track it monthly; a sudden jump usually means a tracking or attribution change.
  6. Subtract RTO from the Shopify side to see delivered revenue, then compare again.
Four steps to reconcile Meta purchases with Shopify orders
Four steps to reconcile Meta purchases with Shopify orders

UTM-based numbers under-count too (people switch devices, clear cookies, or come back through a Google search), so the truth sits somewhere between the two. The aim is not to make them match; it's to know how far apart they normally are, so you notice when something breaks.

Make one screen the source of truth

The practical answer for most brands is to stop flipping between tabs. Tera Ads shows Shopify sales, Meta Ads and Google Ads spend, and profit after returns on one screen, with every campaign from both platforms in one table, winners and money-wasters marked. Orders appear about a second after checkout, Meta spend updates every 30 minutes and Google every hour. It is free for one business.

With revenue from Shopify and spend from the platforms, you can see which campaigns are really paying, and find the ad spend that isn't.

Frequently asked questions

Why does Meta show more purchases than Shopify?

Usually because of view-through credit, attribution windows that credit sales days after the ad, modelled conversions, and double counting with Google Ads. In India, Meta also keeps purchases that were later refused as RTO.

Why does Meta show fewer purchases than Shopify?

Most often a tracking problem: the pixel misses events, the Conversions API isn't set up, or ad blockers stop the browser event. Also remember that Shopify counts every sale, including organic and repeat orders that no ad influenced.

Is Meta's reported ROAS fake?

No, but it is Meta's estimate of the sales its ads influenced, using Meta's own rules. Treat it as a way to compare Meta campaigns with each other, not as your revenue.

Should I use Shopify's attribution report instead?

Shopify's marketing reports use the visits it can see, so they under-credit ads that people see but don't click. They are a useful middle view, not the final answer.

Will setting up the Conversions API fix the mismatch?

It reduces the tracking-gap part, so Meta sees more of the purchases that happen. It won't remove differences from attribution windows, double counting or RTO.

How often should I check the gap?

Once a month is enough, plus whenever you change your theme, checkout or tracking setup. A sudden change in the ratio is the signal to investigate.

See what your ads really earn.

Connect your store and ad accounts. Free for one business, no card needed.

Create free account