Tracking

iOS 14+: why your Meta ROAS is wrong (and how to fix it)

Since iOS 14.5, some purchases never reach the Meta pixel. Why the ROAS you see can drift from your Shopify orders, and what server-side sending changes.

Arthur Reboul8 minUpdated September 25, 2026
Contents

Since April 2021 and the iOS 14.5 update, Apple has required every app to ask users for explicit consent before tracking them. This policy, called App Tracking Transparency (ATT), fundamentally changed the advertising landscape.

Since then, a large share of iOS users have opted out of in-app tracking. Safari also limits the lifetime of cookies set by JavaScript. Some purchases therefore become invisible to Meta, or only estimated. The exact share depends on your traffic: compare Shopify orders with reported conversions over the same period.

What's actually broken

Before iOS 14.5, the Meta pixel worked simply: a piece of JavaScript on your site sent events (page view, add to cart, purchase) to Meta, which matched them to the ad click thanks to the fbclid cookie.

Here's what happens now:

  • The fbclid cookie is blocked or expires within 24 hours on Safari (ITP) instead of 7 days
  • Ad blockers can remove the Meta pixel from the browser
  • ATT prevents Meta from matching the ad click with the purchase if the user opts out of tracking in the Facebook app
  • The attribution window is shorter: 7 days by default (versus 28 days before)

The result: Meta only sees a fraction of actual conversions. And paradoxically, Meta sometimes over-reports certain conversions through its statistical modeling, creating an artificial ROAS that matches nothing real.

What you can measure yourself

There's no single percentage of "lost" conversions. What you can observe on a store:

  • some purchases never reach the browser pixel (ad blocker, Safari, in-app tracking opt-out)
  • Meta fills the gaps with modeling you can't audit line by line
  • the ROAS you see can therefore be above or below the revenue you actually collected
  • retargeting suffers on top of that, because it relies on visitor audiences seen by the pixel

The useful comparison: paid Shopify orders on one side, Meta conversions on the other, same dates. The gap is yours. It isn't a ProfitPilotPro average.

Meta's modeling: a band-aid on a broken leg

Meta introduced Aggregated Event Measurement (AEM) and a statistical modeling system to "estimate" missing conversions. The problem is that this modeling is a black box.

You have no idea how Meta calculates these estimates. And Meta has a direct interest in showing you a favorable ROAS: the more you believe your ads work, the more you spend.

The solution: server-side tracking (CAPI)

Meta's Conversions API (CAPI) lets you send conversion events directly from your server, without going through the user's browser. It's Meta's official way around the iOS limitations.

Here's how it works:

  • When a purchase happens on your store, your server sends the event directly to Meta
  • Meta receives the event with identifiers (hashed email, phone, IP) to match it with the ad click
  • Ad blockers can't block this server-to-server communication
  • The event leaves from the server: neither Safari's ITP nor an ad blocker can stop it

Fingerprinting to fill the remaining gaps

Even with CAPI, some visitors remain hard to match (cleared cookies, private browsing). A technical browser fingerprint can recognize a device without a cookie. It doesn't stand in for consent: until the person has said yes, the merchant must be able to turn this sending off. The details are in the privacy policy.

How to set up server-side tracking

There are several approaches:

  • By hand: build an API endpoint that receives events and forwards them to Meta through CAPI. Complex and time-consuming.
  • With server-side Google Tag Manager: requires a dedicated server (Google Cloud Run), an advanced technical setup, and an extra monthly cost.
  • With ProfitPilotPro: on Shopify, you turn the pixel on from the theme editor. Orders come in through the store connection, not through the script. The purchase goes to Meta (Purchase), TikTok (CompletePayment) and Google (orderId field), with the same numeric order ID. The step-by-step guide is in Documentation → Tracking.

The concrete impact on your campaigns

By recovering missing conversions, you help Meta's algorithm optimize your campaigns better. The more conversion data Meta has, the better it targets the audiences likely to buy.

What it changes, concretely:

  • The event leaves from the server: neither Safari's ITP nor an ad blocker can stop it
  • Identity data is hashed on the server, so it's more complete than what the browser can send
  • Your actual match rate is shown in the dashboard — it's your measurement, not a promised average

The trial lasts 14 days, no credit card required. Create an account, then compare your Shopify orders with Meta conversions over the same period.

Frequently asked questions

Why can Meta ROAS drift from Shopify orders?

Some purchases never reach the pixel (ad blocker, Safari, in-app tracking opt-out). Meta fills the gap with an estimate. The useful comparison is paid orders versus reported conversions, over the same dates.

AR

Arthur Reboul

Founder of ProfitPilotPro

14-day trial, no credit card

Your Shopify store, Meta, TikTok and Google spend, and net profit for the period.

Create an account

Read next