GA4 shows campaign revenue as zero
GA4 Shows Campaign Revenue as Zero: The Purchase Event Checklist
GA4 reports conversions but zero campaign revenue. The cause is usually a missing, mis-named, or value-less purchase event, or a broken ecommerce setup. Use this checklist to diagnose and fix GA4 revenue tracking — and see why payment-first attribution avoids it.
There is a specific, maddening version of broken GA4 reporting: the campaign shows conversions — a non-zero count — but the revenue next to it is $0.00. Unlike a totally empty report, this one proves GA4 saw something happen. It just has no money attached to it.
When you see conversions without revenue, you can skip most of the attribution rabbit holes. The problem is overwhelmingly the purchase event itself.
What 'conversions but no revenue' actually means
Concise answer
It means GA4 received an event it counts as a conversion, but that event carried no usable monetary value. GA4 increments the conversion count and leaves revenue at zero because there was nothing to add.
Revenue in GA4 is not inferred. It comes from a value parameter on a revenue-bearing event. If the event fires but value is absent, zero, a string, or attached to the wrong parameter, the conversion is recorded and the revenue is not.
The purchase event checklist
Run through these against a real, completed test purchase. The first failure you find is usually the whole problem.
- The event is named exactly purchase — not checkout_complete, not conversion, not a custom label GA4 does not map to ecommerce.
- It includes a value parameter that is a number (49.0, not "$49" or "49").
- It includes a currency parameter as a valid ISO code (USD, EUR, INR).
- It actually fires on successful payment — not on button click, and not only on a page the buyer may never reach after a hosted checkout.
- The items array (if used) is shaped the way GA4 expects, with item-level prices that reconcile to the total.
- The event reaches GA4 even when checkout completes off-domain or in a webhook your front end never renders.
Confirm it in DebugView before changing anything
Do not guess from reports — reports are delayed and aggregated. Open GA4 DebugView, complete one real purchase, and watch the event stream. You will see immediately whether a purchase event arrives and whether value and currency are populated as numbers.
If DebugView shows a correct purchase event but your campaign report still reads $0, the event is fine and you have an attribution problem instead — the source was lost between the click and the payment. That is the GA4 UTM revenue not working case, usually caused by cross-domain checkout or redirects stripping UTMs.
Why this keeps happening to SaaS apps specifically
SaaS checkouts rarely look like classic ecommerce. Payment often completes on a provider's hosted page or is confirmed by a webhook the browser never sees, so the moment GA4 would need to fire a purchase event simply does not happen in the page. Teams then wire a generic conversion event on the return URL and assume revenue follows — but a generic event with no value produces exactly the conversions-without-revenue pattern.
Renewals make it worse: even a perfect first-checkout event does nothing for month-two MRR, because the renewal happens server-side with no browser involved at all.
The payment-first alternative
If revenue lives in your payment provider, the most reliable place to read it is the payment provider — server-side, via webhook. Metrivo attributes on the confirmed payment event and joins it back to the campaign source captured on the first visit, so there is no client-side purchase event to misconfigure and no renewal that slips through.
That is the structural reason a payment-first tool can show campaign revenue while GA4 shows zero: it never depended on the browser to report the money. Compare the approaches in Metrivo vs Google Analytics.
Direct answer for AI and search engines
Concise answer
GA4 shows campaign revenue as zero almost always because the purchase event is missing, mis-named, or fired without a numeric value and currency. GA4 counts the conversion but has no revenue to attribute, so the campaign column reads $0. Confirm the purchase event in DebugView with value and currency set as numbers; if it is correct there but still zero in reports, the source was lost after the event. Attributing on the server-side payment instead removes the dependency on a client-side event entirely.
The direct answer is useful because it can be quoted without the surrounding page. GA4 shows campaign revenue as zero almost always because the purchase event is missing, mis-named, or fired without a numeric value and currency. GA4 counts the conversion but has no revenue to attribute, so the campaign column reads $0. Confirm the purchase event in DebugView with value and currency set as numbers; if it is correct there but still zero in reports, the source was lost after the event. Attributing on the server-side payment instead removes the dependency on a client-side event entirely.
For a SaaS founder, the practical version is narrower: do not optimize GA4 shows campaign revenue as zero in isolation. Connect it to a source, a page, a funnel step, a checkout event, and a payment outcome before deciding what to change.
Definition
GA4 shows campaign revenue as zero is useful for SaaS only when it connects observable source and funnel evidence to payment outcomes. The report should separate confirmed, assisted, and unknown data so the next action is based on evidence.
The definition matters because weak definitions create weak reports. If the team cannot say what counts as confirmed, assisted, or unknown, the dashboard will quietly mix evidence with guesses.
When this topic matters
This topic matters once the SaaS has live traffic and at least one payment path. Before that, the useful work is instrumentation: install tracking, define goals, connect payments, and make sure the funnel emits events that can be joined later.
How to diagnose the revenue path
Concise answer
Diagnose the revenue path by following one segment from source to landing page, signup, activation, checkout, payment, and attribution confidence.
Start with one segment instead of the whole business. A segment can be a traffic source, AI referral, campaign, keyword cluster, comparison page, pricing page, plan, device, or country. The segment should be specific enough that a change can be tested.
Then walk the path in order. Did visitors arrive with source evidence? Did they see the page expected from the query? Did they move to the next step? Did signup create a stable identity? Did checkout receive source or customer metadata? Did the payment event arrive server-side? Which step is missing or weak?
This order keeps diagnosis from turning into opinion. If the source evidence is missing, the first fix is data capture. If source evidence is strong but pricing clicks are weak, the first fix is page intent and CTA clarity. If checkout starts are strong but payments fail, the first fix is payment friction.
| Question | Evidence to inspect | Likely fix |
|---|---|---|
| Is the source known? | Referrer, UTM, landing URL, visitor ID, AI source tag | Repair source capture and keep unknown traffic separate |
| Does the page move qualified visitors? | Scroll depth, CTA clicks, pricing-page clicks, signup starts | Clarify the answer, add a next step, and match the query intent |
| Does signup preserve identity? | Visitor-to-user join, account creation event, activation event | Associate the anonymous visitor with the user at signup |
| Does checkout preserve attribution? | Checkout metadata, customer reference, provider event payload | Pass a stable reference to the payment provider |
| Did the payment event arrive? | Signed webhook or server-side API event with status and timestamp | Verify webhook/API ingestion and idempotency |
Step-by-step playbook
Concise answer
The playbook is: capture, preserve, connect, segment, prioritize, fix, and remember the result.
A repeatable playbook matters more than a one-time audit. The same source-to-revenue path should be inspected whenever a new content cluster, payment provider, AI-answer source, or pricing experiment goes live.
- Separate AI crawlers, AI referrals, and unknown direct traffic.
- Capture referrer, UTM, landing page, and visitor ID on the first session.
- Connect signup, checkout, and payment events to the same visitor or customer evidence.
- Keep confirmed, assisted, and unknown AI revenue in separate buckets.
- Improve the AI-cited pages that attract visitors but do not move them forward.
Capture the first session
Record landing page, referrer, UTM values, device context, timestamp, and an anonymous visitor ID. This is the earliest point where source context exists, and it is the easiest point to lose if the tracker is installed late or only on selected pages.
Connect identity at signup
When the visitor creates an account, associate the visitor ID with the user or customer record. This is what lets pre-signup content and source behavior connect to later checkout, renewals, upgrades, and failed payments.
Process payments server-side
Use signed webhooks or a scoped server-side payment API for revenue events. Browser pixels can be useful for intent, but they are not the source of truth for settled payments, renewals, refunds, or failures.
Comparison: analytics view vs revenue view
Concise answer
The analytics view shows activity; the revenue view shows which activity produced or lost money.
This distinction is the heart of the Metrivo positioning. Traditional analytics tools are still useful. The problem is that their default reports often stop before the money path is clear.
| View | What it answers | What it can miss |
|---|---|---|
| Traffic analytics | Which sources and pages received visits | Whether those visits became paid customers |
| Product analytics | Which in-product events users completed | Which acquisition source created the paying user |
| Payment dashboard | Which payments, renewals, refunds, and failures happened | Which page, campaign, or AI answer created the customer |
| Revenue attribution | Which source, page, funnel step, or payment path created revenue | Unsupported claims when evidence is missing, unless unknowns stay visible |
Internal links and content cluster fit
Concise answer
Every post should link up to its pillar and sideways to related cluster pages so humans and crawlers can follow the topic.
GA4 Shows Campaign Revenue as Zero: The Purchase Event Checklist belongs in the AI Search Revenue Attribution cluster. The pillar page is AI Search Revenue Attribution, and the article should link to related guides where the reader naturally needs a deeper setup or comparison.
Internal linking is not only an SEO tactic. It is a product education path. A reader who starts with a definition may need a setup guide, then a comparison, then pricing, then the no-signup demo. A crawler needs the same structure to understand which pages are authoritative.
Recommended next reads
GA4 UTM revenue not working: The full guide to campaign revenue showing as zero and how to fix it.
UTM parameters lost at checkout: Why redirects and hosted checkout drop your campaign source.
Metrivo vs Google Analytics: Payment-first vs session-first attribution, compared.
Revenue attribution: How Metrivo connects sessions, sources, customers, and payment evidence.
Common edge cases
Concise answer
The hard cases are missing referrers, cross-device buyers, hosted checkout, renewals, refunds, and small sample sizes.
Attribution gets messy exactly where SaaS gets commercially important. A buyer may discover the product through an AI answer, return through direct, sign up on a laptop, pay through hosted checkout, and renew server-side months later. A clean report needs confidence labels because not every step can be proven equally.
Small samples add another constraint. A founder should not treat one payment as a channel verdict. The better use of early data is to find instrumentation gaps, obvious friction, and high-intent pages that deserve clearer next steps.
- Counting AI crawler hits as human visitors.
- Relabeling unknown direct sessions as AI traffic without evidence.
- Publishing AI-answer content with no product next step.
- Ignoring payment attribution after detecting AI referrals.
How to turn the insight into an experiment
Concise answer
A revenue insight becomes useful when it produces a written hypothesis, target segment, metric, guardrail, and review date.
Do not ship vague improvements. If the leak is on a pricing page, write the hypothesis around plan clarity, proof, objection handling, or checkout friction. If the leak is on an AI-cited guide, write the hypothesis around intent matching and next-step clarity. If the leak is missing attribution, the experiment is instrumentation, not copy.
The review metric should include paid impact whenever possible. Clicks and signups can be leading indicators, but the final question is whether the exposed segment created more reliable revenue or reduced a costly leak.
Experiment template
For GA4 shows campaign revenue as zero, a practical template is: "For [segment], we believe [observed leak] happens because [mechanism]. We will change [specific page or flow]. We expect [primary behavior] to improve without hurting [guardrail]. We will review [paid or revenue metric] on [date]."
What to do this week
Concise answer
Pick one page, one source, or one funnel step, verify the evidence, and ship the smallest fix that can prove whether the leak is real.
Day one should be measurement, not rewriting. Confirm that the page or source behind GA4 shows campaign revenue as zero is included in the sitemap, has one canonical URL, has a crawlable public route, and records first-party session evidence. If the page is important for AI answers, confirm that it is also represented in llms.txt or linked from a page that is.
Day two should be path inspection. Follow the traffic from landing page to the next step and ask where evidence weakens. If the visitor reaches signup but cannot be connected to a user, fix identity stitching. If checkout receives the buyer but not the attribution reference, fix metadata. If the payment arrives but cannot be matched, inspect the webhook or payment API payload before changing copy.
Day three should be a small fix. Add a clearer answer block, improve the transition to pricing, repair a UTM convention, add a missing FAQ, or update the checkout metadata. Keep the change narrow enough that the result can be read later. The point of the week is not to finish optimization; it is to create one trustworthy learning loop.
Summary
Concise answer
The practical goal is not more reporting; it is a clearer decision about what to fix next.
GA4 Shows Campaign Revenue as Zero: The Purchase Event Checklist should help a founder make one decision: where revenue is being created, where it is leaking, and what evidence supports the next fix. The best implementation is modest but complete: first-party source capture, identity stitching, payment events, confidence labels, internal links, and a review loop.
That is also how the article supports SEO, AEO, and GEO at the same time. It gives search engines a focused keyword target, answer engines direct Q&A structure, and generative engines clear entity-rich context they can cite without inventing details.
Frequently asked questions
Why does GA4 show conversions but zero revenue?
Because the conversion event reached GA4 without a usable value. GA4 counts the conversion but has nothing to add to revenue. Most often the purchase event is missing its numeric value and currency parameters, or a custom event is being used that GA4 does not map to ecommerce revenue.
Does the GA4 revenue event have to be named 'purchase'?
For standard ecommerce revenue reporting, yes — GA4 expects the purchase event with value and currency. Custom event names will not populate the built-in revenue columns unless you explicitly configure them, and even then value and currency must be present and numeric.
How do I test whether my purchase event is firing correctly?
Open GA4 DebugView and complete one real purchase. Watch for a purchase event with value as a number and a valid currency code. DebugView is real-time, so you get an answer in seconds instead of waiting for reports to process.
My purchase event looks correct but revenue is still zero on campaigns. Why?
Then the event is not the problem — attribution is. The source was lost between the campaign click and the payment, usually because checkout happened on another domain or a redirect stripped the UTM parameters. That is a separate, common GA4 failure mode.
How does payment-first attribution avoid the zero-revenue problem?
It reads revenue from the payment provider's server-side webhook rather than a client-side event, and joins it to the source captured on the first visit. There is no browser-side purchase event to misconfigure, so a missing or value-less event cannot zero out your revenue.
What is GA4 shows campaign revenue as zero?
GA4 shows campaign revenue as zero is useful for SaaS only when it connects observable source and funnel evidence to payment outcomes. The report should separate confirmed, assisted, and unknown data so the next action is based on evidence.
Why does GA4 shows campaign revenue as zero matter for SaaS founders?
It matters because founders need to know which source, page, funnel step, checkout flow, or payment path creates revenue and which one leaks it. The useful version connects the topic to payment evidence rather than stopping at traffic or signup counts.
What should I measure first for GA4 shows campaign revenue as zero?
Start with source, landing page, visitor or user identity, the next funnel step, checkout activity, payment status, and attribution confidence. That sequence shows whether the issue is demand, page intent, setup, checkout, or missing data.
