Your Ads Manager shows 50 conversions. Your store shows 85 orders. Which number is real?
Or worse: Meta shows zero conversions, but you know ads are driving sales.
Attribution and tracking issues are the most frustrating problems in Meta ads. You can't optimize what you can't measure. This guide shows you how to diagnose and fix every major tracking issue.
If you've ruled out tracking as the issue, use our ROAS diagnostic framework to find the real problem.
Common Tracking Issues & Symptoms
| Symptom | Likely Cause | Jump to Fix |
|---|---|---|
| Zero purchases showing in Ads Manager | Pixel not firing or event not configured | Section 1 |
| Purchases lower than actual orders | iOS 14+ privacy / ad blockers | Section 2 |
| Duplicate conversions (2x actual) | Pixel firing twice / CAPI + pixel misconfigured | Section 3 |
| Conversions attributed to wrong ads | Attribution window mismatch | Section 4 |
| Events delayed by 24-48 hours | CAPI not set up / server delay | Section 5 |
| High spend, no tracked conversions | Broken checkout / events not reaching Meta | Section 1 |
Section 1: Pixel Not Firing (Zero Conversions)
Step 1: Verify Pixel Installation
How to check:
- Install Meta Pixel Helper Chrome extension
- Visit your website
- Check if the extension shows your pixel firing (green checkmark)
- Go to checkout, complete a test purchase
- Verify "Purchase" event fires
Quick Test
Use Meta Events Manager → Test Events. Enter your website URL, browse and checkout. Events should appear in real-time.
Step 2: Check Events Manager
Go to Events Manager → Data Sources → Your Pixel → Overview
Check:
- Is "Purchase" event listed and active?
- Are events showing in last 24 hours?
- Any warning icons? (Click for details)
If events aren't showing:
| Issue | Fix |
|---|---|
| Pixel not installed | Add pixel code to tag or use Shopify Meta app |
| Purchase event not configured | Add fbq("track", "Purchase") to order confirmation page |
| Event showing but no parameters | Add value and currency parameters (required for ROAS) |
Step 3: Verify Event Parameters
Purchase events MUST include these parameters for ROAS tracking:
- value (order total)
- currency (USD, EUR, etc.)
- content_ids (product SKUs, optional but recommended)
Example correct purchase event:
Correct Purchase Event Code
fbq("track", "Purchase", {
value: 49.99,
currency: "USD",
content_ids: ["SKU123"]
});
Check in Events Manager → Event Details. If "value" is missing, conversions won't show ROAS.
Section 2: iOS 14+ Privacy Issues (Under-reporting)
Since iOS 14.5, Apple's App Tracking Transparency (ATT) blocks pixel tracking for users who opt out. This causes 20-40% under-reporting on average.
Symptoms:
- Meta shows fewer conversions than your store
- Gap widened after April 2021
- Mobile traffic under-reports more than desktop
Solutions:
Solution 1: Set Up Conversions API (CAPI)
What it does: Sends conversion data directly from your server to Meta, bypassing browser tracking.
How to set up (Shopify):
- Install Meta "Pixel & Conversions API" app from Shopify App Store
- Connect your Meta Business account
- Enable "Maximum Event Matching"
- Generate access token and connect
- Test with a purchase (should show "Server" event in Events Manager)
Expected improvement: Recovers 15-30% of lost conversions
CAPI is Essential
If you're not using CAPI in 2026, you're losing 20-40% attribution accuracy. Set it up immediately.
Solution 2: Use Aggregated Event Measurement
Meta's workaround for iOS 14+. Prioritizes which events to track when pixel is limited.
How to configure:
- Go to Events Manager → Aggregated Event Measurement
- Verify your domain is verified (required)
- Prioritize "Purchase" as Event 1 (highest priority)
- Add "InitiateCheckout", "AddToCart" as Events 2-3 if needed
You can track max 8 events, but only top priority matters for campaigns.
Solution 3: Accept Under-reporting (Use Blended ROAS)
Sometimes you can't fix attribution. Instead, calculate blended ROAS to see true performance.
Blended ROAS Formula
Blended ROAS = Total Store Revenue ÷ Total Ad Spend
Use your actual Shopify/Amazon revenue, not Meta's reported conversions.
Compare Meta ROAS to Blended ROAS weekly. If blended is 20-40% higher, that's your iOS attribution gap.
Track blended ROAS with marketing analytics to see real performance across all channels.
Section 3: Duplicate Conversions (2x Actual)
Problem: Meta shows 100 conversions but you only had 50 orders.
Common causes:
- Pixel and CAPI both firing (not deduplicated)
- Pixel code installed twice on the same page
- Order confirmation page reloads, triggering event again
- Test purchases not filtered out
How to fix:
Fix 1: Enable Event Deduplication
When using CAPI + Pixel, you MUST deduplicate to prevent double-counting.
How it works: Both pixel and CAPI send the same event, but with a unique event_id. Meta deduplicates based on the ID.
Implementation (Shopify):
- Use Meta's official Shopify app (handles deduplication automatically)
- Or manually add event_id parameter:
fbq("track", "Purchase", {...}, {eventID: "unique-order-id"}) - CAPI should send the same event_id for the same order
Check Events Manager → Event Details → "Deduplicated Events" should show combined pixel + server count.
Fix 2: Remove Duplicate Pixel Code
Check your site code. Pixel should only appear once in <head> tag.
Common mistakes:
- Pixel added via theme AND via Google Tag Manager
- Pixel in multiple theme files
- Old pixel code not removed after installing app
Use Pixel Helper extension. If it shows your pixel ID twice, you have duplicate code.
Section 4: Attribution Window Issues
Meta attributes conversions based on when someone clicked/viewed your ad. If your attribution window is wrong, conversions appear on the wrong days or ads.
Attribution windows available:
| Window | What It Means | When to Use |
|---|---|---|
| 7-day click | Conversions within 7 days of clicking ad | Default, recommended for most |
| 1-day click | Only conversions within 24 hours of click | Short sales cycle, app installs |
| 7-day click + 1-day view | Clicks within 7 days OR views within 1 day | Brand awareness + conversions |
| 28-day click | Conversions within 28 days (old default) | No longer available post-iOS 14 |
Common problem: Changing attribution windows mid-campaign makes historical data incomparable.
Fix: Pick one window and stick with it. 7-day click is industry standard.
Section 5: Event Delays (24-48 Hour Lag)
Problem: Purchases show up in Meta 24-48 hours after they actually happened.
Cause: Pixel-only tracking (no CAPI). Pixel data gets queued and processed in batches.
Fix: Set up CAPI (Section 2). Server events are processed in real-time.
With CAPI, conversions should appear in Events Manager within 5-15 minutes.
Verification Checklist
Use this checklist to ensure tracking is correct:
- ✓ Pixel Helper shows pixel firing on all pages
- ✓ Purchase event fires on order confirmation page
- ✓ Purchase event includes value + currency parameters
- ✓ CAPI is set up and showing "Server" events in Events Manager
- ✓ Event deduplication enabled (if using CAPI + Pixel)
- ✓ Domain verified in Business Manager
- ✓ Aggregated Event Measurement configured (Purchase = Priority 1)
- ✓ Attribution window set to 7-day click (and consistent)
- ✓ Test purchase appears in Events Manager within 15 minutes
- ✓ No duplicate pixel code (check with Pixel Helper)
If all checkmarks pass, your tracking is correct. Any ROAS issues are performance-related, not tracking-related.
When to Use Modeled Conversions
Meta offers "Modeled Conversions" to estimate iOS opt-out traffic. Should you use it?
Pros:
- Closer to actual conversion count
- Better for budgeting and forecasting
Cons:
- Less accurate for optimization (models can be wrong)
- Can't be used as conversion event in campaigns
Recommendation: Use for reporting, not for campaign optimization. Let campaigns optimize on actual conversions (even if under-reported).
Tracking Issue Decision Tree
Follow this decision tree to diagnose your specific issue:
- Are conversions showing at all? No → Section 1 (Pixel not firing). Yes → Go to 2.
- Are conversions 20-40% lower than actual orders? Yes → Section 2 (iOS 14+ under-reporting). No → Go to 3.
- Are conversions 2x actual orders? Yes → Section 3 (Duplicate tracking). No → Go to 4.
- Are conversions delayed by 24+ hours? Yes → Section 5 (No CAPI). No → Go to 5.
- Are conversions attributed to wrong dates/ads? Yes → Section 4 (Attribution window). No → Tracking is likely fine, check ROAS diagnostic framework.
Key Takeaways
- Verify pixel is firing with Meta Pixel Helper extension—check on checkout page
- Purchase events MUST include value + currency parameters for ROAS tracking
- iOS 14+ causes 20-40% under-reporting—CAPI is essential to recover lost conversions
- Enable event deduplication when using both CAPI + pixel to prevent double-counting
- 7-day click attribution is industry standard—stick with one window consistently
- Test purchases should appear in Events Manager within 5-15 minutes (with CAPI)
- Use blended ROAS (total revenue ÷ total spend) when attribution is imperfect
Frequently Asked Questions
Why does Meta show fewer conversions than my Shopify store?
iOS 14+ privacy changes block 20-40% of pixel tracking when users opt out of tracking. Fix this by setting up Conversions API (CAPI), which sends data server-side and bypasses browser tracking.
How do I fix Meta pixel not tracking purchases?
Check: (1) Pixel is installed (use Pixel Helper extension), (2) Purchase event fires on order confirmation page, (3) Event includes value and currency parameters. Test with a real purchase and verify in Events Manager within 15 minutes.
What is CAPI and do I need it?
Conversions API (CAPI) sends purchase data directly from your server to Meta, bypassing browser tracking. Yes, you need it—it recovers 15-30% of conversions lost to iOS privacy and ad blockers. Set up via Shopify's Meta app or custom integration.
Why is Meta showing duplicate conversions?
Likely causes: (1) Pixel and CAPI both firing without deduplication, (2) Pixel code installed twice, (3) Order page reloads trigger event again. Fix by enabling event deduplication (use same event_id for pixel and CAPI) and removing duplicate pixel code.