Skip to main content
Card class: HeroCategory: Analytics
GA4-measured revenue. Pair with commerce-sibling total to spot attribution divergence.

At a glance

Revenue as Google Analytics 4 measured it from purchase events fired by your store’s tag. GA4 typically captures 75, 90% of actual orders. Use it for traffic and channel attribution, NOT as the source of truth for revenue, your commerce platform (Shopify, BigCommerce, Adobe Commerce) is always the cleaner figure.
What it countsDaily SUM(totalRevenue) from GA4’s purchase event, the metric exposed by the GA4 Data API. The card shows it as a daily trend over the selected window.
Why GA4 misses ordersThe purchase event must fire from the customer’s browser when they reach the order-confirmation page. It fails to fire when (a) ad blockers block the GA4 tag, (b) the user rejects cookies and your consent banner respects that, (c) the network is too slow and the user navigates away before the tag fires, (d) the GA4 SDK has a bug or the GTM container isn’t deployed correctly. The aggregate miss rate is typically 10, 25% for ecommerce stores.
Sample basisGA4 returns totalRevenue directly without sampling for the standard date ranges; sampling kicks in only on very long ranges (> 14 months) or with high-cardinality dimension breakdowns. Vortex IQ’s standard windows (T/7D/30D vsP) are below the threshold.
Bot traffic filterGA4 has a built-in Internal Traffic exclusion for known bots (IAB Tech Lab list). Vortex IQ uses GA4’s filtered runReport output, no further bot filtering needed.
Time zoneThe GA4 property’s configured timezone, not UTC. Vortex IQ uses the property timezone for windowing.
CurrencyGA4 stores totalRevenue in the property’s reporting currency (account-level setting). Multi-currency stores see an FX-converted figure (Google’s daily FX rate, applied at event time).
RefundsNOT deducted from totalRevenue. GA4 has a separate refundAmount metric that subtracts refunded transactions, you’d need a custom report for the net view.
Tax / shippingConfigurable per merchant. GA4’s purchase event carries value (typically the order total inclusive of tax + shipping by default), tax, and shipping separately. The totalRevenue aggregate uses value. If your tag was set up to send value net of tax, GA4 won’t have tax-inclusive revenue.
Time windowT/7D/30D vsP (default 30D vs the prior 30D)
Alert triggerdrop >15% vsP, driven by sentiment_key: ga_revenue_trend
Rolesowner, marketing, finance

Calculation

Calculated automatically from your Google Analytics 4 data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

Worked example

A UK fashion brand running on Shopify with GA4 measurement. The 30-day window covers 14 Mar 26 to 12 Apr 26.
SourceRevenue measuredNote
Shopify Total Revenue (truth)£412,600Headline from Shopify Total Revenue, every order, all channels
GA4 totalRevenue (this card)£348,900What GA4 measured
The gap£63,700 (15.4%)The missing 15.4% is the GA4 tracking gap
What’s interesting:
  1. GA4 is missing £63,700 of real revenue. That’s 15.4%, comfortably inside the 10, 25% normal band. The gap comes from a mix of ad blockers (~5%), consent rejection on the cookie banner (~6%), tag-fire failures (~3%), and a small batch of B2B orders that bypass the storefront entirely (~1.4%).
  2. The gap is roughly stable week-over-week. That’s the test for whether GA4 is healthy. If the gap suddenly jumped to 35% one week, the merchant’s GA4 tag is probably broken (rolled back to GA UA, or the consent banner started blocking by default).
  3. Channel attribution still works. GA4’s strength isn’t the absolute number, it’s the channel breakdown. So even though GA4 is undercounting by 15%, the relative share of organic vs paid vs direct vs email is still informative because the bias affects all channels roughly equally.
  4. The card alert won’t fire. Day-by-day GA4 revenue is down 4% vsP, well below the 15% threshold. The merchant should still investigate any sudden GA4-only drop, that’s usually a measurement issue, not a real revenue issue.
Rule of thumb: if Shopify revenue is up 10% but GA4 revenue is flat, suspect a measurement regression (broken tag, consent change, ad-blocker version update). If both go up 10% together, the lift is real.

Sibling cards merchants should reference together

CardWhy pair it with GA4 Revenue Trend
GA4 SessionsThe traffic side. Revenue ÷ Sessions gives you Revenue per Session, the per-visit value of your traffic.
GA4 Conversion RateWhat % of sessions ended in a purchase. The denominator-aware view.
GA4 Revenue by ChannelThe actually-useful GA4 view: revenue split by Default Channel Group (Organic, Paid Search, Direct, Email, Social, Referral, Display).
GA4 Revenue by Source/MediumFiner-grained channel attribution using UTM parameters.
GA4 Tracking Gap vs CommerceThis card ÷ commerce platform total. Lets you see if the gap is widening (broken tag) or stable (normal).
Shopify / BC / Adobe Total RevenueThe truth side. Always reconcile against this; never use GA4 for revenue figures.
Klaviyo Email-Attributed RevenueEmail channel revenue. GA4 typically claims less email revenue than Klaviyo because of attribution-window differences.

Reconciling against the vendor’s own dashboard

Where to look in GA4: Reports → Monetization → Ecommerce purchases for the headline. The Total revenue column should match this card to within a few pounds. Other GA4 views that look like the same number but aren’t:
  • Reports → Acquisition → Traffic acquisition: shows revenue per channel but the row totals can differ from the headline due to attribution-model interactions.
  • Explorations: custom reports can use any date filter and may include sampling, the standard report doesn’t.
  • Realtime → Revenue: last-30-min only, useful for tag-fire validation but not for trends.
