# Paid ads conversion tracking setup checklist

> Tracking setup across Google, LinkedIn and Meta: event taxonomy, deduplication, server side tagging, CRM stitching, and the QA tests that catch silent failures.

Source: https://saas-marketing.net/checklists/paid-ads-conversion-tracking-setup/
Topic: SaaS PPC and Paid Ads
Type: checklist
Published: 2026-09-11
Last updated: 2026-09-11
Publisher: SaaS Marketing (saas-marketing.net)
License: CC BY 4.0. Quote or republish with attribution and a link to https://saas-marketing.net/checklists/paid-ads-conversion-tracking-setup/

## Short answer

Conversion tracking setup for SaaS ads is a build sequence, not a tag install. Define a five-stage event taxonomy with one owner per event, install and verify the Google tag, LinkedIn Insight Tag and Meta Pixel, add server-side tagging with deduplication keys, capture GCLID, WBRAID, GBRAID, li_fat_id and fbclid into hidden fields that persist through the CRM object chain, configure enhanced conversions with hashed email, set stage values, then run a QA suite before any campaign spends money.

## Key takeaways

- Every conversion event needs exactly one written definition and one named owner, or reporting drifts within a quarter.
- Click identifiers must persist from landing page through contact, deal and closed-won, not just into the form submission.
- Server-side and browser events need a shared deduplication key or you will double count every conversion.
- Enhanced conversions for leads with hashed email recovers a meaningful share of conversions lost to consent and ITP.
- The most expensive tracking failures are silent ones that keep reporting numbers after they stop being true.
- Ship tracking like a release with a QA gate: eight named tests, each with a documented expected result.

---

Nothing else in paid media works until this does. Bidding algorithms train on your conversion feed, budget decisions come out of it, and every optimisation argument eventually resolves to whether the number is real. Build this before you spend.

The order below is a build sequence. Steps depend on the ones above them, so skipping ahead creates rework.

## Step 1: Define the conversion event taxonomy before touching a tag

Five events, five written definitions, five named owners. Not a Google Doc nobody reads: a row in the CRM data dictionary with a person's name on it.

| Event | Definition | Owner | Where it fires |
| --- | --- | --- | --- |
| Signup | Account created, email verified | Growth PM | Product backend |
| Demo request | Form submitted with valid work email | Demand gen lead | Website / server |
| Qualified lead | Passes ICP fit rules plus SDR accept | Sales ops | CRM stage change |
| Opportunity | Discovery held, next step booked | Sales ops | CRM stage change |
| Closed-won | Contract signed | RevOps | CRM stage change |

The failure mode here is definitional drift. Six months in, marketing counts qualified leads at form submit and sales counts them at accept, and the CPQL argument becomes unwinnable. Write the definitions down, date them, and require a change request to alter one.

If two teams can both claim to be right about the number of qualified leads last month, your tracking build is already broken and no amount of server-side tagging will fix it.

## Step 2: Install and verify the three browser tags

**Browser tag install**

The most common real-world break: tags live on the marketing site but not on the app subdomain where the trial signup completes. Then Google Ads shows demo requests and no signups, and someone concludes search does not drive product-led volume. It does. You just cannot see it.

## Step 3: Add server-side tagging and the conversions APIs

Browser-only tracking loses 10 to 30 percent of B2B conversions to ad blockers, Safari ITP cookie truncation and consent rejection. Server-side recovers most of that.

**Server-side build**

## Step 4: Capture click identifiers and persist them through the CRM

This is where most builds quietly fail. Capturing GCLID into a form field is easy. Keeping it attached to the deal 94 days later when it closes is the part that requires design.

**Identifier capture**

If you are running [LinkedIn lead gen forms rather than landing pages](/comparisons/lead-gen-forms-vs-landing-pages/), the hidden field trick does not apply, so map li_fat_id through the native CRM integration instead. The tradeoff is real: lead gen forms convert better and track worse.

This chain is what makes [offline conversion tracking](/guides/offline-conversion-tracking-for-saas-ads/) possible at all. Without persisted identifiers you can never feed closed-won back to the platforms, which means [smart bidding](/guides/smart-bidding-for-b2b-saas/) optimises towards form fills forever.

## Step 5: Enhanced conversions, values and consent

