If the purchases themselves are missing, start with GA4 shows fewer purchases than Shopify instead.
How GA4 gets revenue from a purchase
GA4 does not read your Shopify orders. It reads the purchase event that a tag or a server sends. Google's event reference lists what that event carries:
transaction_id, required, which helps avoid duplicate events for one purchase;value, a number: the sum of price times quantity for all items, without shipping or tax;currency, which Google says is required if you setvalue, for revenue metrics to be computed accurately;items, required, each withitem_idoritem_name, and aprice.
Google defines purchase revenue as the sum of revenue from purchases made on your website or app, minus any refunds given. Item revenue comes from the items only, excluding tax and shipping. So GA4 can show two different revenue numbers from one event, and each depends on different fields.
The usual causes
1. The event has no value
A tag sends purchase with a transaction ID and items, and no value. GA4 counts the purchase. It has nothing to add up as revenue. This often happens with a hand-written tag or a Tag Manager variable that is empty on the order page.
2. The event has no currency
Google's help says the currency parameter is required for events to have revenue or refund amounts. A value with no currency leaves revenue empty. Google also asks for currency at the event level when you send value, even if the items carry one.
3. The currency is in the wrong format
Google's page "Fix missing revenue data" says currency must be "assigned a string rather than a number using the 3-letter ISO 4217 format". So EUR or USD works. A symbol such as €, a word such as "Euro", or an empty string does not.
4. The value is sent as text
The same Google page says value must be "assigned a number rather than a string (and does not contain quotation marks)", and must not contain a currency symbol. Item price follows the same rule. Common mistakes:
"value": "49.90"with quotes, instead of49.90;"€49,90"with a symbol and a comma as the decimal mark;- a price copied from the page as it is displayed, such as
1,299.00.
On Shopify, a custom pixel reads money from Shopify's checkout object. Shopify's reference gives its amount field as a number. A value goes wrong when code turns it into text along the way, for example by joining it with a currency sign for display.
5. Items have no price
Item revenue needs price on each item. A purchase with a value and items without prices can show purchase revenue while item revenue stays at 0. If your report uses item revenue, check the items.
6. The parameter name is misspelled
Google's page asks for value, currency and price "spelled correctly and in all lowercase". Value, revenue or total are other parameters to GA4, and it ignores them as revenue.
7. Refunds cancel it out
Purchase revenue is revenue minus refunds. A store that refunds an order on the day it was placed can see that day's revenue fall, while the purchase still counts. For how refunds should reach GA4, see GA4 does not show refunds of Shopify orders.
8. The data is not processed yet
Google's data freshness page says processing can take 24 to 48 hours, and data in reports may change in that window. Realtime typically shows events within a few minutes, with fewer dimensions and metrics. Google's ecommerce setup page says reports and explorations can take up to 24 hours to populate with ecommerce data. A purchase in Realtime with no revenue in a report from today is not yet a problem. See Purchases show up days later in Meta Ads Manager or GA4.
9. Explorations and standard reports disagree
Google's data freshness page says data may not be synchronized between Explorations and Reporting, and that daily data is ready earlier in Explore than in Reports. A Free form exploration can show revenue that the Monetization report does not show yet, or the other way around. Compare the same dates after both have caught up.
What (not set) means here
Google says (not set) is a placeholder used when data hasn't been received for a dimension. Next to a currency or item dimension, it means the event came without that field. Next to the transaction ID, it is a different problem: see GA4 purchases with no transaction ID or (not set).
Find the cause in your store
- 1In GA4, open Explore and start a Free form exploration. Add the dimension Transaction ID and the metrics Ecommerce purchases, Purchase revenue and Item revenue. Use the last 7 full days, leaving out the last two.
- 2Find rows with purchases and 0 revenue. Note a few transaction IDs and look them up in Shopify admin > Orders.
- 3List every sender of
purchaseto GA4: the Google & YouTube app, a custom pixel under Settings > Customer events, your theme code, Google Tag Manager and any app. - 4Place a low price test order with debug mode on. Open DebugView in GA4, select the
purchaseevent and readvalue,currencyand the items with theirprice. - 5Check each field against the list above: present, a number for money, a three-letter code for currency, lowercase names.
- 6Fix the sender, then check a new order in Realtime, and in reports a day or two later. Refund or cancel the test order.
If two senders send each purchase, one of them may carry the revenue and the other none. See GA4 duplicate purchases on Shopify. For a step by step test of the browser tag, see GA4 purchase event not firing on Shopify.
What GA4 needs with each purchase is in Shopify conversion tracking.
FAQ
Why is GA4 revenue lower than Shopify's, but not 0?
Google asks for value without shipping and tax, while Shopify's sales include them in its own way. Currency conversion and refunds move it too. See Multi-currency Shopify store: purchase value in the wrong currency.
Does fixing the tag fix past purchases?
No. GA4 keeps what it received. The fix applies to new purchases.
Does the Measurement Protocol follow the same rules?
It sends the same purchase event, with the same fields. Google does not return an error for a bad event there, so check the result in GA4. See GA4 Measurement Protocol on Shopify.
Where Tikra fits
Tikra sends each paid online order of your store from our server to Google Analytics 4 through the Measurement Protocol, as one purchase with the Shopify order ID as the transaction ID, your store's currency and the products, each with its price. The value follows Google's rule by default: the products' prices after discounts, without tax and without shipping. You can choose the total or the subtotal instead. Refunds and partial refunds are sent to Google Analytics 4 too.
Google gives no confirmation per order, so Tikra shows Google Analytics 4 orders as sent, not confirmed, and our help points you to the Realtime report for the real check. Each order's page shows what was sent and when. Tikra applies your customers' consent choices to every order, and in Strict mode an order is sent only with the buyer's consent. 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. It does not read GA4's own numbers.