Knowledge base Attribution & measurement Why Meta over-reports conversions

Why Meta over-reports conversions — and how to find your real ROAS

If you've ever looked at your Meta Ads dashboard and then at your Shopify revenue and wondered why the numbers don't add up — you're not imagining it. Meta is over-reporting your conversions. Systematically, structurally, and by a larger margin than most marketers realise.

This isn't a bug. It's the result of how Meta measures attribution — and it got significantly worse after Apple's iOS 14.5 update in April 2021. In this guide, we'll explain exactly why it happens, how to calculate your real ROAS, and what to do once you find the gap.

"The average discrepancy between Meta-reported conversions and actual Shopify orders is 28%. For stores with longer purchase consideration cycles, it can exceed 50%."

Why Meta over-reports in the first place

Meta's attribution system is designed to give Meta credit for as many conversions as possible. That's not a conspiracy — it's simply how their measurement works. There are three main mechanisms driving the over-report:

1. View-through attribution

By default, Meta counts a conversion if someone saw your ad within the past day — even if they never clicked it. If that person then bought something from your store via Google search or organic traffic, Meta claims the credit. Your Google Ads campaign and your Meta campaign both count the same order.

2. Click-window attribution

Meta's default click attribution window is 7 days. That means if someone clicked your ad on Monday and bought something the following Sunday after visiting your site three more times via other channels, Meta counts that as a Meta conversion — even though the decisive touchpoint may have been a Google Shopping ad on Friday.

3. Cross-device and probabilistic matching

After iOS 14.5 restricted the IDFA (identifier for advertisers), Meta lost the ability to track users precisely across devices and apps. They replaced exact measurement with statistical modelling — essentially making educated guesses about which users converted based on aggregate patterns. This modelling is optimistic by design.

The iOS 14.5 effect

Before iOS 14.5, Meta could track individual users across apps using the IDFA. After the update, users had to opt in to tracking — and the vast majority didn't. Meta lost direct measurement for roughly 60–70% of iOS users. Their solution was probabilistic modelling, which inflates reported conversions because it systematically over-attributes.

What the gap actually looks like — a real example

Here's a typical monthly snapshot from a Shopify fashion brand spending $9,500/month on Meta Ads:

MetricMeta dashboardShopify truthGap
Conversions847612−235 (28%)
Revenue attributed$27,540$19,890−$7,650
Reported ROAS2.9x2.1x−0.8x
CPA$11.22$15.52+$4.30

This brand was making budget decisions based on a 2.9x ROAS. Their actual Shopify-truth ROAS was 2.1x — below their 2.5x target. They were scaling a campaign they should have been pausing.

How to calculate your Shopify-truth ROAS

The calculation itself is straightforward. What's hard is gathering the right numbers manually. Here's the manual approach, then a better one.

The manual method

  1. Go to your Shopify Analytics — Sales by channel or source
  2. Filter to the same date range as your Meta reporting period
  3. Find orders attributed to "paid social" or "facebook" as the traffic source
  4. Divide that Shopify revenue by your actual Meta spend from Ads Manager
  5. That's your Shopify-truth ROAS
Important caveat

The manual method has a significant limitation: Shopify's source attribution is also imperfect. It relies on UTM parameters being present on every ad click — if any of your Meta campaigns are missing UTMs, those orders will appear as "Direct" traffic in Shopify, making your Meta attribution look even worse than it is. Fix your UTMs first, then run this calculation.

The better method

A proper Shopify-truth ROAS calculation matches individual ad clicks (from GA4 session data) to individual Shopify orders using session IDs and timestamps. This approach:

  • Correctly handles multi-touch journeys (user saw Meta ad, clicked Google ad, bought)
  • Applies a consistent attribution model across all channels
  • Excludes view-through events by default
  • Deduplicates orders claimed by multiple channels
  • Updates automatically every day without manual exports

This is exactly what DataMaster does — matching your GA4 session history to Shopify transactions and applying your chosen attribution model consistently across every channel.

What to do once you find the gap

Finding out your Meta ROAS is 2.1x instead of 2.9x is useful information — but only if you act on it. Here's a practical framework:

Step 1 — Audit at campaign level, not channel level

The channel average is a starting point. What matters more is which specific campaigns are above or below your Shopify-truth ROAS target. A channel average of 2.1x might contain one campaign at 3.8x (worth scaling) and two campaigns at 0.9x (worth pausing immediately).

Step 2 — Set a Shopify-truth ROAS target

Your Meta target ROAS should be set based on your margin, not on what Meta says is achievable. A common approach: work backwards from your LTV:CAC target. If you need a 3:1 LTV:CAC ratio and your average order value is $120, your max acceptable CPA is $40, which implies a minimum ROAS of ~3.0x.

Step 3 — Reallocate, don't just cut

The point of finding the gap isn't to slash Meta spend — it's to reallocate it more intelligently. Campaigns with strong Shopify-truth ROAS can absorb more budget. Campaigns with weak Shopify-truth ROAS should be paused or reworked before scaling.

"One of our users found out Meta was over-reporting by 34%. They reallocated $6,000/month to their top Google Shopping campaign and their blended ROAS improved by 0.8x in 60 days."

Step 4 — Monitor the gap over time

The Meta/Shopify gap isn't static. It changes as your audience mix shifts, as Meta's modelling updates, and as iOS adoption changes. Check it monthly at minimum — the gap that was 22% in January might be 35% in June.

Summary

Meta over-reports conversions because of view-through attribution, broad click windows, and probabilistic matching post-iOS 14.5. The average gap is 28% — meaning most brands are making budget decisions based on numbers that are roughly a third too optimistic. The fix is to measure ROAS using actual Shopify orders, not platform-reported conversions, and to make every scaling and pausing decision based on that Shopify-truth number.

Key takeaways
  • Meta's default attribution includes view-through events — clicks that never happened
  • iOS 14.5 made this worse by forcing Meta to use probabilistic modelling
  • The average over-report is 28% — your true ROAS is likely lower than Meta claims
  • Fix your UTMs first, then calculate Shopify-truth ROAS using GA4 session data
  • Audit at campaign level — the channel average hides which campaigns to scale vs pause
  • Monitor the gap monthly — it changes over time

See your real Meta ROAS in 15 minutes

DataMaster connects your Shopify store and Meta Ads, matches every ad click to an actual order, and shows you the attribution gap automatically — updated every morning.

Start free trial — no credit card required
D
DataMaster Team
Written by the DataMaster analytics team. We work with hundreds of e-commerce brands on Shopify and WooCommerce to help them understand where their ad spend is actually going.

Related articles
← Back to Knowledge base Start free trial