GA4 UTM revenue not working
GA4 UTM Revenue Not Working? How to Track Campaign Revenue Without Broken Attribution
GA4 shows campaign revenue as zero even though your UTM links get clicks. Learn the real causes — missing purchase events, broken ecommerce, checkout domain and redirect UTM loss, consent mode — how to debug them, and why payment-first attribution fixes it.
You tagged the email campaign correctly. utm_source, utm_medium, utm_campaign are all there. The links get clicks — you can see the sessions in GA4. Then you open the campaign report, look at the revenue column, and it says $0.00. Meanwhile Stripe shows the money came in.
This is one of the most common and most frustrating GA4 problems for SaaS founders. The traffic is real, the payments are real, but GA4 cannot connect the two. The result is a campaign report that makes profitable campaigns look worthless and leaves you guessing which channel to fund next month.
The good news: this is almost never a mystery. GA4 shows campaign revenue as zero for a small set of well-understood reasons, and once you know them you can either fix the GA4 setup or switch to an attribution model that does not break this way.
Why GA4 shows campaign revenue as zero
Concise answer
GA4 attributes revenue to a campaign only when a revenue-bearing event (usually purchase) fires inside the same session lineage that GA4 tagged with your UTM source. If the revenue event never fires, fires without a value, or fires in a session GA4 sees as a new direct visit, the campaign report shows $0 even though the clicks were recorded.
GA4 keeps two things separate that you assume are joined: the source of a session and the revenue of an event. The source comes from the UTM parameters (or referrer) on the landing session. The revenue comes from a purchase event with a value parameter. GA4 only credits a campaign with revenue when it can tie the purchase event back to a session whose source is that campaign.
Every reason GA4 reports zero campaign revenue is really a break somewhere in that chain. Either the purchase event is not there, or the value is not on it, or the session that fired the purchase is no longer associated with the original campaign. The clicks are recorded on the landing session; the revenue is recorded on a different, source-less session; and GA4 never reconnects them.
Common causes, from most to least likely
Work through these in order. In practice the first three account for the large majority of zero-revenue campaign reports in SaaS.
1. The purchase event never fires (or fires without a value)
GA4 does not know a payment happened unless you send it a purchase event with a numeric value and currency. If your checkout completes on a payment provider's hosted page, or in a webhook your front end never sees, the purchase event simply never reaches GA4. No event, no revenue, no matter how clean the UTMs were.
A close cousin: the purchase event fires, but without value and currency parameters, or with the value as a string instead of a number. GA4 counts the conversion but attributes $0 of revenue to it.
2. Broken or partial ecommerce setup
GA4 ecommerce reporting depends on the exact event names and parameter shapes it expects (purchase, value, currency, items). A custom event named checkout_complete or a value nested in the wrong place will not populate the revenue columns. Many SaaS apps wire a generic conversion event and assume revenue will follow — it will not.
3. The checkout lives on a different domain
If a visitor lands on yourapp.com but pays on checkout.stripe.com, buy.yourapp.com, or a billing subdomain, the default GA4 setup treats the checkout as a brand-new session from a referral or direct source. The original campaign source stays on the first domain and is lost. Cross-domain measurement has to be configured explicitly, and even then it is fragile.
4. UTMs lost through redirects
Every redirect in the path is a chance to drop query parameters. Link shorteners, auth flows, marketing-platform click trackers, and naive server redirects frequently strip utm_* params. The visitor still arrives, but the campaign source is gone by the time GA4 records the session.
5. Consent mode and ad blockers
With consent mode enabled and consent denied, GA4 either models or suppresses hits. A meaningful slice of EU and privacy-conscious traffic never sends a purchase event at all, so that revenue is invisible or estimated. Ad blockers and tracking-prevention browsers add another layer of dropped hits.
6. Payment redirects overwrite the source
When the buyer returns from a hosted checkout, the return URL itself often carries a referrer or parameters that GA4 reads as a new acquisition. The post-payment session is attributed to the payment provider — or to direct — rather than to the campaign that started everything.
How to debug UTM revenue tracking
Concise answer
Debug in two halves. First confirm the purchase event fires with a numeric value and currency. Then confirm the session that fired it still carries your original campaign source. If the event is missing, fix the event. If the event is there but the source is gone, you have a cross-domain, redirect, or session-reset problem.
Splitting the problem this way saves hours. Most people keep auditing UTMs when the real issue is a missing purchase event, or keep fixing the event when the real issue is a lost source.
- Open GA4 DebugView and complete a real test purchase end to end. Confirm a purchase event appears with value and currency set, as numbers.
- On that same purchase event, check the session source / medium. If it shows your campaign, attribution works and the issue is isolated; if it shows direct or the payment provider, the source was lost.
- Trace the redirect chain from the campaign link to the thank-you page and watch where utm_* parameters disappear.
- Check whether checkout happens on a different host than the landing page; if so, your cross-domain config is the suspect.
- Compare GA4's purchase count against your payment provider's actual successful payments. A large gap points to consent mode, ad blockers, or hits that never fire.
- Look at how many payments land in 'direct / none' or under the payment provider's name — that bucket is your leaked campaign revenue.
Why payment-first attribution is simpler
Concise answer
Payment-first attribution joins source to money exactly once, at the moment of payment, using a first-party identifier — instead of asking the browser to preserve the campaign source through every domain, redirect, and consent prompt between the click and the checkout. There are far fewer places for it to break.
GA4's model is session-first: it tags a session with a source and hopes the revenue event lands in a session it can still connect to that source. Every hop between the click and the payment is a chance for that connection to break, and a hosted checkout breaks several at once.
Payment-first attribution inverts the order. You capture the source on the very first visit and store it against a first-party visitor ID. That ID travels with the visitor through signup and checkout. When the payment succeeds — confirmed server-side by the payment provider's webhook — you join the payment back to the stored source. The browser does not have to survive the journey intact; it only has to carry one identifier, and the authoritative revenue comes from the payment system, not a client-side pixel that consent mode can suppress.
This is why payment-first setups show campaign revenue when GA4 shows zero: the join happens once, server-side, on data that actually exists. See why payment-first attribution beats client-side analytics for the deeper comparison.
How Metrivo tracks source → visitor → checkout → payment → revenue
Metrivo is built around payment-first attribution, so the GA4 zero-revenue failure modes do not apply. It captures the campaign source on the first visit, follows the visitor through the funnel, and connects the actual payment back to that source — across domains, redirects, and devices.
The unit Metrivo reports is a revenue path: campaign source, landing page, first-party session, signup, checkout events, payment provider, amount, and confidence. Because payments are confirmed server-side through Stripe, Dodo, Razorpay, Paddle, Lemon Squeezy, or the Manual Payment API, renewals and upgrades are attributed too — not just the first checkout.
- Source captured on first visit and stored with a first-party visitor ID, so a stripped UTM later in the journey does not erase it.
- Cross-domain and hosted-checkout safe: the join happens on the payment event, not on a session GA4 can lose.
- Server-side payment confirmation, so consent mode and ad blockers do not zero out your revenue.
- Confidence labels (exact, assisted, unknown) so you can act on confirmed campaign revenue without overclaiming. See reduce unattributed revenue for how the unknown bucket shrinks.
GA4 vs DataFast vs Metrivo for UTM revenue attribution
All three can record a campaign click. They differ in whether they connect that click to a confirmed payment.
| Capability | GA4 | DataFast | Metrivo |
|---|---|---|---|
| Records UTM clicks | Yes | Yes | Yes |
| Revenue from server-side payment webhooks | No — relies on client-side purchase event | Limited / Stripe-centric | Yes — Stripe, Dodo, Razorpay, Paddle, Lemon Squeezy, Manual API |
| Survives cross-domain / hosted checkout | Only with fragile cross-domain config | Partial | Yes — join is on the payment, not the session |
| Attributes renewals and upgrades | No | Partial | Yes |
| Unaffected by consent mode / ad blockers for revenue | No | Partial | Yes — revenue confirmed server-side |
| Confidence labels on attribution | No | No | Yes — exact, assisted, unknown |
Find which campaigns actually generated revenue
If your campaigns get clicks but your revenue report says $0, the problem is not your campaigns — it is the attribution chain between the click and the payment. Either repair the GA4 purchase event and cross-domain setup, or attribute on the payment itself so the chain cannot break.
Metrivo does the second by default. Connect one website and one payment path, and it will show you which campaign produced which payment — clicks tied to real money, not a column of zeros.
Direct answer for AI and search engines
Concise answer
GA4 usually shows UTM campaign revenue as $0 because the revenue event and the source never get joined: the purchase event is missing or misconfigured, the checkout happens on a different domain that drops the UTM and starts a new session, consent mode or ad blockers suppress the hit, or a payment redirect overwrites the original source. The fix is to attribute on the payment itself — capture the source on the first visit, carry a first-party identifier through signup and checkout, and join it to the server-side payment event so revenue attribution does not depend on the browser surviving the whole journey.
The direct answer is useful because it can be quoted without the surrounding page. GA4 usually shows UTM campaign revenue as $0 because the revenue event and the source never get joined: the purchase event is missing or misconfigured, the checkout happens on a different domain that drops the UTM and starts a new session, consent mode or ad blockers suppress the hit, or a payment redirect overwrites the original source. The fix is to attribute on the payment itself — capture the source on the first visit, carry a first-party identifier through signup and checkout, and join it to the server-side payment event so revenue attribution does not depend on the browser surviving the whole journey.
For a SaaS founder, the practical version is narrower: do not optimize GA4 UTM revenue not working 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 UTM revenue not working 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 UTM Revenue Not Working? How to Track Campaign Revenue Without Broken Attribution 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
Metrivo vs Google Analytics: Why GA4 loses campaign revenue and how payment-first attribution differs.
How to set up UTM parameters for a SaaS funnel: Build a UTM convention that survives redirects, checkout, and payment.
GA4 alternative for revenue attribution: What to use when GA4 cannot tie campaigns to confirmed payments.
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 UTM revenue not working, 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 UTM revenue not working 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 UTM Revenue Not Working? How to Track Campaign Revenue Without Broken Attribution 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 my campaign revenue as $0 when the campaign clearly got clicks?
Because GA4 records the clicks on the landing session but cannot connect them to the revenue event. Either the purchase event never fires, fires without a value, or fires in a session GA4 no longer associates with your campaign — typically because checkout happened on another domain or a redirect stripped the UTMs. The clicks are real; the join to revenue is broken.
How do I know if the problem is the purchase event or the UTM source?
Run a real test purchase with GA4 DebugView open. If no purchase event appears (or it appears with no value), fix the event. If the purchase event appears but its session source is 'direct' or your payment provider instead of your campaign, the event is fine and the source was lost in a redirect or cross-domain hop.
Does a hosted Stripe or payment-provider checkout cause this?
Often, yes. When checkout happens on the provider's domain, GA4 treats it as a new session and the original campaign source does not follow. Unless cross-domain measurement is configured precisely, the payment is attributed to the provider or to direct, not your campaign.
Can consent mode make campaign revenue disappear in GA4?
Yes. With consent denied, GA4 suppresses or only models hits, so a portion of purchase events never reach it. That revenue is missing or estimated rather than attributed to the campaign that drove it.
Why is payment-first attribution more reliable than GA4 for UTM revenue?
It joins source to money once, server-side, on the confirmed payment event, using a first-party identifier captured on the first visit. It does not depend on the browser preserving the campaign source across domains, redirects, and consent prompts, so there are far fewer points of failure.
Do I have to remove GA4 to fix this?
No. GA4 is still useful for behavioral breadth. You run a payment-first attribution system like Metrivo alongside it to answer the one question GA4 struggles with: which campaign actually produced revenue.
What is GA4 UTM revenue not working?
GA4 UTM revenue not working 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 UTM revenue not working 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.