Why our number may legitimately differ from GA4 itself (rare):
ReasonDirection of divergence
Currency conversion lag. GA4 applies daily FX; if Vortex IQ caches an hour-stale FX rate, multi-currency stores see micro-drift.<0.5%
Late-arriving event ingestion. GA4 ingests events with up to 4-hour delay. Vortex IQ reads the snapshot at sync time.Marginal on the most recent 24h
Sampling on long ranges. Date ranges > 14 months trigger GA4 sampling. Vortex IQ’s standard windows are below this threshold.None for standard windows
Why our number ALWAYS differs from the commerce-platform total revenue (this is the important one): GA4 is not the source of truth for revenue. Use it for traffic and channel attribution; use the commerce platform (Shopify, BigCommerce, Adobe Commerce) for the actual revenue figure.
CardExpected relationshipWhat causes the divergence
shopify.total_revenueGA4 = Shopify × (1 − tracking gap). Typical gap 10, 25%.Ad blockers (~5%), cookie consent rejection (~5, 10%), tag-fire failures on slow networks (~2, 5%), B2B / draft orders that bypass the storefront entirely (~0, 5%).
bigcommerce.total_revenueGA4 = BC × (1 − tracking gap). Typical gap 10, 25%.Same shape. BC’s Incomplete and Declined orders aren’t in GA4 either (purchase event only fires on success), so GA4 is “cleaner” in that one sense.
adobe_commerce.total_revenueGA4 = Adobe × (1 − tracking gap). Typical gap 10, 25%.Same shape. Adobe Commerce’s pending_payment orders aren’t in GA4 (purchase event fires only on processing or complete).
stripe.stripe_total_revenueGA4 may be lower or higher than Stripe depending on payment mixStripe sees only Stripe-routed payments; GA4 sees all (modulo tracking gap). For a Stripe-only store, GA4 ≈ Stripe × (1 − tracking gap).
Sanity check rule: the gap between commerce-platform total and GA4 should be stable week-over-week. A sudden gap widening (commerce up 10%, GA4 flat or down) is a measurement regression: a tag broke, a consent banner setting changed, or an ad blocker version popped that GA4’s anti-tampering doesn’t yet recognise. Open the GA4 Tracking Gap vs Commerce card for the trended view.

Known limitations / merchant FAQs

Why is GA4 lower than Shopify? Is GA4 broken? GA4 isn’t broken; it’s structurally undercounting. The purchase event must fire from the customer’s browser at the order-confirmation page. That event fails when ad blockers run, when cookie banners are rejected, when networks are slow, or when GTM containers are mis-configured. The aggregate miss rate sits at 10, 25% for healthy ecommerce stores. Treat the commerce platform as the source of truth. Can I “fix” the gap? Partially. Server-side tagging via Google Tag Manager Server (or a Cloudflare Worker proxy) bypasses ad blockers on the client. Consent Mode v2 with modelled conversions narrows the gap further (Google fills in some of the missing data using machine-learned models). Realistically you can shrink the gap from 25% to about 8, 12% with a serious tag-side investment, but never to zero. The gap suddenly jumped from 15% to 35%, what happened? Almost always a tag regression. Check (1) your GTM container is publishing correctly (a Preview Mode test will confirm), (2) your consent banner hasn’t started defaulting to Reject, (3) your ecommerce JavaScript hasn’t been swapped (Shopify theme update, headless redeploy), (4) Apple’s Safari ITP rolled an update that breaks the event. The “GA4 missing X% more orders” symptom usually maps to one of these four root causes. What’s the difference between this card and “Shopify with GA4 channel filter”? Different things entirely. This card is GA4’s measurement of revenue as fired by the GA4 tag. The Shopify-with-channel-filter view is Shopify’s own attribution of which marketing source drove the order. They use different attribution models and different event data. Don’t compare them directly. My multi-currency store, does GA4 show me one currency or multiple? One. GA4 stores totalRevenue in the property’s reporting currency (account-level setting), with daily FX conversion applied at event time. Multi-currency stores see all revenue normalised to the reporting currency. This is one of the few areas where GA4 is cleaner than the commerce platform, which sums original-currency totals. Does Klaviyo-attributed revenue show up here? Yes, every order with a purchase event shows up here regardless of which channel drove it. To see the per-channel breakdown (including email), use GA4 Revenue by Channel. Note that GA4’s “Email” channel won’t equal Klaviyo’s claim, GA4 uses last-non-direct click; Klaviyo uses last-touch within 5 days. Can I trust GA4’s “Today” number? Less than the rolling-7-day or 30-day numbers. GA4 has up to 4-hour event-ingestion delay, plus the tracking gap is structural, plus today’s revenue is incomplete data. Use the rolling windows for trends. My GA4 says revenue is up but my Shopify says it’s flat, what’s going on? This usually means either (a) you fixed a tagging issue that was previously suppressing GA4 conversions (good news, just be aware the lift is artificial in the GA4 view), or (b) Google rolled out a Consent Mode v2 modelling improvement that increased modelled conversions for your account. Open the GA4 Tracking Gap vs Commerce card to see if the gap narrowed.

Tracked live in Vortex IQ Nerve Centre

Revenue Trend is one of hundreds of KPI pulses Vortex IQ tracks across Google Analytics 4 and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.