This is a different problem from purchases that never reach Meta at all. If Events Manager itself counts fewer purchases than your paid orders, read our page on Safari and ad blockers hiding your Shopify purchases first.
How Meta ties a purchase to an ad
Meta matches a purchase to a person, and through that person to an ad, with the details that come with the event. Meta's Conversions API reference names the ones that matter most here:
- The click ID (
fbc). When a shopper clicks your ad, the link carries anfbclidparameter. Meta's reference says the click ID is stored in the_fbccookie on your domain, or can be generated from thefbclidparameter. - The browser ID (
fbp). A first-party cookie,_fbp, that the pixel sets on your domain. - Customer details. E-mail, phone, name and address, normalised and hashed, plus the IP address and user agent.
The click ID is the strongest tie to one specific click. Each thing below removes it, or shortens its life.
What on iOS breaks the link
App Tracking Transparency, inside Meta's apps. Apple defines tracking as linking data from one company's app with data from other companies' apps or websites for targeted advertising or advertising measurement. Since iOS 14.5, an app needs the user's permission through the App Tracking Transparency prompt to do that. Many clicks on your ads happen inside the Facebook and Instagram apps, so a shopper who said no there limits what Meta may join between the app and your store. Your website shows no prompt, because it is not an app. How Meta reports results for people who opted out is Meta's own model, and Ads Manager may show some of them as estimated.
The in-app browser and Safari are separate. A shopper who clicks your ad in Instagram usually lands in the app's own browser. If they come back days later in Safari to buy, Safari generally has none of the cookies set in the in-app browser, so the purchase arrives without the click.
Safari's cookie limits. WebKit's tracking prevention page says Safari deletes cookies created in JavaScript, and other script-writeable storage, after 7 days without the user interacting with the site. When Safari detects link decoration on the landing page, such as a click ID added to the link, it caps cookies created in JavaScript on that page to 24 hours. A shopper who clicks on Monday and buys on Wednesday may no longer carry an _fbc cookie set by a script.
Link Tracking Protection. Safari 17 added blocking of known tracking query parameters in links in Private Browsing. WebKit's 2024 post on Private Browsing says Safari removes a subset of query parameters identified as used for cross-site tracking and keeps others, such as campaign parameters, and that users can turn these protections on for all browsing through the Advanced Tracking and Fingerprinting Protection setting. Apple's iOS 17 announcement says the same removal applies to links shared in Messages and Mail. Apple does not publish the list of parameters; reports from marketers name fbclid among them. When the parameter is gone, there is no click ID to store.
Consent. A shopper who declines marketing cookies should not have their browser and click IDs sent to Meta. That loss is expected and is not something to fix.
Check it on your store
- 1Pick the last 7 full days. In Events Manager, open your pixel and read the Purchase count on Overview. Note that Meta counts these before deduplication.
- 2In Ads Manager, read the purchases your campaigns were credited with for the same days. A large difference between the two is the attribution gap.
- 3In Shopify admin, open Analytics > Reports and look at sessions and orders by device type. A high share of mobile orders with a large gap points to the causes above.
- 4In Events Manager, open the Purchase event and look at the customer information parameters Meta lists as received, and their share. If e-mail and phone are rare on server events, Meta has little to match on once the click ID is gone.
- 5On an iPhone, click one of your own ads in Instagram and look at the landing page address. Then open the same link in a Safari Private Browsing tab. Compare whether
fbclidis still there. - 6Check where your purchases come from: browser, server or both. A purchase sent from the browser only can carry only what that browser still has.
What helps
- Send purchases from a server with hashed customer details, where the buyer's consent allows it. An e-mail or phone number lets Meta match a purchase to a person when the click ID is missing.
- Keep the click ID with the order. Read
fbclidon the landing page while the buyer's consent allows it and store it with the visit, so a server copy can send it even if the cookie expires later. - Keep UTM parameters on your ad links. WebKit says campaign parameters are kept. They do not feed Meta's attribution, but your own Shopify reports can still show which campaign a visit came from.
- Compare like with like. Ads Manager credits purchases by its attribution setting. Events Manager counts every purchase received. They will not match.
What a server can and can't change here is in Shopify server-side tracking.
FAQ
Can I get the click back for shoppers who opted out of tracking in the app?
No setting on your store can override the shopper's choice in Meta's app. Hashed customer details sent with consent are what Meta has to work with.
Is this the same as Safari blocking my pixel?
No. A blocked pixel means the purchase may not reach Meta at all. Here the purchase arrives, but without the details that tie it to the click.
Does a server connection fix attribution?
In part. It sends the purchase and the customer details that came with the order. It can send the click ID only if something captured it during the visit.
Where Tikra fits
Tikra sends each paid online order to Meta from our server. Each purchase carries what Meta uses to match the buyer to a person, such as the buyer's e-mail, phone and address (hashed), and, only when the buyer allowed marketing, its browser cookie and ad click details. With a plan, Matching data on purchases under the Meta row's Settings on Platforms shows, for the last 7 days, the share of your paid online orders whose Purchase carried each identifier, the Meta click ID among them, and each order's page lists the data used for matching. It waits until there are 20 orders.
Tikra applies your customers' consent choices to every order, and in Strict mode an order is sent only with the buyer's consent. Tikra sends to Meta, Google Analytics 4, Google Ads, TikTok, Pinterest, Snapchat, ChatGPT Ads and Klaviyo. Klaviyo gets paid orders in every consent mode, like Klaviyo's own Shopify integration. A written guarantee in our Terms covers eligible orders: at least 97 % reach each platform, fixed within 12 hours or a month's fee credited (Terms of Service, section 8).
The free diagnosis sends none of your orders anywhere. It shows your paid orders of the last 7 full days, how many came from a Meta, Google or TikTok ad, and, after a full day and 10 paid online orders, how many your shoppers' browsers reported. With a key that can read your pixel's statistics, it also shows Meta's count.