GA4 and Meta Pixel purchases don’t match? Check what the browser sends first
It is normal for Google Analytics™ 4 and Meta Ads Manager to report different numbers of purchases and different revenue. Part of the gap comes from how each platform counts and attributes, which depends on settings you can review. Another part often comes from the tags on your site, and you can investigate it with Chrome DevTools before you spend hours comparing reports.
Differences you should expect
- Attribution. Meta Ads Manager credits purchases to ads according to its attribution settings (for example, clicks or views within a time window). GA4 reports the purchases it receives and attributes them with its own model. The same purchase can count in one report and not in the other, or on a different day.
- Consent and blocking. Visitors who reject cookies, use ad blockers or browsers that restrict tracking can stop one or both tags from sending data. With Consent Mode, GA4 may estimate part of what it doesn’t receive.
- Server-side events. Purchases sent server to server, with Meta’s Conversions API or GA4’s Measurement Protocol, don’t appear in DevTools; the same purchase may also be sent from the browser.
- Settings. Different time zones or currencies in the GA4 property and the Meta ad account move purchases between days or change the totals.
What to check in the browser
Place a test order with DevTools open (F12). In the Network tab, filter by collect to
see GA4 requests and by facebook.com/tr to see Meta Pixel requests. Then check:
- Each tag sends the purchase once per order. Count the purchase events per order and per
destination (
tidin GA4,idin Meta), including every line of batched POST requests. Two copies to the same destination point to a duplicate; the same order sent to two different properties or pixels may be intended. Common causes of duplicates: the tag installed twice (in the code and in Google Tag Manager), a trigger that fires on every load of the confirmation page, or a single-page app that sends the event again when the route changes. Reload the confirmation page too: if the purchase is sent again, every customer who reopens that page creates a duplicate. Depending on how each platform deduplicates, a duplicate can be dropped by one and counted by the other, which is itself a source of mismatch. - Both platforms identify the same order. A GA4 purchase needs a
transaction_id(in the request,ep.transaction_id). The Meta Pixel has no required order field; many setups send the order number asorder_idin the custom data (cd[order_id]). Deduplication with the Conversions API is a different thing: it pairs the Pixel’seventID(sent aseid) with theevent_idof the server event, for the same event name and the same pixel, and that ID doesn’t have to be the order number. To reconcile orders with GA4 one by one, you need a known correspondence between the IDs on each side. - Value and currency agree. Compare GA4’s value (
epn.value) and currency (cu) with Meta’scd[value]andcd[currency]. Typical causes of a gap: one tag includes tax or shipping and the other doesn’t, the value is sent as text with a thousands separator, or the currency is missing or different. - Each tag respects the consent applicable to it. With a cookie banner, check which tags send before and after the visitor accepts or rejects. Google’s tags follow Consent Mode, but the Meta Pixel only follows the visitor’s choice if your consent tool or tag setup blocks or configures it. If one tag waits for consent and the other doesn’t, their numbers will differ.
- The confirmation page is reached. Payment methods that redirect to an external page (a wallet or a bank) don’t always bring the customer back to your confirmation page, so the purchase tags on that page never fire for those orders. Test each payment method you offer.
If this journey looks right
Check other journeys and devices too, the destinations the events are sent to, reception errors, filters, deduplication and processing delays, as well as attribution, consent, blocking and server-side events. Compare reports with the same date range, time zone and currency, and read each platform’s attribution settings before drawing conclusions.