Universal Pixel Debugger

Guides

Why Meta and GA4 report different revenue

Updated 2026-09-28

Meta and GA4 rarely agree on revenue, and part of the gap often starts in the browser: the tags are sent different values, currencies or order IDs for the same order. The rest comes from things no browser tool can see, such as server-side events and each platform's attribution rules. Check first what each tag actually received. Universal Pixel Debugger shows the value, currency and order ID of every event with the exact key it came from.

What the mismatch looks like

For the same period, Meta reports one purchase value, GA4 another and Google Ads a third. Sometimes only the revenue differs; sometimes one platform is missing orders entirely.

Where each network reads value, currency and order ID

NetworkValueCurrencyOrder ID
Meta Pixelcd[value]cd[currency]cd[order_id], cd[transaction_id], cd[orderId]
GA4epn.value, then ep.valuecu, then ep.currencyep.transaction_id
Google Adsvalue (or ep.value on some request formats)currency_code, cu or currencytransaction_id or oid

Meta can also send these fields inside a JSON object in cd. The Google tag adds an oid of the form GG_<number>.<time> to many hits, including page views. The extension keeps it as sent but does not treat it as an order ID.

Causes you can see in the browser

Different amounts for the same order

Compare cd[value] on the Meta purchase with epn.value on the GA4 purchase. A common cause to check is that one tag includes tax and shipping and another does not. Google's GA4 events reference asks for the purchase value to be the sum of price times quantity for the items, without shipping or tax, which have their own parameters (ep.tax and ep.shipping in the request). A Meta tag built from the order total will then send a higher number for every order.

A value that is not a number, such as the text undefined from an unset tag variable, is flagged as Invalid numeric value with the key and the exact text sent.

Different or missing currency

Compare cd[currency] with cu or ep.currency. Codes are compared without regard to case, so usd and USD agree, but each is shown exactly as sent. A value sent with no currency at all is covered in GA4 purchase sent without a currency.

No purchase or no order ID on one network

If one network's lane on the signal board has no purchase event after the order, that network received nothing from the browser for it. If the event is there but Order ID shows Not observed, the tag sent no order ID, and neither the extension nor your reports can match that purchase to the same order on another network.

The purchase is sent more than once

A purchase tag that fires twice inflates revenue on that network only. The extension flags a Potential duplicate when the same network, destination and event name repeat an event ID or order ID within 3 seconds. See duplicate purchase events. Two Meta pixel IDs each receiving one purchase are separate destinations, not duplicates.

Destinations of one network receive different data

A store can send one event to several pixels or accounts of the same network. When their value, currency, products or order ID differ, the extension shows an issue such as Currency differs between destinations, listing what each destination received. On a live store, one Google Ads account received no currency for an event while another received USD.

Google Ads request formats

The Google tag can send one conversion as several request formats that carry different fields by design. On a live store, the CCM and view-through requests carried a value without a currency while the main conversion request carried currency_code. The extension compares only requests of the same format. See Google Ads CCM and view-through requests.

Causes a browser tool cannot see

These are common causes to check in each platform's settings and reports. The extension does not detect them.

How to check with Universal Pixel Debugger

  1. On your own store, open the side panel with the toolbar icon, click Clear, then complete a test order.
  2. Wait a few seconds on the confirmation page. A GA4 hit can arrive after the other networks.
  3. Look above the timeline for a compare strip. It appears when two or more networks sent the same order ID within 30 minutes, titled Order and the ID, with a summary such as Value ≠ · Currency ✓ · Products ✓. ✓ means the networks agree, ≠ that they sent different values, and missing that some did not send the field. Expand it to see the original values each destination received.
  4. Click each purchase event. Value and Currency show the key each came from, for example from cd[value] or from epn.value, or Not observed when the event did not send them. Nothing is filled in from item prices.
  5. Open the issues: Value mismatch, Currency mismatch, Invalid numeric value, Invalid currency format, Potential duplicate or a field that differs between destinations.
  6. If no compare strip appears, the networks did not share an order ID. Compare the Value, Currency and Order ID lines of each purchase by hand.

What to fix or ask your developer

The side panel shows what the browser sent. An HTTP success response does not prove that a network accepted or counted the event, and events sent from a server never appear there.

Sources