If you ran Facebook Ads before 2021, you probably remember the moment reported conversions dropped while actual sales did not. Apple's privacy changes did not stop people buying from your ads; they stopped Meta from seeing a lot of those purchases. Years later, many advertisers are still running the same browser-only Pixel and blaming the algorithm.
You cannot undo Apple's changes, and you should not try to work around a user's choice to opt out. What you can do is make sure every conversion Meta is allowed to measure actually reaches it, with enough information to be matched. This post explains what changed and the practical steps I use to recover as much usable data as possible.
What did Apple's iOS privacy changes actually change?
Apple's iOS privacy changes limited how apps and browsers can track people across other companies' apps and websites. Several separate changes add up:
- App Tracking Transparency (ATT). Since iOS 14.5, apps must ask permission before tracking users across other apps and websites. When someone taps "Ask App Not to Track" in Facebook or Instagram, Meta is restricted in how it can use their off-app activity.
- Intelligent Tracking Prevention (ITP). Safari limits cookies, especially those set by JavaScript, which shortens how long the Pixel's
_fbpand_fbccookies survive. - Link Tracking Protection. Since iOS 17, Safari can strip known click identifiers such as
fbclidfrom URLs in some contexts, including Private Browsing, Mail and Messages.
Apple has continued to tighten these protections in later releases, so expect the browser environment to keep getting stricter rather than looser.
How did Meta respond?
Meta responded by changing how it measures and reports conversions. It introduced Aggregated Event Measurement (AEM) to measure web events from iOS users in a privacy-preserving way, shortened its default attribution windows (the old 28-day click window went away, and 7-day click with 1-day view became the common default), and leans more on statistical modeling to estimate conversions it cannot observe directly.
AEM itself has changed since 2021. Early on, advertisers had to verify their domain and rank up to eight prioritized events per domain. Meta has since simplified this, and that manual event ranking is no longer something most advertisers need to manage. If an older guide tells you to configure event priorities, check what Events Manager actually shows for your dataset today, because these screens change.
Why is my Facebook Ads data still missing conversions?
Your Facebook Ads data is still missing conversions mainly because a browser-only Pixel cannot report events it never gets to send, and cannot match events it sends without enough identifying information. In my audits, the usual gaps are:
| Cause | What happens | What helps |
|---|---|---|
| Pixel blocked by an ad blocker or privacy browser | Event never reaches Meta | Conversions API (server-side events) |
| Short-lived cookies in Safari | Returning visitors lose their _fbp / _fbc link to the ad click |
First-party server-side tracking on your own subdomain |
fbclid stripped from the URL |
Click ID is missing for that visit | Better customer data (email, phone) for matching |
| Payment gateway redirect skips the thank-you page | Purchase never fires in the browser | Server-side purchase from order data |
| Few customer details sent | Low Event Match Quality, fewer attributed conversions | Hashed email, phone, name, external ID |
| User opted out via ATT | Meta's use of the data is restricted | Nothing to "fix"; rely on modeling and wider measurement |
The last row matters. Some loss is permanent by design. The goal is to recover the gaps that come from poor implementation, not to defeat a privacy choice.
How do you recover lost Facebook Ads data?
You recover lost Facebook Ads data by sending events through the Conversions API as well as the Pixel, enriching them with properly hashed customer information, and measuring results with tools beyond Ads Manager. Here are the steps in the order I usually do them.
1. Add the Conversions API alongside the Pixel
The Meta Conversions API (CAPI) sends events from your server, so ad blockers and browser script restrictions do not stop them. Keep the Pixel running too, because it provides browser context and cookies. My post on Meta Pixel vs Conversion API explains why the two work best together, and the Shopify and WooCommerce setup guide covers the implementation options.
2. Deduplicate every event
Running both routes means each event arrives twice. Meta merges them when the event name and event ID match, using eventID in the Pixel and event_id on the server. Without this, you swap missing data for inflated data.
3. Improve Event Match Quality
Event Match Quality (EMQ) is Meta's score, out of 10, for how well the customer information in your server events can be matched to Meta accounts. To improve it:
- Collect email and phone at checkout or in lead forms, with appropriate consent.
- Normalize values (lowercase and trim emails, add country codes to phone numbers) and hash them with SHA-256 before sending.
- Pass the
_fbpand_fbcvalues, client IP address and user agent unhashed. - Send a hashed
external_id, such as your customer ID, consistently across events. - Turn on automatic advanced matching for the Pixel in Events Manager, if it suits your privacy policy.
On the Lesson Computer project, Pixel-only tracking had been losing a large share of events on iOS devices and blocked browsers. A hybrid Pixel and CAPI setup on a custom tracking domain, with hashed email, phone, IP and user agent, took match quality from 3–4/10 to 9–10/10.
4. Use a first-party server setup
Server-side Google Tag Manager on a subdomain of your own site (for example track.yourstore.com, hosted on Stape or Google Cloud) sends data in a first-party context and can set cookies from the server. Safari still applies some limits to server-set cookies in certain hosting configurations, so this improves durability rather than guaranteeing it. My server-side tracking explainer covers the trade-offs.
5. Send events the browser never sees
With CAPI you can send conversions that happen away from the website: a cash on delivery order confirmed by phone, a booked job in your CRM, or a lead that became a customer. These are often your most valuable signals.
6. Measure beyond Ads Manager
Ads Manager will never show every conversion, so check it against other sources:
- Compare Meta-reported purchases with actual orders over the same period.
- Tag ad URLs with UTM parameters and review Meta traffic and revenue in GA4.
- Watch blended metrics such as total revenue against total ad spend.
- Ask "How did you hear about us?" on forms or at checkout.
- Use Meta's own lift studies if your budget qualifies.
Final thoughts
Apple's privacy changes are permanent, and some data is gone for good. But a lot of what advertisers still "lose" comes from a fragile, browser-only setup, and that part is fixable with CAPI, deduplication and better match quality. If you want to know how much your setup is missing, my advanced conversion tracking service starts with that question, or you can book a free tracking audit.



