"Meta says 50 conversions. Shopify shows 20. Stripe shows 22. Someone is lying and I think it's Meta."
— Source: r/PPC (234 upvotes)
Every ecommerce operator running Meta ads has seen this: the numbers don't match. Meta reports one revenue figure, Shopify reports another, and your bank account tells a third story.
The instinct is to blame Meta for inflating numbers. Sometimes that's right. But often the gap comes from seven specific technical differences in how each platform counts money. Some are harmless math. Some are hiding real problems.
This guide breaks down every source of discrepancy, shows you which gaps are normal, and gives you a framework to reconcile the numbers - so you stop making decisions on data you don't trust.
The 7 Sources of Shopify-Meta Mismatch
When Meta and Shopify disagree on revenue, the gap comes from one or more of these causes:
| Source | Direction | Typical Impact | Fixable? |
|---|---|---|---|
| Attribution window inflation | Meta shows MORE | 20-50% overclaim | Partially (change window) |
| View-through conversions | Meta shows MORE | 10-30% overclaim | Yes (report on click-only) |
| Timezone mismatch | Either direction | 5-15% daily variance | Yes (align settings) |
| Refund timing | Shopify shows LESS | $500-5K/month gap | No (structural) |
| Currency rounding | Either direction | 1-3% variance | No (accept it) |
| Subscription orders | Shopify shows MORE | Varies widely | Yes (event configuration) |
| CAPI deduplication failure | Meta shows MORE | 5-20% overclaim | Yes (fix dedup) |
Let's break down each one.
Timezone Mismatches: The Silent Daily Drift
Meta Ads Manager uses your ad account's timezone. Shopify uses your store's timezone. If these don't match exactly, every daily report will disagree.
A sale at 11:30 PM EST on January 15th is January 16th in Meta if your ad account is set to UTC. That sale appears in different daily reports on each platform.
- Daily revenue reports will never match perfectly
- Weekly and monthly reports get closer but still drift at boundaries
- The gap is worst for stores with high late-night sales volume
- Check Meta ad account timezone: Ads Manager → Account Settings → Time Zone
- Check Shopify timezone: Settings → General → Store defaults → Time zone
- Align both to your business's primary timezone
- Warning: Changing Meta's timezone can't be undone without contacting support
Quick test: If your daily numbers are off but weekly totals are close, timezone is likely the culprit.
Refund Timing: The Revenue That Appears and Disappears
This is one of the most misunderstood sources of discrepancy - and it's structural, meaning you can't fully fix it.
Customer buys on January 15. You refund on March 15.
- Meta: Counted the conversion on January 15. Never adjusts retroactively. January stays inflated forever.
- Shopify: Deducts from March revenue. March looks worse than it actually was.
- Result: January looks better in Meta than Shopify, and March looks worse in Shopify than reality.
For stores with 10-20% return rates, this can create a persistent 10-20% gap between Meta-reported revenue and Shopify net revenue. The higher your return rate, the worse this gets.
- Track your average return rate and apply it as a discount to Meta-reported revenue
- Compare Meta revenue to Shopify gross revenue (before refunds), not net
- Build refund lag into your reporting: "Meta January revenue minus expected 15% returns = adjusted revenue"
- Monitor return rate trends monthly - if it's climbing, the gap widens automatically
Currency Conversion & Tax Treatment
If you sell in multiple currencies (common for international Shopify stores), conversion happens at different moments:
- Meta converts at ad interaction time
- Shopify converts at checkout time
- Exchange rates differ between these moments
- Small rounding errors compound across thousands of transactions
This typically creates 1-3% variance. Not worth fixing - just know it exists.
The bigger trap:
- Shopify can report with or without tax depending on your reporting settings
- Meta reports the purchase value you send via pixel/CAPI - which may or may not include tax
- If your pixel fires with tax-inclusive prices but Shopify reports tax-exclusive, you'll see a consistent 5-20% gap (depending on tax rate)
- Check what value your purchase event sends: Settings → Checkout → Order processing
Attribution Window Inflation: Meta's Biggest Overclaim
This is usually the largest source of discrepancy and the most misunderstood.
Default Meta attribution: 7-day click + 1-day view. This means Meta takes credit for any sale that happens:
- Within 7 days of someone clicking your ad
- Within 1 day of someone seeing your ad (without clicking)
- Even if the customer came back through Google search, email, or direct
Customer journey: Sees Meta ad Monday → Clicks Google ad Wednesday → Gets Klaviyo email Thursday → Buys Friday.
- Meta claims it (view-through, within 1 day? No. But within 7-day click if they clicked a different ad)
- Google claims it (click-through, within 30 days)
- Klaviyo claims it (last-click email)
- You had 1 order. Platforms reported 2-3 "conversions."
- Switch Meta reporting to 1-day click only for a cleaner comparison
- Compare Meta 1DC numbers to Shopify - this will be your tightest match
- Accept that 7DC numbers will always be higher than Shopify by 20-50%
- Use blended MER (total revenue ÷ total ad spend) for budget decisions
Subscription Order Gaps
If you sell subscriptions (Recharge, Skio, Loop, etc.), this creates a unique reconciliation problem.
- Meta tracks the initial conversion only - the first subscription order
- Shopify records every recurring charge as a new order
- After Month 1, Shopify revenue from subscriptions grows while Meta's attributed revenue stays flat
- This makes Meta's ROAS look worse over time (it's not - it just can't see recurring revenue)
- Track subscription LTV separately from Meta-attributed first purchase
- Calculate true Meta ROAS as: (First purchase + projected LTV) ÷ ad spend
- If 30% of your revenue is recurring, Meta is underreporting your actual return by ~30%
CAPI Deduplication Failures
If you're running both Meta Pixel (browser-side) and Conversions API (server-side), you may be double-counting events.
- Both Pixel and CAPI fire a "Purchase" event for the same order
- Meta is supposed to deduplicate them using an event_id parameter
- If event_id doesn't match between Pixel and CAPI, Meta counts both
- Result: Meta shows 2x the actual conversions for affected orders
- Meta conversions are >2x Shopify orders (not just 1.3-1.5x)
- Event Manager shows both "browser" and "server" events with different event IDs
- Revenue jumps happened when you implemented CAPI
- Sudden "performance improvement" that doesn't match actual sales
- Check Events Manager → Diagnostics → look for deduplication warnings
- Ensure event_id is identical between Pixel and CAPI for the same event
- If using Shopify's native CAPI integration, this is usually handled - but verify
- If using a third-party app (Elevar, Trackify), check their dedup configuration
- Test by placing a test order and checking if 1 or 2 events appear in Events Manager
The Reconciliation Framework
Use this step-by-step process to reconcile your numbers:
- Pull Shopify gross revenue (before refunds) for the period
- Pull Stripe/payment processor total for the same period
- These should match within 1-2%. If they don't, fix Shopify first.
- In Ads Manager, change attribution setting to 1-day click only
- This removes view-through inflation and gives you the tightest comparison
- Note this number as "Meta 1DC Revenue"
- Healthy range: Meta 1DC = 70-130% of Shopify (attributable to Meta traffic)
- If Meta shows MORE than Shopify total: dedup issue or event misconfiguration
- If Meta shows much LESS than expected: CAPI/Pixel not firing, EMQ too low
| Gap Pattern | Likely Cause | Next Step |
|---|---|---|
| Meta ~2x Shopify | CAPI dedup failure | Check Events Manager dedup |
| Meta 1.3-1.5x Shopify | Normal attribution overclaim | Acceptable - no action |
| Daily numbers off, weekly close | Timezone mismatch | Align timezone settings |
| Gap grows over time | Refund timing + subscriptions | Track refund rate, add LTV |
| Consistent 5-20% gap | Tax inclusion mismatch | Check pixel purchase value |
| Meta shows much less | Broken tracking / low EMQ | Check CAPI diagnostics |
What's Normal vs What's Broken
| Discrepancy Range | Status | Action |
|---|---|---|
| Meta within ±15% of Shopify (1DC) | Normal | No action needed |
| Meta 15-40% higher (7DC) | Expected | Normal for 7-day click window |
| Meta 40-80% higher | Suspicious | Check dedup, view-through, tax settings |
| Meta >2x Shopify | Broken | CAPI dedup failure almost certain |
| Meta >50% lower than expected | Broken | Pixel/CAPI not firing, check EMQ |
The goal isn't perfect match. It's understanding the gap well enough to make confident budget decisions. If you know your Meta 7DC overclaims by ~35% and your refund rate is 12%, you can calculate true Meta-attributed revenue with reasonable confidence.
Stop Reconciling Spreadsheets. Start Getting Answers.
Manual reconciliation works once. But doing it daily? Weekly? That's hours of spreadsheet work that still doesn't give you confidence in the numbers.
Automated Shopify-Meta reconciliation.
Ask Niblin's AI agent "why don't my Meta numbers match Shopify?" and get a breakdown by source - timezone, refunds, attribution, dedup - computed from your actual data. No spreadsheets. No guessing. $299/mo to start.
Start Free Trial - 15 Minute Setup
Key Takeaways
- Seven specific technical causes explain the Shopify-Meta revenue gap: attribution windows, view-through, timezones, refunds, currency, subscriptions, and CAPI dedup
- A 15-25% discrepancy between Meta (7DC) and Shopify is normal - don't panic
- If Meta shows >2x Shopify orders, you almost certainly have a CAPI deduplication failure
- Switch to 1-day click attribution in Ads Manager for the most accurate Shopify comparison
- Refund timing creates a structural gap that can't be fully fixed - account for it with your return rate
- Tax inclusion settings between Pixel and Shopify are a hidden 5-20% gap most stores miss
- Use blended MER for budget decisions instead of platform-reported ROAS
Frequently Asked Questions
Why does Meta show different revenue than Shopify?
Seven main causes: attribution window differences (Meta claims credit for 7 days post-click), view-through conversions, timezone mismatches between platforms, currency conversion rounding, refund timing differences, subscription order handling, and tax inclusion/exclusion settings.
Should I trust Meta or Shopify revenue numbers?
Trust Shopify for actual revenue (it records real transactions). Use Meta numbers directionally for campaign optimization. A 15-25% discrepancy is normal. Above 40% usually indicates broken tracking, misconfigured CAPI, or pixel issues that need investigation.
What is a normal discrepancy between Meta and Shopify?
On 1-day click attribution, Meta should be within ±15% of Shopify-attributable revenue. On 7-day click, Meta typically shows 20-50% more. Anything above 2x usually means CAPI deduplication is broken and events are being double-counted.
How do I fix Meta and Shopify data mismatch?
Align timezones between platforms, verify tax inclusion settings match, check CAPI deduplication in Events Manager, switch to 1-day click for cleaner comparison, and account for refund timing by tracking your return rate. Some gap is structural and can't be eliminated.
By