
Google Ads conversion tracking for SaaS: the setup most founders get wrong
9 days ago - Szilárd
If your Google Ads CPA looks good but your MRR isn't moving, the problem is almost never the campaign. It's the conversion event you're optimizing toward.
Most SaaS founders set up Google Ads with one conversion: signup. Google's bidding algorithm gets handed a signal that includes free-trial signups, free-tier signups, and tire-kickers who'll never pay. The algorithm optimizes for what you told it to optimize for. Campaigns produce signups. Signups don't convert to paid. The retainer with your agency renews because "CPA is improving." Twelve months later you have 8,000 signups, €40k in ad spend, and €4k in incremental MRR.
That's the setup most SaaS founders get wrong. Below is the one that works.
Why signup is the wrong conversion event for SaaS
Signup is upper-funnel. Paid conversion is lower-funnel. The gap between them is where SaaS bleeds money.
A €30 cost-per-signup looks healthy until you realize:
- 40% of signups never activate
- 25% activate but never convert to paid
- 20% convert to paid but churn inside 60 days
- 15% convert to paid and retain
Your real cost per retained customer is closer to €200, not €30. Google Ads doesn't know that. It can't optimize toward what you don't send back.
The fix isn't more spend. It's better signal.
The 5-layer conversion tracking stack
A working setup has five layers. Most SaaS founders have one or two of them.
Layer 1: Google Tag Manager (event capture)
GTM is the wiring layer. Every conversion event lives here, not in your application code. This matters because marketing changes faster than engineering tickets.
What lives in GTM:
- Page view tracking
- Signup event (visitor to free account)
- Activation event (free user to activated, defined per product)
- Paid conversion event (free to paid)
- Plan upgrade event
- Cancellation event
Pick one definition of "activation" before you start. For Insider it was "first practice session completed." For a B2B SaaS it might be "first team member invited." Lock it. Every report downstream depends on it.
Use server-side GTM for paid conversion events. Client-side cookies miss 15-30% of conversions on Safari and Firefox. Server-side tagging closes that gap.
Layer 2: GA4 (cross-channel attribution)
GA4 sits behind GTM. Its job is to answer "where did this customer come from?" across the full session journey, not just the last click.
Configure:
- Enhanced measurement on
- Custom conversions for each event from GTM (signup, activated, paid, upgrade)
- Attribution model set to data-driven, not last-click
- Conversion window set to your actual sales cycle (B2B: 30-90 days, B2C: 7-30 days)
- Cross-domain tracking if signup or checkout lives on a different domain
The data-driven attribution model is the one most founders skip. It's the difference between "Google Ads gets credit for everything" and "Google Ads gets credit for what it actually drove."
Layer 3: Google Ads Enhanced Conversions
Enhanced Conversions sends hashed first-party data (email, phone, address) back to Google Ads. It recovers conversions lost to cookie blocking and improves attribution accuracy.
Setup is one toggle in Google Ads plus a GTM variable that passes the email field at conversion time. On one B2B SaaS client we ran this for, turning it on lifted reported conversions by 18% inside two weeks. Same actual conversions, more of them attributed correctly.
Layer 4: Offline conversion imports (Stripe to Google Ads)
This is the layer that closes the loop.
Free-trial signups send a low-value conversion to Google Ads. When the trial converts to paid in Stripe, you import that conversion back to Google Ads with its actual revenue value. Google's bidding algorithm now optimizes toward paid conversions, weighted by revenue, not raw signup volume.
How it works:
- Capture the Google Click ID (gclid) at signup, store it on the user record
- When Stripe fires
customer.subscription.createdorinvoice.paid, send the gclid plus revenue back to Google Ads via the Offline Conversions API - Google attributes the paid conversion to the original click
Campaigns now optimize toward revenue, not signups. CPA metrics finally mean something. On a B2B SaaS client, this single change cut blended CAC by 34% over 90 days.
Layer 5: PostHog (product analytics)
GA4 tells you which channel drove the signup. PostHog tells you what the user did after.
Track:
- Signup to first action
- Time to first value
- Feature adoption per cohort
- Activation rate by acquisition source
- Churn by acquisition source
This is where you find out that "Google Ads converts at 3.2%, organic converts at 6.8% on the same plan" or that "users from branded search retain 2.3x longer than users from cold ads." Both of those reshape ad spend allocation.
The PostHog dashboard is the artifact that survives after the ad agency leaves. Without it you're back to dashboards you can't read.
Mistakes that quietly break the setup
Even a complete stack breaks if any of the following are wrong.
Cookie consent blocks event firing. GDPR-compliant banners default to "no" in most EU regions. If you only fire events after consent, you lose 40-60% of EU conversions. Use Google Consent Mode v2 to send modeled conversions when consent is denied.
The gclid expires before you capture it. Default Google Ads click ID validity is 90 days. If your trial-to-paid cycle is longer (B2B often is), you lose attribution. Store the gclid permanently on the user record, or import conversions before they expire.
Conversion windows mismatch the actual sales cycle. A 7-day window on a 45-day B2B sales cycle attributes most paid conversions to "direct" or "(none)." Set the window to match real data, not the default.
Multiple conversion definitions across systems. GA4 counts a signup, GTM counts a different signup, PostHog counts a third version. Pick one definition, document it, audit quarterly.
No server-side capture. Safari ITP and Firefox tracking protection block client-side pixels. If your SaaS has high Mac and iPhone traffic, you're losing 20-30% of conversions to ITP alone.
How to validate the setup works
Three checks. Run them weekly for the first month, monthly after.
- End-to-end test conversion. Use a test card in Stripe. Track the full journey from a Google Ads click through trial signup to paid conversion. Confirm the conversion shows up in Google Ads, GA4, and PostHog with consistent attribution.
- Revenue parity check. Pull Stripe MRR for the last 30 days. Pull GA4 attributed revenue for the last 30 days. They should be within 10%. If they're not, find the gap before trusting any other report.
- Cohort retention by source. Pull 90-day retention by acquisition source from PostHog. If "Google Ads" cohort retention is below 60% of "organic" cohort retention, your ad targeting is acquiring the wrong users, not your tracking that's broken.
What you optimize toward when this is in place
Once the stack is wired, the optimization changes.
Stop bidding to "maximize conversions." Bid to "maximize conversion value" with a target ROAS. Feed Google Ads the paid conversion and revenue, weighted by margin and expected retention. The algorithm shifts spend toward the keywords, audiences, and creatives that produce retained, paying users.
This is the difference between an ad account that produces signups and one that produces revenue. It's also the difference between an agency that survives quarterly reviews and one that doesn't.
If you're spending more than €5k a month on Google Ads and your conversion tracking doesn't have all five layers, the setup is the first thing to fix. The campaigns aren't the bottleneck. The signal is.
If you want the 5-layer stack installed on your SaaS, book a call at scalemysaas.com
Keep reading

Why 90% of SaaS Launches Fail (Even With a Great Product)
Most SaaS founders think they have a marketing problem, but what they actually have is a structural bottleneck: a product built without a demand engine.

The 3 Channels Every Technical Founder Should Master First
Stop spreading yourself thin. These are the highest-leverage channels proven to deliver predictable growth for early-stage SaaS founders.

How This SaaS Cut CAC by 68% Using Just Reddit + SEO
Inside the exact acquisition system that helped a bootstrapped SaaS go from burning €5K/month on ads to generating 200+ organic signups monthly.
Stop guessing. Install the system.
If your SaaS has product-market fit and growth has plateaued, book a call. 45 minutes. We'll know in the first 15 if we're a fit.
We take on 3-4 new clients per quarter. Calendar slots are limited.