Enhanced conversions for leads sends a SHA-256 hashed email with the conversion so Google can match it to a signed-in click even when the cookie is gone. Turn it on. It is free, takes an afternoon, and typically recovers a chunk of otherwise unattributed conversions.

Then set values per stage so bidding has a gradient to climb:

| Event | Value basis | Example at $18K ACV, 22% win rate |
| --- | --- | --- |
| Demo request | Expected value | $400 |
| Qualified lead | Expected value | $1,200 |
| Opportunity | ACV x win rate | $3,960 |
| Closed-won | Actual first-year ACV | Actual |

Configure Google Consent Mode v2 and document what you expect to lose. In the EU with a well-designed banner, expect 20 to 40 percent consent rejection and plan for modelled conversions to fill part of the gap. Write that number down so nobody panics at it later.

## Step 6: The QA suite. Eight tests, eight expected results

Treat this as a release gate. Nothing launches until all eight pass.

A developer changes the form component. The hidden fields survive, but the cookie read now happens before the script that sets it. Conversions keep firing, the dashboard keeps showing a CPA, and every value is wrong. Nobody notices for eleven weeks because the number never went to zero. That is why test 3 runs monthly, not once.

## What this costs, honestly

A full build takes two to four weeks of combined marketing ops and engineering time, plus 50 to 300 dollars a month of hosting. On a 20,000 dollar a month paid programme that is easy to justify. On a 3,000 dollar a month programme, do steps 1, 2, 4 and the QA suite, and skip server-side until spend grows. Half-built server-side tracking is worse than none, because it produces numbers that look authoritative and are not.

The other honest cost: this build makes your reported CPA go up. Deduplication removes phantom conversions, tighter definitions remove unqualified ones, and the number that comes out is larger and true. Prepare leadership for that before you ship, not after.

## What to do next

Work the six steps in order, gate the launch on the eight tests, and put tests 1, 3 and 4 on a monthly calendar invite with a named owner. Then go read how this feeds [lead quality scoring](/guides/ppc-lead-quality-for-saas/) and pick your stack from the [PPC tooling guide](/guides/ppc-tools-for-saas/). If you are still deciding where the spend goes, settle [Google Ads versus LinkedIn Ads](/comparisons/google-ads-vs-linkedin-ads/) first, because the tracking build differs slightly between them, and the rest of the [SaaS PPC](/saas-ppc/) programme depends on getting this feed right.

## Frequently asked questions

### What order should I build SaaS ad conversion tracking in?

Taxonomy first, tags second, server-side third, identifier capture fourth, enhanced conversions fifth, values sixth, consent seventh, QA last. Building tags before agreeing on what a qualified lead means produces three teams reporting three different numbers from the same campaign, and you will rebuild it inside six months.

### Do I need server-side tagging for B2B SaaS ads?

If you spend under about 15,000 dollars a month, browser tags plus offline conversion imports will do. Above that, server-side tagging plus the conversions APIs recovers conversions lost to ad blockers, Safari ITP and consent rejections. The cost is a Google Cloud or Stape container, roughly 50 to 300 dollars a month, plus engineering time to build it.

### What is conversion deduplication and why does it matter?

When you send the same conversion from both the browser and the server, the platform needs a shared identifier to recognise them as one event. Meta uses event_id, Google uses transaction_id or order_id. Without it, every conversion counts twice, your reported CPA halves, and you scale spend on a number that does not exist.

### Which click identifiers should I capture in hidden form fields?

GCLID for Google Ads, WBRAID and GBRAID for iOS app and web-to-app traffic, li_fat_id for LinkedIn, and fbclid for Meta. Capture them on first landing, store them in a first-party cookie for at least 90 days, and write them onto the contact record at form submit and onto the deal record at creation.

### How do I QA conversion tracking before launching campaigns?

Run a full end-to-end test lead through every form, audit CRM field mapping, reconcile row counts between platform and CRM, check lag windows against your real sales cycle, and test for duplicate conversions. Each test needs a written expected result so a failure is obvious rather than a judgement call.

### Why do my Google Ads conversions not match my CRM?

Three usual causes. Google attributes conversions to the click date while your CRM stamps the submission date, so any comparison across period boundaries mismatches. Second, modelled conversions fill consent gaps and have no CRM row. Third, deduplication is missing. Expect a 5 to 15 percent gap even when everything is correct.
