missing conversions

iOS ATT signal loss: what actually broke, and what recovers it

App Tracking Transparency and Safari's privacy features do not delete conversions. They strip the identifiers ad platforms use to match a conversion back to a click, which is why platform-reported numbers fall short on iOS while your order table stays intact.

Updated

The symptom: gaps that concentrate on iOS

Meta reports fewer purchases than your order table, and the gap concentrates on iOS. GA4 shows an unusually high share of direct traffic from Safari. Returning visitors on iPhone are counted as new far more often than on Android. Some Meta conversions arrive late, or in aggregate, without attaching to a specific ad. Google Ads conversions on iOS look thin next to the same campaigns’ iOS click share.

None of this means the conversions stopped happening. Your backend still recorded them. What changed is the identifier the ad platform uses to match that conversion back to the click.

Why ATT and Safari break matching

Four separate Apple mechanisms get collapsed into the single word “ATT”. They fail in different ways and they need different fixes.

App Tracking Transparency is the app-level prompt. When a user declines, the app cannot access the device advertising identifier and cannot use it to track that person across other companies’ apps and websites. This is what degrades Meta’s ability to tie a website purchase back to an ad impression served inside the Facebook or Instagram app. For opted-out users Meta reports through aggregated event measurement, which allows a limited, ranked set of web events per verified domain. The order you rank them in decides which single event gets reported when someone triggers several.

Intelligent Tracking Prevention is Safari’s cookie policy, and it applies to the web regardless of the ATT prompt. Cookies written by JavaScript through document.cookie expire after seven days. If the visitor arrives from a domain Safari classifies as a tracker with a query parameter attached, that drops to twenty-four hours. GA4’s _ga cookie and Meta’s _fbp and _fbc cookies are all written by JavaScript, so all three are capped.

iCloud Private Relay hides the visitor’s IP address for Safari traffic on subscribed accounts. IP is one of the parameters used for probabilistic matching, and for geography.

Link Tracking Protection strips known click identifier parameters from links opened in Mail, Messages and Safari private browsing. If the click ID never reaches your landing page, no amount of tagging recovers it.

What is not affected: the conversion itself, your order record, your server logs, your CRM row, and any event you send from your own backend. Browser events still fire. The loss is in identity and attribution, not in whether something happened.

How to confirm iOS signal loss

Signal loss has a shape, and the shape is what separates it from a broken tag.

In GA4, break new versus returning users down by operating system and browser. If iOS Safari shows a much higher new-user rate than Android Chrome on comparable traffic, the seven-day cookie cap is recycling your users.

Read the cookie itself. Load your site in Safari, inspect _ga and _fbp, and check the expiry. A two-year cookie showing seven days is ITP. Arrive at the same page through an ad click with a tracking parameter attached and look again: twenty-four hours confirms the link decoration rule.

Compare the share of sessions arriving with a click ID present against the ad platform’s reported clicks for the same window. A structural shortfall concentrated on iOS points at parameter stripping.

In Meta Events Manager, check event match quality per event alongside the browser and server breakdown. Weak match quality on iOS with healthy volume elsewhere is the signature.

Compare like with like on time basis. Meta reports conversions against the click or impression date. GA4 reports them on the day they happened. Line those up on the same calendar window and you will find a gap that has nothing to do with Apple.

How to recover iOS signal

Three things genuinely recover signal.

Server-side events with a complete parameter set. Conversions API for Meta, and server-side tagging for GA4 and Google Ads, move the event out of the browser. That alone does not fix matching. The parameters do. Send hashed email and phone where you hold them, external_id, the fbc and fbp values, event_source_url, client_ip_address and client_user_agent, and a stable event_id shared with the browser event so the pair deduplicates rather than double counts. The failure modes for that pairing are set out in duplicate purchase events.

Click IDs captured server side, on arrival. Read the click parameter from the first request and write it into a first-party cookie using an HTTP Set-Cookie header rather than JavaScript. Server-set cookies are not subject to the script-writable cap. One caveat: if your tagging subdomain resolves by CNAME to a third-party host, Safari treats the cookie as third-party and reapplies the cap. Point the record at infrastructure you control.

First-party data. Enhanced conversions for Google Ads sends hashed customer data alongside the conversion. Customer Match and offline conversion imports close the loop for lead gen, where the sale lands weeks after the click. For subscription and high-consideration businesses this recovers more than any pixel change will.

Modeled conversions fill part of what is left, but only if consent is implemented so the signals still transmit when consent is denied. An implementation that simply blocks the tags leaves the model nothing to work from. That is a measurement point, not legal advice; the consent decision belongs with your counsel.

Then judge performance on blended numbers. Platform-reported ROAS on iOS is not returning to its 2020 shape.

What iOS under-reporting costs you

Under-reporting is not neutral. Smart Bidding optimizes toward the conversions it can see. If iOS conversions match at a lower rate than Android, the model learns that iOS is worse inventory and moves budget away from it. Take a campaign where iOS is half of real conversions but only a third of matched ones. The model bids as though iOS is worth two thirds of its actual share of value, and that error compounds every day the campaign runs.

Reported cost per acquisition looks worse than it is, which pushes teams to cut spend on channels that were working. Pixel-built audiences under-fill, so lookalike seeds get smaller and less representative. And the fully trackable population is systematically different from the rest, so every cohort read drifts toward it.

The useful move is to size the gap before rebuilding anything. Signal loss on iOS is measurable by platform, by browser and by event, which means the recovery from server-side events and first-party data can be estimated before a line of tagging changes. The Missing Conversions Audit measures that gap across GA4, Google Tag Manager, Google Ads and Meta, logs every issue with severity and cost, and fixes the top 10 in a separate GTM workspace, published only with your approval. $900 flat, 5 business days.

Questions

Does App Tracking Transparency affect my website analytics?

Not directly. ATT governs an app's access to the device advertising identifier, so it degrades an ad platform's ability to match a website conversion back to an in-app ad impression. Your GA4 events still fire. Safari's cookie policy, Private Relay and link parameter stripping are separate mechanisms, and those do affect web measurement.

Does the Conversions API get around ATT?

Partly. Sending the event from your server removes browser and cookie fragility, but Meta still has to match the event to a person. Matching depends entirely on the parameters you send: hashed email or phone, external_id, fbc and fbp, IP address and user agent. A server event with thin parameters recovers very little. Use a shared event_id so the browser and server versions deduplicate.

Can I stop Safari capping my cookies?

You can move the important ones out of JavaScript. A cookie set by your own server with an HTTP Set-Cookie header is not subject to the seven-day script-writable cap. If the hostname setting it resolves through a CNAME to a third-party provider, Safari treats it as third-party and applies the cap anyway, so the tagging subdomain has to point at infrastructure you control.

How much conversion signal can I expect to recover?

It depends on how much first-party data you hold and how much of your traffic is iOS. A store that captures email at checkout recovers far more than an anonymous lead form. Measure your current match rate and your gap by platform first, then size the recovery. Anyone quoting a percentage before looking at your data is guessing.

Next step

Find out what this is costing you.

The Missing Conversions Audit is a fixed-price teardown of your GA4, Google Tag Manager, ad pixels and consent setup. Every gap logged, the top 10 fixed and validated. $900 flat. 5 business days.

A 15 minute call

  • We look at your setup from the outside and say what we can already see.
  • You get a straight answer on whether the audit is worth it for your account.
  • If it fits, we book the slot and send the access checklist.
Open the booking calendar

Opens the calendar here. Nothing loads from Calendly until you do.

Prefer email? hello@missingconversions.com