13 September 2026·2 min read
When purchase has no value or currency, and ROAS never appears
Purchase counts arrive but revenue reads zero and ROAS is blank in your ad reports. Why GA4 refuses to calculate the money, and how to confirm and fix it in DebugView in five minutes.
Symptom
The ROAS column in your ad dashboard is empty. GA4 shows purchase counts perfectly well, and revenue on the same row reads zero. Nobody can answer what this month's campaigns actually earned.
The reason this persists is simple: GA4 does not treat it as a fault. No warning, no red badge. The number is just zero.
Cause
For GA4 to read a purchase as revenue, two parameters have to arrive with it: value (the amount) and currency (the code). Miss either one and GA4 counts the event but calculates no revenue.
Three shapes turn up often in real scans.
| What was sent | What GA4 does with it |
|---|---|
No value, currency: "USD" |
1 purchase, 0 revenue |
value: "$39.00" |
Not a number, so 0 revenue |
value: 39, currency: "usd" |
Code not recognised, 0 revenue |
The third is the frustrating one. The amount is right there, but the currency code was sent in lowercase, or as a $ symbol, and the whole thing is discarded. GA4 accepts only a three-letter uppercase ISO 4217 code.
How to check in GA4
1) Is it missing everywhere? Open Reports → Monetisation → Ecommerce purchases. Purchases present with total revenue at zero settles it.
2) Is it missing on only some of them? This is the more common case — one payment method, or the mobile app path, sends no amount. Compare the purchase count against the number of purchases that carried revenue. Past roughly a fifth missing, the metric is not usable.
3) See the cause with your own eyes. Turn on Admin → DebugView, run one test checkout, and click the purchase event. The parameters actually sent appear in the right-hand panel, so a missing value or a quoted one shows up immediately.
How to fix it
In GTM, add value and currency to the GA4 event tag's event parameters and wire them to data layer variables. Sent directly through gtag, it should look like this.
gtag("event", "purchase", {
transaction_id: "T-12345",
value: 39.0, // a number — no currency symbol, no thousands separator
currency: "USD", // three uppercase letters, ISO 4217
items: [{ item_id: "SKU-1", item_name: "Basic tee", price: 39.0, quantity: 1 }],
});
value conventionally carries the amount actually charged, net of shipping and tax. If the site only ever sells in one currency, currency can be a constant.
If the amount is right but per-product revenue still looks empty, check the items array. With item_id or item_name blank you will get a correct total and never learn which products produced it.
Once fixed, run the checkout again in DebugView, then confirm a day later that revenue appears in the Ecommerce purchases report. GA4 does not recompute past data, so ROAS for the blank period does not come back.
In one line
purchase exists to carry money, not to be counted. value as a number, currency as an uppercase ISO code, both together — get those two right and ROAS starts calculating.