Most SaaS teams connect Google Ads, point it at signups, and call it done. That's the mistake.
Google's bidding system learns from whatever signal you feed it. If your primary conversion is "signup," and many of those signups never activate, never add a card, and never pay, you're teaching Google to find more of those people. More churners. More students. More people who click, sign up, and disappear.
One design tool we worked with was running ads across two content types. Both were optimized for signups. One content type attracted students and churners with low LTV. The other attracted small businesses and users who actually paid. Google had no way to tell the difference. It just found more signups. Once we switched the primary conversion from signups to purchases, Google started finding buyers instead. CPAs dropped from over $200 to around $80-$120. The fix wasn't the ads. It was what we were asking Google to optimize for.
That's what most Google Ads conversion tracking setups get wrong from the start. The other mistake is tracking nothing at all. Without conversion data, Smart Bidding has nothing to learn from. You end up paying for clicks and hoping. This guide covers both problems.
What is a conversion in Google Ads?
Google conversion tracking records any action you tell Google to count and use to make bidding decisions. It sounds simple. For SaaS, it's not.
Every conversion action you create is either primary or secondary. Primary conversions are used by Smart Bidding to train the algorithm. Secondary conversions are tracked for reporting only. They don't influence bidding.
This distinction matters more than most people realize. If "signup" is your primary conversion, you're giving Google one instruction: find people who sign up. Not people who add a credit card. Not people who upgrade to paid. People who sign up. And it will be very good at exactly that, including the ones who never come back.
Why the wrong signal breaks your campaigns
Google's machine learning is powerful. It's also only as good as what you feed it.
If you feed it low-quality signups, it will optimize for low-quality signups. The algorithm doesn't know your activation rate. It doesn't know who's churning. It just sees which users triggered the conversion event you defined, finds patterns in those users, and goes looking for more of them.
This is why many PLG SaaS campaigns look fine on paper but never produce revenue. Click volume is up. Signups are up. CPA looks manageable. But trial-to-paid is flat. CAC is rising. The board isn't happy.
The problem isn't the ad copy or the bids. It's the data you are feeding Google.
Not every conversion needs to be primary. For most PLG SaaS with enough volume, you track signup as secondary and use credit card added or plan purchased as the event that drives bidding. But if your purchase volume is low, say fewer than 30 conversions per month, Smart Bidding doesn't have enough data to learn from. In that case, signup as primary is the right call until volume builds. The goal is always to move the primary event closer to revenue as volume allows.
What counts as a conversion for PLG SaaS
This depends on your volume and your price point. There's no single right answer, but here's how to think about it.
In Google Ads, go to Goals in the left menu and click Summary. You will see all your conversion actions listed by category.
To switch a conversion between primary and secondary, click the conversion action, select Edit settings, and change the Action optimization setting.
Primary vs. secondary conversions
| Conversion type | Used for | Impact on bidding |
| Primary | Smart Bidding targets | Direct, algorithm trains on this |
| Secondary | Reporting and monitoring | None, observation only |
How to choose your primary conversion
If you're a lower-ticket, high-volume PLG SaaS:
Optimize for the event closest to a purchase. Credit card added or plan purchased, not signup.
We've tested this directly. A campaign optimized for the purchase event produced more purchases at a significantly better CPA than the same campaign optimized for signups. Google found buyers, not just signups.
Use purchase or credit card add as your primary. Use signup as secondary, so you can still track funnel volume without letting it drive bidding.
If you're a higher-ticket or enterprise SaaS:
You won't have enough purchase events for the algorithm to learn from. Smart Bidding needs roughly 30 conversions in the last 30 days to work well. If you have 3 purchases a month, you can't optimize for purchases yet.
In this case, optimize for trials or signups. Track those as primary until your volume builds. Add button clicks and micro-intent signals as secondary. When volume builds, shift the primary event to something closer to revenue.
The PLG conversion hierarchy
| Stage | Event | Recommended use |
| Top of funnel | Signup button click | Secondary (micro-signal) |
| Trial start | Free trial or free plan signup | Secondary or primary for high-ticket, low-volume |
| Activation signal | Finished onboarding, logged in day 2, added a team member, connected an integration, created a project | Primary candidate for quality signal |
| Purchase intent | Clicked upgrade button inside the app | Secondary |
| Revenue event | Credit card added | Primary for high-volume PLG |
| Revenue event | Plan purchased | Primary for high-volume PLG |
The activation signals in the middle of that table are underused. If you can track who finished the onboarding flow, added employees, or connected an integration, that event predicts paid conversion far better than a signup. Feed that to Google and you're teaching it to find users who actually use the product.
Connect this to your broader PPC for SaaS strategy. Getting conversion tracking right is step one of making paid search work at scale.
How to set up conversion tracking in Google Ads: step-by-step
Practical setup, PLG framed. Before you touch the platform, decide what you're tracking.
Step 1: Define your conversion hierarchy first
Write it down before you open Google Ads.
For most PLG products: signup = secondary. Credit card added = primary. Plan purchased = primary. If you're higher-ticket: trial or demo = primary, at least to start.
Don't skip this step. Starting on the platform without a clear hierarchy leads to messy setups that are hard to clean up later.
Step 2: Set up your Google tag via GTM
Google Tag Manager is the right way to do this. It keeps your tag management clean and gives your dev team a single place to manage everything.
For PLG SaaS, many of the most valuable conversion events happen post-login. Credit card adds, plan upgrades, activation steps. The Google tag can't always fire on those pages. The solution is a dataLayer.push from your application code, which sends the conversion event to GTM's data layer. GTM picks it up and fires the Google Ads conversion tag.
Here's what that looks like in practice:
- Your developer adds a dataLayer.push event at the point of the conversion (for example, on successful payment).
- In GTM, you create a Custom Event trigger that listens for that data layer event.
- You attach a Google Ads conversion tag to that trigger.
Here's an example of what that dataLayer push looks like:
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'purchase',
'value': 49.00,
'currency': 'USD',
'plan': 'starter_monthly'
});
The value and plan fields are dynamic in practice, pulled from your billing system. So a starter monthly plan passes $49, a pro annual plan passes $299. Google Ads uses that to optimize toward higher-value purchases, not just any purchase.
Useful resources by Analytics Mania:
Step 3: Create your conversion actions in Google Ads
Go to Goals > Conversions > New conversion action. Name each one clearly. Not "Conversion 1." Something like "Credit card added - trial" or "Paid plan - starter monthly."
Set primary or secondary at the time of creation. For count settings: use "One" for signups and trials. Use "Every" for purchases if you're on a recurring billing model.
Select Website as your conversion source. Uncheck everything else and click Save and continue.
Choose the category that matches your conversion. Use Sign-up for trials and Purchase for paid plan upgrades.
Select your Google tag as the data source.
Choose Manually with code.
Under Conversion settings, set Asset optimization to primary or secondary. Name it clearly. "Credit card added - trial" is clear. "Conversion 1" is not.
You have two options for conversion value. The default assigns the same value to every conversion, for example your average LTV. If you want Google to optimize toward higher-value plan purchases, pass a dynamic value per plan type through GTM using a dataLayer variable. Your developer adds the value to the dataLayer.push code and GTM forwards it to Google Ads.
- For count settings, use One for signups and trials. Use Every for purchases on a recurring billing model.
- Set your conversion window to 90 days. If a user clicks your ad, starts a trial, and buys three months later, a 90-day window captures that. A 30-day window misses it.
Select Google Tag Manager as your implementation method.
The most reliable way to implement conversion tags is through Google Tag Manager. You need two tags: a Google tag that connects your GTM container to Google Ads, and a conversion tag that fires on the specific event you want to track.
In GTM, open your workspace and click New to create your first tag.
Name the tag, then click the pencil icon to configure it.
From the tag type menu, select Google tag.
To find your Google tag ID, go to Tools > Data manager in Google Ads. Under Google tag, click Manage and copy the ID.
Paste the tag ID into the Tag ID field in GTM.
With the Google tag in place, create a second tag for the conversion itself.
Click New again. This time select Google Ads Conversion Tracking. Name it to match the conversion action you created in Google Ads.
Add your Conversion ID and Conversion Label from Google Ads. You will find both in the conversion action setup screen. If you are passing a dynamic conversion value, add a dataLayer variable in the conversion value field. If you are using a static value, enter it directly here. Now assign a trigger. The trigger tells GTM when to fire this conversion tag. Click the pencil icon to select or create one.
We will use the custom event trigger created from the dataLayer.push in Step 2. If your developer has added a dataLayer.push at the point of conversion, creating the trigger is straightforward. In GTM, click Triggers in the left menu.
Click New, name your trigger, then select Custom Event as the trigger type.
In the Event name field, type the event name exactly as it appears in your dataLayer.push code.
<script>
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': purchase
});
</script>
In this example, the event name is "purchase." Type it exactly as written. Leave Trigger fires on set to All Custom Events. Save and close. Your conversion tag is ready.
Step 4: Set your conversion window
The default is 30 days. Don't cut it shorter. For SaaS, the recommendation is 90 days.
Why? Because a user might click your ad, start a trial, compare competitors, extend the trial, speak to your sales team, and then buy three months later. A 30-day window misses that. A 90-day window catches it and gives Google credit for the original click. More attributed Google Ads conversions means more data for the algorithm to learn from.
Step 5: Verify the tag is firing
Use Google Tag Assistant to confirm the tag fires on the right event. Check the conversion action in Google Ads. It will show "Unverified" at first. Within 24-48 hours of a test conversion, it should move to "Recording."
If it stays unverified, check the trigger in GTM, confirm the dataLayer.push is firing in your app, and use the GTM preview mode to trace what's happening.
You can also verify in GTM directly. Click Preview in your GTM workspace and enter the URL where the conversion fires.
Walk through the conversion steps on your site. Then check whether your conversion tag appears in the Tags Fired list.
If the tag appears under Tags Fired, the setup is working.
Enhanced conversions: the upgrade worth knowing about
Google has introduced enhanced conversions and enhanced conversions for leads as ways to improve accuracy when cookie consent limits standard tag tracking.
Enhanced conversions work by hashing first-party data, such as an email address, at the point of conversion and matching it to signed-in Google users. This fills gaps that cookies can't.
Offline conversion import is still valuable for many PLG use cases, particularly when you want to feed product database events back to Google (see the next section). But for most teams tracking form fills and sign-up page events, enhanced conversions for leads is now Google's recommended approach for improving match rates.
Both can run together. They're not mutually exclusive.
Why Google Ads, GA4, and your product database show different numbers
When the numbers don't match, most people assume something is broken. Usually it's not. The platforms just use different logic.
Here’s why the numbers differ:
| Platform | Attribution default | What this means |
| Google Ads | Data-driven, defaults to first click | Credits the original Google click even when the user converts later via another channel. Reports more conversions than GA4 as a result. |
| GA4 | Last non-direct click by default | Credits the last channel before conversion. If a user clicked a Google Ad, left, and returned via organic, GA4 credits organic. Google Ads credits itself. |
| Product DB / CRM | No attribution model, just raw events | Most accurate count of real conversions, but not tied to source without GCLID matching. |
The most common mismatch: a user clicks your Google Ad, leaves, comes back a week later via organic search, and converts. Google Ads credits itself. GA4 credits organic. Neither is wrong. They're just measuring different things.
Other causes of discrepancy: different conversion windows, ad blockers and privacy tools preventing tag fires, cross-device behavior, and browser-level consent settings.
Your product database or CRM is the source of truth for revenue events. Platform numbers are useful for optimization. Backend numbers are what you report to the board.
If you import GCLIDs from your product database back into Google Ads as offline conversions, you can reconcile the gap and see which Google-sourced clicks actually produced paying users.
Offline conversions for SaaS: when and why
For many PLG SaaS products, the most valuable conversion events happen after login. Credit card adds. Plan upgrades. Activation steps. The Google tag can't reliably fire on those pages.
Offline conversion import is the fix.
The process:
- When a user clicks a Google Ad, Google stores a GCLID (Google Click ID) as a cookie.
- Your product or payment system captures that GCLID at signup.
- When the user later completes a revenue event (adds a card, upgrades to paid), you export a file matching the GCLID to the conversion event and timestamp.
- You upload that file to Google Ads. Daily or weekly.
- Google attributes the conversion back to the original click.
This is how you feed Google the real signal. Not "someone clicked the signup button" but "the user who clicked your ad on Tuesday added a credit card on day 4 of their trial."
Camel Digital uses this process across accounts where product-level events matter. We have a conversion upload template for this. If you'd like a copy, reach out.
For teams with developer resources, server-side tracking can replace or complement this workflow. Google's documentation covers the technical implementation if you want to go that route.
The tracking mistake that breaks Smart Bidding
This is where many well-run SaaS campaigns fail. Not because of bad ads or wrong keywords. Because of what's being fed to the algorithm.
Mistake 1: Tracking signups only. You teach Google to find people who sign up. It will. Many of them won't pay.
Mistake 2: Using low-quality events as primary. If you use "visited pricing page" or "clicked a button" as your primary conversion, Smart Bidding optimizes for curiosity, not intent.
Mistake 3: Mixing weak and strong signals. If you have both signup and purchase tracked as primary, Google averages them. The weak signal dilutes the strong one.
Mistake 4: Relying on GA4-only events. GA4 uses last-click attribution by default. Google Ads uses a different model. If you import GA4 goals into Google Ads instead of using native Google Ads conversion tags, your CPA will look higher than it is, your conversion rate will look lower, and your bidding will be off.
Use native Google Ads conversion tracking. Feed it with the right events. Keep GA4 for analysis.
Camel Digital's signal quality test
Before you set any event as a primary conversion, run it through these four questions:
- Does this event predict whether someone will become a paying user?
- Does it happen often enough to give Google's algorithm the data it needs (roughly 30 per month, per campaign)?
- Can it be tracked reliably across devices and sessions?
- Would you want more users like the people completing this event?
If the answer to any of those is no, it's a secondary conversion at best.
Is your setup ready for Smart Bidding?
Before you scale spend, check these:
Signal quality. Your primary conversion event should predict paying users, not just signups. Ask: do people who complete this event go on to pay?
Signal volume. Lower-ticket, high-volume PLG: optimize for credit card add or purchase. Higher-ticket SaaS: optimize for trial or signups until volume builds.
Reliable tracking. Test every tag. Confirm every event is firing. Don't assume.
Backend validation. Cross-check your Google Ads conversion count against your product database or CRM. If the numbers are far apart, find out why before you scale.
Activation quality events. Add events that show product use: team member added, integration connected, project created. These are the best predictors of paid conversion and the most underused signals in SaaS PPC.
Naming clarity. Name every conversion action so anyone on your team can understand it. "Paid plan - starter monthly" is clear. "Conversion 3" is not.
Verified status. Every conversion action should show "Recording" in Google Ads. "Unverified" means no data is coming through. It may also show "No recent conversions," which just means no events have fired lately. The tag is still active.
A solid Google Ads conversion tracking setup is the foundation. Getting your Google Ads for SaaS setup right starts here. If the signal is wrong, no amount of budget will fix it.
If you want a second pair of eyes on your setup, we do free audits. Read-only access, no strings. You keep the findings regardless.
Stop guessing what Google is learning from your data
Most conversion tracking guides tell you how to place a tag. This one tries to tell you what actually matters.
The tag is easy. The hard part is choosing the right events, setting them up in the right hierarchy, and feeding Google data that reflects the users you actually want.
Get that right and bidding can work for you. Get it wrong and you'll spend months wondering why your CPA isn't improving.
If you'd like to see what your current setup is teaching Google, we offer free audits. Screen share, read-only access, no commitment. You walk away knowing exactly what's happening.
FAQs
Google Ads conversion tracking records specific actions users take after clicking your ad, such as signing up for a trial or purchasing a plan. You define which actions to track and whether they're primary (used for Smart Bidding) or secondary (for reporting only). For SaaS, choosing the right primary conversion is what determines whether the algorithm finds paying users or just clicks.
Start by defining your conversion hierarchy before touching the platform. Then set up your Google tag via Google Tag Manager and create conversion actions in Google Ads under Goals > Conversions > New. For PLG SaaS, use a dataLayer.push from your application to capture post-login events like credit card adds. Set a 90-day conversion window and verify tags are firing before you scale spend.
You can track any user action: signups, trial starts, credit card adds, plan purchases, in-product activation events, and offline events imported from your product database. For PLG SaaS, the most valuable events are purchases first, actual payment and revenue, and then events that predict whether a user will pay, not just whether they clicked a button.
Primary conversions are used by Smart Bidding to train the algorithm. Secondary conversions are recorded for reporting but don't affect bidding. For PLG SaaS, you typically want credit card add or purchase as primary and signup or trial start as secondary. This way you keep volume data while telling Google to find buyers, not just signups.
Different platforms use different attribution models and conversion windows. Google Ads may credit a click that GA4 attributes to organic or direct, because they apply different rules about which touchpoint gets credit. Your product database is the source of truth for actual revenue events. If you import GCLIDs from your backend and match them to conversion events, you can close most of the gap.
Yes, but you need a different setup than standard page-view tracking. Post-login events require either a dataLayer.push from your application (which GTM can pick up and forward to Google Ads), offline conversion import via GCLID matching, or server-side tracking. Standard Google tags often can't fire inside authenticated product areas.
Ninety days. The default is 30 days, which is fine to start, but SaaS sales cycles can be longer. A user might click your ad, trial your product, compare options, speak to your sales team, and convert 60 or 70 days later. A longer window captures those users and gives Google more data to optimize from.
Because Google's algorithm is very good at finding exactly what you ask for. Ask for signups and it will find people likely to sign up, including those who sign up and never return. Ask for credit card adds or purchases and it shifts its targeting to find users who are more likely to pay. We've tested both in direct comparisons. Optimizing for the purchase event produces more purchases at a lower CPA than optimizing for signups.



