Meta Reports 47 Purchases but Shopify Shows 31: How to Reconcile the Gap Honestly
- info wittelsbach
- 5 days ago
- 4 min read
Meta dashboard: 47 purchases, ROAS 3.4x. Shopify: 31 paid orders, ROAS 2.2x. You spent ₹1.2L. Where are the missing 16 orders? Are they real and Shopify is missing them, or are they ghost orders inflating Meta's numbers?
This gap shows up in 80% of Indian D2C accounts. Most brands either ignore it (scale on Meta's number and lose money) or panic-revert (scale based on Shopify and miss real attribution). Here's the honest reconciliation.
First: Confirm Both Numbers Are From the Same Window
Most 'gaps' aren't gaps — they're window mismatches.
Time zone mismatch — Meta uses account time zone, Shopify uses store time zone. A 4-hour offset can shift orders across day boundaries.
Attribution window — Meta default is 7-day click + 1-day view. Shopify shows the order date, not the attribution date.
Date filter alignment — 'Last 7 days' in Meta vs Shopify can mean different calendar dates.
Currency reporting — see [INR vs USD currency confusion](https://www.wittelsbach.ai/post/inr-vs-usd-currency-confusion-in-meta-ads-dashboards-and-the-fix) if values look off.
Align both reports to the same UTC window before comparing.
The 6 Root Causes of the Gap
1. Pixel Duplicate Firing
If your pixel fires Purchase twice per order, Meta reports 47 against Shopify's actual 31. The gap (16) is roughly half of Meta's count, which is the duplicate signature.
Check: Pixel Helper on a test order. See [pixel cleanup guide](https://www.wittelsbach.ai/post/meta-pixel-helper-activated-7-times-single-page-clean-up-d2c).
2. Multi-Attribution Window Overlap
A user clicks the ad on Day 1, doesn't buy. Clicks again on Day 3, buys. Meta credits the campaign once. Shopify credits the order once. But if the user is attributed to both Day 1 and Day 3 ad sets, Meta's purchase count rises while Shopify's doesn't.
Check: Group conversions by ad set. If two ad sets each claim the same order, the inflated count is real attribution duplication.
3. View-Through Conversions
Default Meta attribution includes 1-day view-through. If a user saw your ad but bought from a Google search, Meta still credits the purchase. Shopify credits Google (or 'direct'). The gap is real but the attribution is overlapping.
Check: Toggle attribution to '7-day click only' and watch the count drop. The delta is your view-through inflation.
4. Failed Payments Counted as Purchases
Meta's pixel fires the 'Purchase' event the moment the thank-you page loads. If the order later fails (UPI declined, COD refused), the pixel fire isn't reversed. Shopify removes the order. Meta keeps it.
Check: Pull orders in Shopify with 'voided' or 'declined' status in the same window. If the count matches the gap, that's the cause.
5. Cart Recovery Apps Double-Counting
Klaviyo, Recart, and similar tools sometimes fire their own Meta pixel events alongside Shopify's. The same order shows up twice in Meta's view because two systems reported it.
Check: Audit apps installed in Shopify > Customer Events. Disable any redundant pixel firings.
6. Test Orders or Internal Traffic
Internal QA orders, team member test purchases, or staging-environment events sometimes hit production pixels. Meta counts them. Shopify shows them as 'test' orders or filters them out.
Check: Add exclusion filters for internal IPs and staff emails in pixel setup.
The Reconciliation Workflow
Use this in order. Each step closes a portion of the gap.
Align time zones between Meta and Shopify reports. Re-pull both.
Toggle Meta to 7-day click only, no view-through. Re-pull.
Filter Shopify orders to 'paid' status only. Drop voided, refunded, declined.
Subtract test orders (staff emails, known IPs).
Compare Meta vs Shopify with these aligned filters.
The remaining gap is your true attribution overlap — usually 10-25% in healthy accounts.
What Number to Trust for Scaling Decisions
Neither raw number is the answer. The disciplined approach:
Use Shopify's revenue as ground truth for true sales.
Use Meta's click-attributed conversions for budget allocation across campaigns.
Discount Meta's view-through credits by 50-70% when calculating real ROAS.
Calculate 'blended ROAS' = Total Shopify revenue / Total Meta spend. This is your honest scaling metric.
Blended ROAS is almost always 20-40% lower than Meta's reported ROAS. Plan budgets and unit economics off the blended number.
Implement CAPI to Shrink the Gap
Most gap is iOS attribution loss + duplicate firing. Both shrink when you implement Conversions API with proper deduplication. See our [CAPI setup guide](https://www.wittelsbach.ai/post/conversion-api-capi-for-meta-ads-complete-india-d2c-setup-guide). Expect the gap to compress by 40-60% within 14 days of clean CAPI implementation.
How Wittelsbach AI Auto-Reconciles Meta and Shopify
Bach AI pulls both feeds, aligns time zones, deduplicates events, and shows you the honest blended ROAS — daily, by campaign. No more spreadsheets. Try Bach AI on your account at [app.wittelsbach.ai](https://app.wittelsbach.ai).
Frequently Asked Questions
How much gap between Meta and Shopify is normal?
10-25% is normal and healthy. Meta typically over-reports by 15-20% due to view-through credits, multi-attribution, and iOS approximation. Gaps above 40% signal a real measurement problem — usually pixel duplication, failed-payment double-counting, or app-level pixel conflicts. Gaps below 5% often mean your view-through window is set too narrow, missing legitimate attribution.
Should I use Meta's 1-day click attribution to reduce the gap?
Only if you want a conservative budget allocation. 1-day click attribution shrinks the gap but also undercounts real conversions that happen 2-7 days after the click — common for high-AOV D2C purchases (₹2,000+). The standard approach: report on 1-day click for board metrics, optimize campaigns on 7-day click. Switching mid-campaign causes large data discontinuities.
Does Conversions API guarantee Meta and Shopify will match exactly?
No. Even with perfect CAPI, view-through conversions and multi-attribution will keep Meta's count higher than Shopify's. CAPI closes the iOS gap (typically 15-25 percentage points) but doesn't eliminate the structural attribution differences. After CAPI, expect a stable 10-15% gap. That gap is the value of Meta's view-through and assisted-touch attribution — not noise.
How do I decide if a Meta campaign is profitable when the numbers disagree?
Use blended ROAS as the final word: Total Shopify revenue ÷ Total Meta spend (for that campaign's date range). If blended ROAS exceeds your unit economics target (typically 2.0-2.8x for most D2C brands), the campaign is profitable. If Meta's reported ROAS is 3.5x but Shopify-attributed revenue gives blended 1.6x, you're losing money despite the dashboard looking healthy.
Can I exclude test orders from both Meta and Shopify reports?
Yes. In Meta, configure pixel to exclude internal IPs and staff Facebook user IDs from event tracking. In Shopify, use customer tags ('staff', 'test') and exclude those tags from your reporting. For both systems, run a quarterly audit of test orders — they accumulate silently and can skew small-account numbers by 5-15%. Document a list of internal emails/phones used for QA and update it whenever the team changes.




Comments