Your Meta pixel was working fine. Then iOS 14.5 happened. Now your conversions are missing, attribution is broken, and your campaigns are struggling to optimize. Here’s what’s actually happening and how to fix it.
What iOS 14.5 Actually Changed
Apple’s App Tracking Transparency (ATT) prompt lets users opt out of cross-app tracking. When a user opts out:
- The Meta app can’t access their device identifier
- Browser tracking is limited to 7 days
- Cookie storage is restricted
- Meta can’t connect in-app activity to web conversions
The result: Meta sees dramatically fewer conversions than actually happen, so it can’t optimize your campaigns effectively.
The Three-Part Solution
Recovering from iOS 14 requires implementing all three:
1. Conversions API (CAPI)
CAPI sends conversion data server-to-server, bypassing browser restrictions:
User converts → Your server → Meta's servers
↑
No browser involved
CAPI can’t be blocked by iOS, ad blockers, or browser privacy features.
Implementation options:
- Native integration (Shopify, WooCommerce have built-in)
- Google Tag Manager Server-Side
- Direct API integration
- Partner integrations (Zapier, etc.)
2. Aggregated Event Measurement (AEM)
Meta’s response to Apple’s restrictions. You must:
- Verify your domain in Business Manager
- Configure up to 8 prioritized web events
- Set up Events Manager correctly
Go to: Business Manager → Brand Safety → Domains → Verify your domain
Then: Events Manager → Data Sources → Your Pixel → Aggregated Event Measurement
3. First-Party Data Strategy
Collect email addresses and phone numbers, then:
- Hash and send via CAPI for matching
- Use customer lists for Custom Audiences
- Implement email-based attribution
Implementing CAPI: The Technical Details
Option A: GTM Server-Side Container
The cleanest approach for most businesses:
- Set up GTM Server-Side container (requires hosting)
- Create Meta CAPI tag in server container
- Send events from your web container to server container
- Server container forwards to Meta
Pros: Flexible, works with existing GTM setup Cons: Requires hosting, more complex setup
Option B: Native E-commerce Integration
If you’re on Shopify, WooCommerce, or BigCommerce:
- Go to your platform’s Meta integration settings
- Enable Conversions API
- Enter your access token from Meta Events Manager
- Choose which events to send server-side
Pros: Easy, usually free Cons: Limited customization, may miss some events
Option C: Direct API Integration
For custom builds:
from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.serverside.event import Event
from facebook_business.adobjects.serverside.event_request import EventRequest
from facebook_business.adobjects.serverside.user_data import UserData
user_data = UserData(
email='hashed_email', # SHA256 hashed
phone='hashed_phone', # SHA256 hashed
client_ip_address='user_ip',
client_user_agent='user_agent',
fbc='fbc_cookie_value', # For deduplication
fbp='fbp_cookie_value' # For deduplication
)
event = Event(
event_name='Purchase',
event_time=int(time.time()),
user_data=user_data,
custom_data={'value': 99.99, 'currency': 'USD'},
event_source_url='https://yoursite.com/thank-you',
action_source='website'
)
request = EventRequest(
events=[event],
pixel_id='YOUR_PIXEL_ID'
)
request.execute()
Deduplication: The Critical Step Everyone Misses
If you’re sending events via both browser pixel AND CAPI, you’ll double-count conversions unless you deduplicate.
How Deduplication Works
Send the same event_id from both sources:
Browser-side (GTM):
fbq('track', 'Purchase', {
value: 99.99,
currency: 'USD'
}, {
eventID: 'order_12345' // Unique per event
});
Server-side (CAPI):
event = Event(
event_name='Purchase',
event_id='order_12345', # Same ID as browser
# ... other parameters
)
Meta will recognize these as the same event and only count it once.
Measuring Your CAPI Success
After implementation, check Events Manager:
- Go to Events Manager → Your Pixel
- Look at “Connection Quality” for each event
- Target: “Good” or “Great” quality
Check the Event Match Quality score:
- Below 4.0: Poor matching, low attribution recovery
- 4.0-6.0: Average, some recovery
- Above 6.0: Good matching, better attribution
To improve match quality:
- Send more user data (email, phone)
- Ensure proper hashing (lowercase, trim whitespace, SHA256)
- Send browser parameters (IP, user agent, fbc/fbp cookies)
What Recovery Should Look Like
After proper CAPI implementation, you should see:
- Reported conversions increase: 20-50% more conversions visible in Ads Manager
- Attribution window extends: Better 7-day click, 1-day view attribution
- Campaign performance improves: Meta can optimize with more data
You won’t recover everything—users who opt out of ATT are still harder to track. But you’ll get significantly better data than browser-only tracking.
The Most Common CAPI Mistakes
- Not deduplicating: Double-counting inflates conversions, breaks optimization
- Missing user data: No email/phone = poor match rates
- Wrong hashing: Meta requires lowercase + SHA256; wrong format = no match
- Not sending all events: CAPI should match your browser events
- Incorrect event names:
Purchasenotpurchase(case matters)
When to Get Help
CAPI implementation has lots of places to go wrong. Consider expert help if:
- You’re spending over $5K/month on Meta ads
- Your current match quality is below 4.0
- You’re on a custom platform (not Shopify/Woo)
- You need server-side GTM setup
Get a free scan and we’ll assess your current Meta pixel implementation and tell you exactly what’s missing.