Apple’s privacy changes do not break tracking in one way. Each one stops a different part of it, and the fix depends on which one is costing you. This guide sets out what each change does, how to measure your own gap, and the fixes in the order worth doing them. How large your gap is depends on your store: the share of visitors on Apple devices, how many decline tracking, and where your traffic comes from.
If the symptom you are chasing is a fall in Meta ROAS rather than tracking in general, the Meta ROAS diagnosis starts there.
What each change stops
| Change | When | What it stops |
|---|---|---|
| App Tracking Transparency (ATT) | iOS 14.5, April 2021 | Apps must ask before tracking a person across other companies’ apps and sites. People who tap “Ask App Not to Track” inside the Facebook or Instagram app are much harder for Meta to follow from ad click to your checkout. |
| Intelligent Tracking Prevention (ITP) | Safari, tightened repeatedly since 2017 | Limits how long cookies written by scripts last, so a click on Monday may no longer be linked to a purchase the following week. Applies to every Safari user, whatever they chose in ATT. (WebKit) |
| Link Tracking Protection | iOS 17, September 2023 | Removes click identifiers such as fbclid and gclid from links opened in Mail, Messages and Safari Private Browsing. |
| Safari 26 changes | iOS 26, September 2025 | Apple extended Advanced Fingerprinting Protection to all browsing. A beta also filtered click identifiers in ordinary browsing, but independent tests of the released version found Link Tracking Protection still off by default outside Private Browsing (Able CDP). Treat claims that iOS 26 strips every fbclid with caution. |
One change that is not Apple’s also matters. Shopify’s changelog for 13 January 2026 says it switched on automatic data sharing optimisation for all active marketing pixels: when Shopify sees zero signals from a pixel over days or weeks, it pauses that pixel’s data sharing until signals return (Shopify changelog). A pixel that is working normally keeps sharing; one Shopify judges inactive can stop without you noticing.
Measure your own gap first
- Shopify orders: Analytics → Reports → Sales over time, last 30 complete days.
- Meta purchases: Ads Manager, the same 30 days, with the attribution setting you normally use.
- Gap: (Shopify orders − Meta purchases) ÷ Shopify orders.
Meta only claims purchases it can link to an ad, so it will never match Shopify exactly, and some of your orders did not come from ads at all. That makes the trend more useful than the figure: a gap that has widened since last quarter, or since a theme or app change, is the signal to act. No published source sets a “normal” gap.
Also open Meta Events Manager and check the Purchase event’s Event Match Quality. It reflects which customer details reach Meta with each event; the EMQ estimator shows which match keys you are sending.
The fixes, in order
1. Check Shopify is not pausing your pixel
In Settings → Customer events, find your Facebook & Instagram pixel and look at its data sharing setting. If you rely on it, set it to Always on so Shopify’s optimisation cannot pause it.
2. Turn on Shopify’s own server-side connection to Meta
In Shopify admin, open Sales channels → Facebook & Instagram → Settings → Data sharing settings, turn on customer data sharing and choose a level. Shopify’s help centre describes Standard as the Meta pixel only, and both Enhanced and Maximum as using Meta’s Conversions API as well as the pixel, noting that server-to-server data cannot be blocked by browser ad blockers (Shopify Help Center). For a store that only advertises on Meta, this is the simplest free server-side route, and it needs no other accounts.
Meta also offers its own one-click Conversions API; the one-click CAPI guide explains how it differs.
3. Or send purchases from an order webhook
A Make.com scenario that receives Shopify’s order webhook and posts the purchase to Meta’s Conversions API does not depend on the browser at all, and the same trigger can feed TikTok. CAPI Shield is a free version of this on Make.com’s free plan. Use one server-side route for Meta, not two, or you risk sending each purchase twice.
Server-side delivery means Meta receives the purchase. Whether Meta can attribute it to an ad still depends on matching: send hashed email and phone and, where available, the fbc and fbp values, so Meta can connect the order to the person who clicked.
4. Deduplicate browser and server events
If the browser pixel and a server connection both send the purchase, both must carry the same event_id, or Meta counts two purchases. Shopify’s own connection handles this for you. With a webhook scenario, use the Shopify order ID in both. Check in Events Manager that the Purchase event shows events from both browser and server with deduplication applied.
5. Verify your domain
In Meta Business Settings, verify your store’s domain. Since Meta’s 2023 changes to Aggregated Event Measurement, you no longer need to rank eight priority events, and domain verification is no longer tied to that configuration; it remains worth doing because it confirms you control the domain your ads link to.
TikTok and Google
The same browser limits affect both.
- TikTok: the server-side route is the Events API. Its purchase event is
CompletePayment, notPurchase. See the TikTok Events API guide. - Google Ads: Enhanced Conversions sends hashed customer details with your conversions. See the Google Ads conversion tracking guide, which also covers the click identifier it needs.
What to expect afterwards
A gap remains even with everything above in place, because some purchases genuinely cannot be linked to an ad click. Judge the fixes against your own baseline from the measurement step: compare the same 30-day gap a month later, and check Meta’s reporting for the share of purchase events arriving from the server. If the gap narrows suddenly to nothing, check for duplicate events before celebrating.
Checklist
- Measure the 30-day gap and note Event Match Quality.
- Set the Facebook & Instagram pixel to Always on in Customer events.
- Turn on Enhanced or Maximum data sharing in Shopify’s Facebook & Instagram app, or run one webhook-based server connection instead.
- Confirm browser and server events share an
event_id. - Verify your domain in Meta Business Settings.
- Re-measure the gap after 30 days.