GA4 Revenue Is $0 but Purchases Are Showing: What Broke?

Key Takeaway

Revenue showing as zero while purchases are counted means the value parameter is missing or zero in the purchase event payload. GA4 counts the event but has no revenue to record. Fix the dataLayer push, not the GA4 configuration.
Intermediate

This specific failure state is distinct from missing purchases entirely. Your GA4 Events report shows purchase event counts. The Conversions report shows conversions. But the Revenue metric shows zero. The Monetisation report shows purchased items counted but zero item revenue. This pattern has a small set of specific causes, all of which are diagnosable in DebugView within 10 minutes.

The definitive diagnostic: DebugView

Open GA4 Admin > DebugView. Add?debug_mode=true to your site URL or install the Google Analytics Debugger Chrome extension. Complete a test purchase on your site. Click the purchase event that appears in DebugView. Expand the event parameters. You will see either the specific problem immediately or confirm that parameters are correct. Our guide torunning GA4 debug mode in productioncovers the safer ways to do this on a live store.

1

Open DebugView and trigger a test purchase

Navigate to GA4 Admin > DebugView. Append ?debug_mode=true to your order confirmation URL, or use the GA Debugger Chrome extension. Complete a real test transaction so the purchase event fires.

2

Click the purchase event and inspect parameters

In DebugView, click the purchase event in the timeline. Expand the event parameters panel and look for value and currency. Both must be present.

3

Check the value parameter type

Confirm value is a number, not a string. A value of '49.99' (with quotes) or 0 (zero) will produce zero revenue. It must be a positive numeric value such as 49.99.

4

Check the currency parameter format

Currency must be a three-letter uppercase ISO 4217 code such as GBP or USD. Currency symbols (£, $) or lowercase codes (gbp) are not accepted and will cause revenue to be discarded.

5

Verify tag firing order

If using GTM, confirm the purchase tag fires after the dataLayer.push() that populates ecommerce data. A tag that fires before the data layer push reads empty values.

Most likely cause: missing or invalid currency parameter

GA4 requires a valid three-letter ISO 4217 currency code to process revenue. The event count is recorded regardless of whether currency is valid, but revenue is only processed when currency is valid. Our deeper guide onresolving GA4 currency mismatchescovers every format pitfall and how property-level conversion compounds the problem.

What to look for in DebugView:is the currency parameter absent? Is it set to a currency symbol like '$' or '£' rather than a code like 'USD' or 'GBP'? Is it set to the correct code but in lowercase ('usd' instead of 'USD')? Always send currency codes in uppercase as specified by ISO 4217 — GA4 documentation does not guarantee case-insensitive handling.

Fix:ensure the currency parameter is sent with every purchase event using the exact ISO 4217 code in uppercase.

Second most likely cause: value is zero, null, or a string

In DebugView, look at the value parameter. If it is absent, the value is 0, or the value is a string rather than a number (such as '49.99' with quotes rather than 49.99 without quotes), GA4 will record the event but report zero revenue.

This often happens when the GTM variable reading the order value from the data layer returns a string rather than a number. JavaScript variables in GTM read data layer values as strings by default unless you explicitly convert them. Use GTM's built-in variable type or a custom JavaScript variable to convert the string to a number: return parseFloat(window.dataLayer.find(item => item.ecommerce)?.ecommerce.purchase?.value || 0). For the full list of required and recommended fields, see ourGA4 purchase event parameters reference.

Want GA4 to flag revenue parameter issues automatically on every audit?

Third cause: event name variation

GA4 only processes revenue from events named exactly purchase. In DebugView, check that the event that fires on your order confirmation page is named purchase and not anything else. Some implementations name the event completed_order, order_success, transaction, or a custom variant. These events appear in your Events report and can be marked as conversions, but GA4 will never report revenue for them.

In GTM, find the tag responsible for the purchase event and verify the Event Name field contains exactly the text purchase with no spaces, no capital letters, and no additional characters. If the count looks plausible but the totals are still wrong, our walkthrough offixing missing revenue in GA4 purchase eventscovers what to check next.

Fourth cause: modify event rules altering parameters

GA4 Admin has a Modify Event feature under Events. If anyone has created a modify rule that affects the purchase event, check whether it is stripping or overwriting the value or currency parameters. Go to Admin > Events > Modify Event and look for any rules referencing the purchase event. A misconfigured modify rule that sets value to 0 or deletes the currency parameter would produce exactly this symptom.

Fifth cause: server-side tag not forwarding revenue parameters

If your GA4 data is routed through a server-side GTM container, check whether the server-side GA4 tag is configured to pass through the ecommerce parameters you need. Implementation-specific forwarding or mapping mistakes can produce events with no revenue in GA4.

In your sGTM GA4 tag, check the More Settings section for parameter forwarding configuration. If only specific parameters are whitelisted and value and currency are not in the list, add them.

Revenue zero: validate, fix, and watch

Validate

  • Open DebugView and trigger a test purchase on your site
  • Confirm the purchase event appears in DebugView
  • Check that value is a positive number (not a string, not zero)
  • Check that currency is a three-letter uppercase ISO 4217 code

Fix

  • Ensure value is passed as a number not a string, use parseFloat() in GTM if reading from dataLayer
  • Ensure currency matches your GA4 property currency setting and uses uppercase ISO format
  • Ensure the purchase tag fires after the dataLayer.push() that sets ecommerce data
  • If using sGTM, whitelist value and currency in the server-side GA4 tag parameter forwarding settings

Watch for

  • value showing as "0" (string) vs 0 (number), both display the same in DebugView but behave differently
  • Modify Event rules in GA4 Admin that silently overwrite value to 0 or strip currency
  • Event named 'purchase' in GTM that fires before the dataLayer ecommerce object is populated

Revenue zero debugging checklist

  • Open DebugView and place a test order
  • Confirm the purchase event fires and appears in DebugView
  • Verify currency is present as a three-letter uppercase ISO code
  • Verify value is present as a numeric value greater than zero
  • Verify event name is exactly purchase
  • Check Admin > Events > Modify Event for any rules affecting the purchase event
  • If using sGTM, verify the server-side tag forwards all ecommerce parameters

Audit your GA4 e-commerce implementation

GA4 Audits checks value, currency, event naming, and parameter forwarding automatically across all purchase events.

Audit findings should be reviewed by a qualified analyst before they are used for major reporting, media, or implementation decisions. Review your findings

GA4 Audits Team

GA4 Audits Team

Analytics Engineering

Specialising in GA4 architecture, consent mode implementation, and multi-layer audit frameworks.

Share