Open beta — completely free, no card required.
Playbooks

GA4 for SaaS: Track Signups, Trials, and Activation (and Where GA4 Stops)

GA4 for SaaS: which signup, trial, and activation metrics GA4 can actually measure, the cross-domain trap that quietly breaks your funnel, and how to pull it all through AI.

By Ivan Pika

The reason GA4 feels useless for SaaS isn't that it's missing features. It's that your funnel is split in two and half the events you care about never fire. Your marketing site and your product live in different places, often on different domains, and when a user crosses from one to the other GA4 can lose the thread. Then the part that actually makes money — trial converts, user activates, MRR grows — happens inside the app, where GA4 was never going to see it anyway.

So before you copy a "top 12 SaaS metrics for GA4" list off some agency blog, sort out the two questions that decide whether any of it is real: is the funnel even stitched together, and are the events you want firing at all? Most SaaS GA4 setups I open fail one or both, and every "low conversion rate" panic I've chased on a SaaS site for the last year traced back to one of them, not to the landing page.

This is the e-commerce GA4 reports with AI workflow's awkward cousin. Same idea, connect GA4 to an assistant and ask instead of build, but the SaaS funnel breaks in ways a Shopify store never does, and you have to fix the plumbing before the prompts mean anything.

What GA4 can and can't measure for SaaS

GA4 is an acquisition tool wearing a product-analytics costume. For SaaS that means it's strong on everything up to the signup and blind to almost everything after.

It sees the session, the source, the landing page, the path to your pricing page, the signup or demo form, and any in-app event you bother to send it. It does not see trial-to-paid, activation health over time, MRR, churn, expansion, or net revenue retention. Those live in Stripe and your product database. I'm not going to re-litigate that split here. The SaaS conversion benchmarks piece lays out exactly which metric sits in which system, and which ones become measurable the second you mark a Key Event. Read that for the "what number is good" question.

This article is the other half: getting GA4 to measure the part it can measure correctly, instead of confidently reporting a number that's wrong by an order of magnitude. Everyone warns you that GA4 can't see trial-to-paid. Fine, expected. Nobody warns you that GA4 will report your signup rate as 0.2% and sound completely sure about it. That's the failure mode that costs you a month.

The cross-domain trap that breaks the SaaS funnel

Here's how it goes wrong, and I've watched it happen on roughly half the SaaS sites I've opened.

Your marketing site is acme.com. Your product is acme.app, a different domain, which is how plenty of SaaS apps are set up. A visitor lands on the marketing site from a Google ad, reads the pricing page, clicks "Start free trial," and gets handed to acme.app to create the account. The sign_up event fires there, on the app's domain, the instant the account is created.

If you haven't configured cross-domain measurement, GA4 treats acme.app as a completely separate site, because to GA4 it is one. The jump from acme.com to acme.app ends one session and starts a new one with a fresh client ID. That new session's referrer is your own marketing domain, a self-referral, so the signup gets attributed to a brand-new visit "from acme.com," disconnected from the Google ad that paid for it. On the marketing-site side, the sign_up event barely appears, because it didn't happen there. Your signup rate, measured as sign_up events over marketing-site sessions, collapses to something absurd.

The tell is always the same: your own domain shows up as one of your top referral sources, and you've got a fat pile of sessions whose landing page is on the app domain with no real acquisition source attached. Once you know the pattern you see it everywhere.

The fix takes about three minutes. Admin → Data Streams → pick your web stream → Configure tag settings → Configure your domains. List both domains in the journey: acme.com and acme.app. GA4 then passes the linker parameter between them, keeps the session and the client ID intact across the hop, and stops counting your own app as a referrer. Do this before you trust a single SaaS conversion number, because no amount of clever analysis fixes a funnel that was severed at the most important step.

Subdomains are the case people get wrong in both directions. If your app sits on app.acme.com rather than a separate domain, you usually need none of this: GA4 writes its cookie at the registrable-domain level (acme.com), so www and app already share a client ID and the session survives the hop on its own. The exception is when the app subdomain runs its own GA4 tag, its own property, or a different cookie domain, which brings the self-referrals straight back. There the fix is consolidating onto one property and one cookie domain, not the cross-domain setting. Either way the symptom to watch is identical: your own domain turning up as a referral source.

A worked example: the 0.2% signup rate that wasn't

A B2B workflow tool, no-card trial, marketing on acme.com, product on acme.app. The founder pulled signup rate before a board meeting and got 0.2%: 38 signups on 18,400 sessions. Panic. Three weeks of "the landing page must be broken," a redesign half-scoped, a CRO agency on a discovery call.

It took one question against the connected GA4 to see it: "Break down my sign_up events by hostname and by session source/medium for the last 30 days." Nearly every sign_up carried hostname acme.app and a session source of acme.com / referral, the self-referral fingerprint. Separately, there were ~4,100 sessions landing cold on acme.app with source (direct), which is where the real signups had been exiled.

