-
1
1. Create the GA4 property and web data stream
Start in Google Analytics admin and create a new GA4 property under the right account. Pick the correct reporting time zone and currency up front because changing them later rewrites downstream reports. Create a Web data stream for the production site, name it so it is obvious which environment it tracks, and copy the Measurement ID (G-XXXXXXXXXX) into a safe place. In the stream settings, turn on Enhanced Measurement so GA4 auto-collects scrolls, outbound clicks, site search, video engagement, and file downloads, but review each toggle because site search and form interactions may need parameter overrides to match how your SaaS site is actually built. Create a second stream for the staging environment so test traffic never pollutes production reports.
- Pick a reporting time zone and currency that match how finance closes the books.
- Create separate Web data streams for production and staging, and tag them clearly.
- Record the Measurement ID in a shared doc so GTM, gtag, and server-side taggers all reference the same value.
- Review every Enhanced Measurement toggle and disable anything that duplicates a custom event you plan to send.
Tip: If you have multiple product subdomains or a separate marketing site, decide now whether they share one property or run as separate streams. Cross-domain tracking is far cheaper to configure on day one than to backfill later.
-
2
2. Install GA4 through Google Tag Manager (or gtag.js)
For most B2B SaaS sites, Google Tag Manager is the right install path because it keeps analytics, ads, and consent logic out of your production build and lets marketing ship changes without a code deploy. Create a GTM container if you do not have one, drop the container snippet in the <head> of every page template, and add a Google Tag (GA4 configuration) that fires on All Pages using the Measurement ID from step 1. If you cannot use GTM, install gtag.js directly with the same Measurement ID and keep the snippet as close to the opening <head> tag as possible so it loads before user interactions begin. Verify the install with GA4 DebugView and the GTM Preview mode before you push live, and watch for duplicate page_view events, which are the most common install bug.
- Add the GTM container snippet to every page template, not just the homepage.
- Create a GA4 Configuration tag that fires on All Pages with the Measurement ID.
- Verify page_view fires exactly once per route in GA4 DebugView.
- If using a single-page application, suppress the auto page_view and send route-change events manually.
Tip: Single-page apps break page_view by default. Turn off automatic page views in the GA4 Configuration tag and fire a page_view event from your router on every route change so Reports reflect reality.
-
3
3. Define key events for the B2B SaaS funnel
GA4 ships with a thin set of recommended events, but a B2B SaaS funnel needs explicit events for the moments that matter to pipeline. At minimum, instrument demo_request (prospect submits the demo form), signup (free trial or free account created), purchase (paid conversion for self-serve), and the supporting events around them: form_start, form_submit, trial_activated, and plan_upgraded. Agree the exact event name, the parameters each one sends, and which parameters are required before any developer writes a dataLayer push. Keep names in snake_case, keep parameters stable, and avoid overloading one event with branching logic. Document the taxonomy in a shared sheet so marketing, product, and analytics speak the same language, and fire every event from GTM where possible so changes do not require a release.
- Instrument demo_request with lead_source, utm parameters, and a form_id parameter.
- Instrument signup with method (email, Google, SSO) and plan_tier.
- Instrument purchase with transaction_id, value, currency, and items for self-serve checkout.
- Agree a short list of custom user properties (plan_tier, company_size, lifecycle_stage) before shipping events.
Tip: Give every important event a transaction_id or event_id parameter even when the event is not a purchase. It is the single simplest trick for deduplicating when you later join GA4 data to CRM records in BigQuery.
-
4
4. Mark events as conversions (key events) and configure attribution
In GA4, the events that drive your business must be marked as key events (the setting Google renamed from Conversions in 2024). Go to Admin, open Events, and toggle the key event switch on demo_request, signup, purchase, and any paid-conversion events you want in Ads reporting. Then open Attribution settings and pick a model: data-driven is the default and is appropriate for most SaaS sites with sufficient conversion volume, but if volume is low pick position-based or first-click so the model does not collapse to last-click under the hood. Set the lookback window deliberately: 90 days for acquisition is a sensible default for B2B SaaS with multi-week sales cycles, while 30 days works for self-serve. Document which events are key events, which model you chose, and why, so a future audit does not have to reverse-engineer the choice.
Tip: Attribution model changes are not retroactive in standard reports. If you plan to A/B two models, snapshot the first model's numbers in a dated export before you switch, or use the Advertising section's model comparison report.
-
5
5. Link Google Ads and Search Console
A GA4 property that is not linked to Google Ads and Search Console is leaving half of its value on the table. In Admin under Product Links, link the Google Ads account that runs your paid campaigns so GA4 conversions flow to Ads for bidding and so Ads auto-tagged (gclid) traffic shows up with campaign, ad group, and keyword in GA4 reports. Then link Search Console so organic queries, landing pages, and impressions appear inside GA4's Acquisition reports. Both links require admin on both sides and the Search Console link requires that the GA4 property URL match the Search Console verified property. Once linked, enable Google signals only if your consent plan allows it: signals unlocks remarketing audiences and cross-device, but it introduces thresholding on small cohorts and must be reflected in your privacy policy.
- Link Google Ads with admin rights on both sides so auto-tagging flows end-to-end.
- Link Search Console to a Web data stream whose URL exactly matches the verified property.
- Decide on Google signals based on your consent plan, not on default settings.
- Verify that Google Ads cost data appears in the GA4 Advertising reports within 24 hours.
-
6
6. Build audiences for marketing and remarketing
Audiences are how GA4 feeds Google Ads and how you segment reports for marketing analysis. Build the small set of audiences marketing will actually use: engaged visitors (pages per session or scroll threshold), demo_request submitters, signup completers, trial-active users, paid customers, and the inverse audiences for suppression (do not re-market demo submitters as cold prospects). Build each audience from the events and user properties defined in step 3, not from one-off session filters, so the audience logic stays consistent across remarketing, reporting, and BigQuery. Keep the list short at first: five to seven audiences cover almost every B2B SaaS use case and are far easier to audit than twenty-plus overlapping ones. Give each audience a clear name, an owner, and a documented purpose so audiences do not accumulate as GTM-era zombies.
- Build an engaged-visitor audience from scroll depth or session duration thresholds.
- Build conversion audiences for demo_request, signup, and purchase for remarketing and suppression.
- Build a paid-customer audience from a user property to suppress ads to existing customers.
- Review the audience list quarterly and retire anything no campaign is targeting.
Tip: Suppression audiences are usually more valuable than targeting audiences for B2B SaaS. The fastest way to improve paid efficiency is to stop paying to re-reach demo submitters and existing customers.
-
7
7. Wire the BigQuery export for CRM joining
The single most important configuration step for a B2B SaaS marketing analytics stack is the BigQuery export, because that is where GA4 data meets your CRM, product, and billing data. In Admin under Product Links, link the GA4 property to a Google Cloud project, enable daily export (and streaming export if you need near-real-time), and pick the dataset location that matches where your warehouse already lives. GA4 writes one events table per day with every event, parameter, and user property, which is a flat row-per-event schema that your warehouse can join to a CRM lead or opportunity on user_id or a hashed email. Build the join through a stable identifier you set on both sides: pass user_id into GA4 (set it the moment a user is identified by email, trial signup, or login) and store the same user_id in your CRM. Without a shared key, the join is probabilistic and the analysis will leak.
- Create or reuse a Google Cloud project in the same region as your warehouse to minimize egress.
- Enable daily export plus streaming export if your SLA on fresh data is under 24 hours.
- Set a stable user_id in GA4 the moment a user is identifiable, and store the same id in CRM.
- Build a nightly dbt or scheduled query model that joins GA4 events to CRM leads and opportunities.
Tip: The BigQuery export has a free tier but can scale costs quickly on high-traffic sites. Partition and cluster the derived CRM-join table by event_date and user_id so analyst queries do not scan months of raw data by accident.
-
8
8. Instrument UTM governance
UTM parameters are the labels that make every other report readable, and the fastest way to break GA4 is to let every marketer invent their own naming. Publish a UTM governance doc that fixes the five standard parameters (utm_source, utm_medium, utm_campaign, utm_content, utm_term) with explicit allowlists for source and medium, a snake_case convention for campaign, and a required format for content and term. Build or buy a UTM link builder that enforces the rules so marketers cannot ship a link with uppercase campaign names or free-text medium values. Audit incoming traffic monthly in the GA4 Traffic acquisition report and look for low-volume source/medium combinations that are usually typos (googlee / cpcc / email_newsletter) and fold them back into the canonical values with a channel group override. UTM governance pays for itself the first time a leadership deck does not have to apologize for a 20% other bucket.
- Publish allowlisted values for utm_source and utm_medium, with an exceptions process.
- Enforce snake_case for utm_campaign and prohibit spaces, quotes, and emojis.
- Deploy a shared link builder so no marketer hand-codes UTMs for paid campaigns.
- Audit the Traffic acquisition report monthly for low-volume typos and merge them into channel groups.
Tip: GA4 is case-sensitive on UTM values. Email and Email are two different sources in Reports, and only governance plus a link builder stops that from fracturing the data within a quarter.