
β οΈ Common Mistakes That Break Revenue Tracking
Here are the issues I see again and again:
- Missing the
purchase
event altogetherβespecially for non-standard ecommerce platforms or headless setups - Triggering the purchase tag multiple timesβfor example, when a user reloads the order confirmation page
- Duplicate
transaction_id
valuesβleading to GA4 deduplicating real transactions as duplicates - Sending revenue values on
begin_checkout
oradd_to_cart
βwhich inflates reports - Failing to filter out test/staging dataβadding false revenue
- Missing or inconsistent
currency
fieldsβespecially dangerous for multi-region stores - Coupon codes, tax and shipping not being tracked correctlyβleading to mismatched totals
If your GA4 revenue doesnβt match your Stripe/Shopify numbers, itβs probably not your backend thatβs wrong. Itβs your tracking.
πΈ The Subscription Trap
One major limitation with GA4 is that it tracks revenue at the point of event, not as recurring payments.
So if someone buys a subscription for Β£10/month, your GA4 report will only show the initial Β£10 at checkoutβnot future rebills. Thatβs fine for one-time products, but misleading for SaaS or memberships.
What you can do:
- Track each recurring charge via backend server-side calls (requires dev)
- Use BigQuery to stitch together historical user payments over time
- Segment first-time vs. returning revenue in GA4 using custom dimensions
π What About Gift Cards?
Gift cards are tricky.
If a user buys a gift card, GA4 will count that as revenue (on the purchase event).
But when someone spends a gift card, GA4 may also include that in the purchase
eventβpotentially double-counting the value.
Best practice is:
- Track gift card purchases as revenue
- Subtract gift card usage from future purchase
value
parameters - Or set a custom parameter to distinguish βpaid with gift cardβ revenue in BigQuery
π§Ύ Refunds, Tax, and Shipping
- Refunds: GA4 supports a
refund
event, but it's often not implemented. Without it, your revenue numbers will always skew high. - Shipping & tax: You can include these as separate item parameters or roll them into the total
value
. But whichever route you choose, stay consistent.
In BigQuery,value
is the total order value, but not broken down unless you send custom item-level parameters.
π‘ Pro Tip: BigQuery Can Be Misleading
Even if youβre piping your GA4 data into BigQuery, be carefulβGA4 converts revenue to USD based on the exchange rate at the time of ingestion.
So if youβre reporting across currencies, or doing YoY analysis, you might see inconsistencies.
Solution:
- Always include the original currency in your exports
- Use
currency
andvalue
to back-calculate in your preferred reporting tool - For high-accuracy financials, match BigQuery to backend valuesβnot GA4 frontend numbers
β How to QA Your Revenue Tracking
Donβt assume it works. Check:
- Does the
purchase
event fire on the thank-you page (and only once)? - Is the
transaction_id
unique and consistent with your backend? - Are the
value
,currency
, anditems
all present? - Use GA4 debug view or Tag Assistant to simulate a purchase
- Cross-check totals weekly vs backend/CRM
π§° Bonus: Tools & Checks
- GA4 Debug View
- Real-time monetisation report
- BigQuery
event_name = "purchase"
analysis - Custom alerts when revenue drops below thresholds
- My BigQuery checks (https://www.netimpression.co.uk/tools/bigquery-data-quality-checks) can catch the basics too
Final Thoughts
GA4 doesnβt lieβit just reflects what you send it.
If you send broken or bloated data, itβll faithfully show you the wrong answers.
Revenue tracking isn't just about numbersβit's about decisions. If your reports are off, you're targeting the wrong channels, pausing winning campaigns, and misunderstanding what actually converts.
Get it right, and everything downstream improves.
β