Not a conversion problem. A stitching problem. The signup completed on the app's own domain, and with cross-domain measurement off, GA4 had been filing every one of those conversions under a new self-referred session instead of the marketing visit that earned it.

After adding both domains to the stream config, the sessions stitched back together and the actual signup rate read 3.1%: 685 trial starts over the now-correctly-counted ~22,000 sessions, right around the no-card trial median of ~3.8%. The landing page was fine. The redesign got cancelled. The real constraint was upstream traffic quality, which is a different and cheaper fix than a rebuild. The benchmarks didn't lie; the tracking did.

Activation: the event GA4 will never invent for you

E-commerce has a clean finish line: purchase fires, money changes hands, done. SaaS has activation instead, and activation is whatever "first value" means for your product: the first project created, the first teammate invited, the first report run, the first integration connected. It's the single best leading indicator of whether a signup becomes a paying customer, and GA4 has no idea it happened unless you tell it.

This is where SaaS setups quietly dead-end. The marketing site fires page_view on its own and someone bothered to wire up sign_up, so everyone feels covered, and then the funnel stops dead at signup because the app, a single-page app behind a login, never sends another event. GA4's enhanced measurement can auto-fire page_views on SPA route changes if you enable history-based events, but it never captures the in-app action that signals first value, which is the thing activation actually measures. If your app is a separate codebase on acme.app, nothing in it talks to GA4 until you wire it up.

So you instrument the moment of first value explicitly. At the point in the product where the user actually gets the thing they came for, fire one event:

gtag('event', 'first_project_created', { value: 1 });

Or push the equivalent into the GTM dataLayer if you tag through GTM. Then mark first_project_created as a Key Event in GA4 so the platform gives you a rate instead of a raw count. An unmarked event stays a silent tally that refuses to divide into anything. Now signup → activation is a funnel you can read: if 60% of signups never reach first value, your trial-to-paid number was doomed before billing ever entered the picture, and no pricing-page tweak touches it.

Pick one activation event and get it firing correctly before you add five more. One honest activation rate beats a dashboard of events nobody trusts.

user_id: the one place SaaS has it easier

SaaS gets a tracking advantage e-commerce envies, and most teams leave it switched off. Your users log in. That means you have a stable identifier for the same human across their phone, their laptop, and three sessions next Tuesday.

Set user_id on login, using your internal account ID and never the email or anything else that identifies a person, and GA4 will stitch sessions and devices into one user instead of counting the same person four times. The trial signup on mobile and the activation on desktop become one journey, not two strangers. For a funnel that plays out over days and across devices, which describes most B2B trials, this is the difference between a user count you can plan against and one that's inflated by however many devices your buyers happen to own. Set it once and the AI prompts below quietly get more accurate, because the denominator stops lying.

Build the two funnels — they are not the same funnel

"SaaS conversion" hides two completely different motions, and mashing them together produces a number that describes neither. Decide which one you are before you measure.

Self-serve runs session → pricing view → sign_up / trial_start → activation. The whole thing is observable in GA4 once the events fire and the domains are stitched, because every step happens on the web up to and including first value.

Sales-led runs session → pricing or contact view → generate_lead (demo request, contact form), and then it leaves GA4's world entirely. The MQL qualification, the sales conversation, the closed-won: that's CRM territory, and GA4's job ends at the form submit. Trying to measure pipeline in GA4 is the sales-led version of expecting it to show you trial-to-paid. It can't, and a tool that claims otherwise is guessing.

Most SaaS sites run both at once: self-serve for the small accounts, sales-led for the big ones. That's fine. Just measure them as two funnels with two Key Events (sign_up and generate_lead), not one blended rate that buries a healthy demo motion under a soft self-serve one or the reverse.

The AI workflow: ask the funnel instead of building it

Once the plumbing is right (domains stitched, signup and activation events firing and marked, user_id set), every funnel below is yours. You can build each one by hand in GA4's Explore → Funnel exploration, dragging in your events step by step. Connecting GA4 to an assistant over MCP just collapses that twenty-minute setup into a sentence and lets you ask the follow-up without rebuilding. If you haven't connected it yet, the no-code Claude setup takes about five minutes, and the same connector works in ChatGPT.

Start with the integrity check, because it's the one that just saved a hypothetical founder a redesign:

"Break down my sign_up events by hostname and by session source/medium for the last 30 days. Is my own domain appearing as a referral source?"

If that comes back clean, pull the self-serve funnel:

"Build a funnel for the last 30 days: sessions → pricing page views → trial starts (sign_up) → activation (first_project_created). Show the conversion rate at each step and where the biggest drop is."

Then read the drop honestly. A leak between pricing and signup is a message or plan-clarity problem on the marketing site. A leak between signup and activation is an onboarding problem inside the product, and GA4 just told you which side of the login wall to go fix. That hand-off is the whole point. Most SaaS teams argue about the landing page when the data says the trial experience is where people quit.

