The Problem: iOS 14+ Destroyed Their Attribution
Since Apple's App Tracking Transparency (ATT) update, Meta Pixel accuracy for iOS users has fallen significantly. For this Australian fashion brand, iOS traffic represented 68% of their website visitors — and nearly all of it was going unattributed.
Monthly Meta Ads spend: AU$25,000. Reported ROAS from Meta dashboard: 1.4x. The campaigns were barely breaking even.
But here's what the low ROAS was hiding: Meta's pixel was only seeing 30–40% of the purchases that were actually happening. iOS users were buying — the Shopify orders confirmed it — but Meta wasn't attributing those sales back to the ads.
The result: Meta's algorithm thought the campaigns were underperforming and kept reducing bids on the audiences that were actually converting.
Understanding the Root Cause
When an iOS 14+ user clicks a Meta ad and makes a purchase:
- Safari's ITP (Intelligent Tracking Prevention) deletes the Meta pixel cookie within 24–72 hours
- The browser pixel tries to fire at purchase, but the fbclid parameter that links the session back to the ad is gone
- Meta sees a purchase with no attribution — it can't connect it to a campaign
The browser pixel is fundamentally limited by browser-level privacy restrictions. The only way to recover this attribution is through the Conversions API (CAPI) — a server-to-server connection that sends purchase events directly from your server to Meta, completely bypassing browser restrictions.
Implementation: Meta Pixel + CAPI Dual-Path Setup
Phase 1: Shopify CAPI Integration (Days 1–5)
We implemented CAPI through Stape.io's server-side infrastructure:
- Connected Shopify order webhooks to Stape.io server container
- Configured server-side events:
Purchase,InitiateCheckout,AddToCart,ViewContent - Each server event includes:
event_idfor deduplication (identical to browser pixel event_id)user_data: hashed email, phone, first name, last name, countrycustom_data: purchase value, currency, content IDs, content type
Phase 2: Browser Pixel Cleanup (Days 6–10)
Audited the existing browser pixel setup:
- Removed duplicate events firing from both theme code and a third-party app
- Standardised event naming to match server events exactly
- Added
event_idto all browser pixel events (UUID generated at session start, stored in cookie)
Phase 3: Deduplication Verification (Days 11–14)
This is the critical step most agencies skip. Without proper deduplication, you end up counting every purchase twice — once from the browser pixel and once from the server.
Deduplication works by matching the event_id parameter. When Meta receives two events with the same event_id (one browser, one server), it counts them as a single conversion.
We verified deduplication by:
- Checking Meta Events Manager for "Deduplicated Events" column
- Confirming server event match rate was above 80%
- Testing purchase flow with Facebook Pixel Helper and network tab simultaneously
Phase 4: Event Match Quality Optimisation (Days 15–21)
Meta's Event Match Quality (EMQ) score determines how well your events are matched to Facebook users. Higher EMQ = more conversions attributed.
We improved EMQ from 4.2 to 7.8 (out of 10) by:
- Adding all available customer fields to CAPI events (email + phone + name + address)
- Ensuring customer data is captured before the purchase event fires
- Using normalised data format (lowercase email, E.164 phone format)
Results at Week 10
| Metric | Before | After | Change |
|---|---|---|---|
| ROAS | 1.4x | 4.5x | +221% |
| iOS Conversions Attributed | ~13% | 87%+ | +570% |
| Monthly Attributed Purchases | 110 | 340 | +209% |
| CPL (cost per attributed sale) | AU$68 | AU$40 | -41% |
| Event Match Quality | 4.2 | 7.8 | +86% |
The 4.5x ROAS wasn't an improvement from the previous 1.4x — the actual underlying performance hadn't changed dramatically. What changed was that Meta could now see 3x more conversions and retrain Advantage+ to find the right audiences.
What We Learned
- CAPI doesn't improve your ads — it improves your data. The campaigns were already performing. We just couldn't see it.
- Deduplication is non-negotiable. Two clients in the same audit period had CAPI set up but without proper deduplication — their reported conversions doubled but actual sales didn't change.
- Event Match Quality is a multiplier. Every additional user data field you include increases the percentage of events that Meta can match to real accounts.

