Back to Blog
GA44 min read

GA4 Purchase Events Are Firing, but Revenue Is Missing: What to Check

GA4 shows purchase events, but your revenue is zero—or much lower than your store's sales. That usually means the event reached Analytics without usable ecommerce values, the values changed along the way, or you're comparing different reports. Here's how to isolate the problem without guessing.

Illustration of GA4 purchase events being recorded while purchase revenue remains zero

First, check which revenue metric you're looking at

Don't compare the purchase event count with total revenue and assume they should move together. Event count measures occurrences. Revenue depends on the ecommerce parameters and the metric you're viewing. Compare Purchases and Purchase revenue for the same property, date range, and reporting context. Allow for normal reporting delay before diagnosing a brand-new transaction.

A quick diagnosis: find where the value disappears

Use a safe test transaction you can identify (prefer a test environment or payment sandbox). Then check that same transaction at each step, from the website to the GA4 request. Do not place repeated live orders just to test tracking. This is a quick initial diagnostic workflow, not a promise that every issue can be fixed in five minutes.

Where did the purchase value disappear?

Trace one test order through the complete GA4 collection path.

  1. 01

    Website Data Layer

    Value & Currency

  2. 02

    GTM Purchase Tag

    Parameter Mapping

  3. 03

    GA4 Network Request

    Actual Payload

  4. 04

    GA4 Reports

    Processed Revenue

Check the first step where the expected value is missing or incorrect.

  1. Inspect the ecommerce data layer. In GTM Preview, find the purchase event and confirm the order value and currency are present at the moment the tag fires. A value present on the page later is not proof it was available when the tag ran.
  2. Inspect the GA4 tag. Confirm the purchase event sends the correct variables, not undefined values, a stale ecommerce object, or a hardcoded zero.
  3. Inspect the outgoing request. In browser DevTools > Network, filter for GA4 collection requests (for example, collect). Check the actual purchase request and its parameters. GTM Preview alone cannot prove what the browser sent.
  4. Check DebugView and reports. DebugView can help validate that an event and its parameters arrive, but it is not a guarantee of immediate inclusion in standard revenue reports. Recheck after processing time and confirm you're using the right property and date range.

What a valid purchase payload should contain

For a standard GA4 ecommerce implementation, send a numeric value, a valid three-letter ISO currency code, a unique transaction_id, and an items array with meaningful item details. Use the correct total for your business and follow GA4's ecommerce specification.

dataLayer.push({
  ecommerce: null
});

dataLayer.push({
  event: "purchase",
  ecommerce: {
    transaction_id: "ORDER-1042",
    value: 129.00,
    currency: "USD",
    items: [{
      item_id: "SKU-01",
      item_name: "Example product",
      price: 129.00,
      quantity: 1
    }]
  }
});

Important: This is a GTM-style data layer example, not a GA4 network request. Your GTM tag must map these values to GA4 event parameters. A data layer push by itself does not send a GA4 purchase event.

For GA4 purchase events, value should equal the sum of item price × quantity, excluding shipping and tax, as specified in GA4 ecommerce guidance. Shipping and tax can be sent separately when relevant. Do not use a localized formatted string such as "$129.00" as the numeric value.

The most common causes—and the fastest checks

GA4 purchase revenue troubleshooting checklist
SymptomWhat to checkNext action
Purchases increase, revenue stays at zerovalue and currency on the outgoing purchase requestFix the GTM parameter mapping or ecommerce payload
Revenue differs from store totalsTax, shipping, refunds, currency and the definition of revenueCompare equivalent metrics and transactions
Some orders have revenue, others don'tPayment method, checkout route, race conditions and missing variablesTest each checkout completion path
GTM shows correct values, GA4 doesn'tGA4 request payload, event modifications and destination propertyInspect the actual request and configuration
Revenue appears lateReporting latency and report date rangeWait for processing and compare again

If your website uses multiple currencies, send the transaction currency for each purchase. Don't confuse a store's displayed currency with the currency transmitted to GA4. Reused transaction_id values can cause purchase deduplication; ensure each real transaction has its own ID.

How to verify the fix

  1. Trigger one identifiable test transaction through the affected checkout path.
  2. Confirm purchase, transaction_id, numeric value, currency, and items in the outgoing GA4 request.
  3. Check the event in DebugView if debug mode is enabled.
  4. After standard report processing, compare the corresponding purchase and revenue figures with your backend using the same scope and revenue definition.

Bottom line: Start with the actual GA4 request, not the dashboard. Once you know whether the value was missing before GTM, inside GTM, or after transmission, the fix becomes much more specific.

Official documentation