For the sales-led side:

"How many generate_lead events did I get last month, broken down by source/medium and by landing page? Which channels send the most demo requests, and what's the session-to-lead rate for each?"

And the one that reframes a budget meeting:

"Compare session-to-signup rate and trial volume by source/medium for the last 30 days. Which channels send sessions that actually start trials, versus sessions that just bounce?"

A channel that floods you with cheap sessions and almost no trials is costing you twice: once in spend, once in the inflated denominator that makes your overall signup rate look broken. That's the same diagnosis as the worked example above, just run on purpose instead of by accident. The full set of these lives in the GA4 prompts library; the SaaS ones are the funnel, channel-quality, and activation cuts.

When a number does move the wrong way, the conversion-rate-drop diagnostic works on the signup funnel exactly as it does on a checkout: define the drop, find where it concentrates, line it up against what changed that week.

A 10-minute weekly SaaS review

The standing version, for a self-serve product, is four questions on a Monday:

  1. "Compare trial starts (sign_up) and activations this week versus last week. Flag anything that moved more than 15%."
  2. "What was my session-to-signup rate by source/medium this week? Any channel that shifted sharply?"
  3. "Of the people who signed up last week, what share hit activation? How does that compare to the prior week's cohort?"
  4. "Are there any anomalies in my sign_up or activation events, broken down by hostname, source, or device, in the last 7 days?"

Question 4 is the tripwire for tracking rot. The day someone ships a change to the app that breaks the activation event, or a new payment provider starts throwing self-referrals, this is what catches it before you spend a week optimizing against a number that quietly died.

Where ConvRadar fits

Everything above runs on any GA4 MCP server, Google's official one included, if you're comfortable with Python and a service account. We built ConvRadar for the SaaS operator who isn't: a hosted GA4 connector you set up in the browser, no terminal, that hands Claude or ChatGPT a set of conversion-diagnostic tools tuned for exactly this kind of work. It knows a SaaS property from an e-commerce one, so it won't try to report you a revenue-per-product table when what you have is a signup funnel, and it'll tell you plainly which metrics live in Stripe instead of inventing them.

What it won't do is fix your tracking for you. If the domains aren't stitched and the activation event isn't firing, ConvRadar reads the same broken GA4 everyone else does, accurately, which means it'll report the broken number. Get the plumbing right first; then connect it and the weekly review becomes one message. It's free during the open beta, email signup, no card.

FAQ

How do I track signups in GA4 for a SaaS product? Fire a sign_up event when the account is created and mark it as a Key Event so GA4 gives you a rate, not just a count. The catch specific to SaaS: that event usually fires on the app side, which is often a separate domain (or a subdomain running its own tag), not the marketing site. If the app is on a different domain, turn on cross-domain measurement (Admin → Data Streams → Configure tag settings → Configure your domains) or GA4 attributes the signup to a self-referral and your signup rate reads far too low.

Why is my GA4 SaaS conversion rate so low? Most often it's not low. It's split. If your marketing site and your app are on different domains with cross-domain measurement off, or on subdomains that each run their own GA4 tag, GA4 severs the session at the hand-off and files the conversion under a new self-referred visit. The fingerprint is your own domain showing up as a top referral source. Fix that before concluding anything about your landing page.

Can GA4 measure trial-to-paid conversion? No. GA4 sees the trial start; the payment happens in Stripe (or your billing system), often days later and behind a login GA4 can't follow. Pull trial-to-paid, MRR, churn, and net revenue retention from billing. GA4's job is everything up to and including activation, and the benchmarks guide linked above maps which metric lives in which system.

What is activation and can GA4 track it? Activation is your product's first-value moment: first project created, first teammate invited, first report run. GA4 can track it, but only if you send an explicit event when it happens; it won't infer first value on its own, and single-page apps behind a login send GA4 nothing by default. Instrument one clear activation event, mark it as a Key Event, and signup → activation becomes a readable funnel.

Do I need GA4 for B2B SaaS, or just a CRM? Both, for different stretches of the funnel. GA4 owns acquisition through the form submit: which channels send sessions that turn into demo requests or trial starts. The CRM owns everything after the lead: qualification, pipeline, closed-won. Measure the generate_lead step in GA4 and hand off to the CRM there; don't ask either tool to do the other's job.

How do I analyze my SaaS funnel with AI? Connect GA4 to Claude or ChatGPT through an MCP server, then ask for the funnel in plain English: "Build a funnel from sessions to pricing views to sign_up to activation, show the drop at each step." The assistant composes the query and returns the funnel in seconds. Start with an integrity check ("is my own domain showing up as a referral source?") so you're analyzing real numbers, not stitched-wrong ones.

Fix the plumbing, then ask the questions. A SaaS funnel measured on a severed session is just a confident way to be wrong.

Connect your GA4 →