Why GA4 needs its own guide

GA4 (Google Analytics 4) is a different product from the Universal Analytics most teams used for the previous decade. The data model is different (events, not sessions). The interface is different. The defaults are different. The integrations with Google Ads and Search Console are different.

Most setups we audit are technically running GA4 but missing the configurations that make it useful for actual business decisions. This guide walks through the setup that actually produces decision-grade data.

Marketing MIX, an international marketing studio with Ukrainian roots, headquartered in Ottawa and working across Canada, Ukraine, Germany, and France, has migrated and rebuilt GA4 setups for dozens of clients across SaaS, e-commerce, professional services, and education since 2023. The patterns below reflect what we've seen work and where most teams stumble.

Step 1: Create the property correctly

Sign into analytics.google.com with the account that owns your marketing operations (not your personal Gmail; use a service-grade account or your business Google Workspace identity).

Create the property with:

  • Time zone matching your business operations (this affects how days roll over in reports)
  • Reporting identity set to "Blended" — combines user-id, device-id, and signals data for the most accurate cross-device user count
  • Data retention set to 14 months (the maximum; default is 2 months, which is too short for year-over-year comparisons)
  • Google signals enabled if you have user consent for it (gives you demographics and cross-device data; requires GDPR-aware consent)
  • Cross-domain measurement configured if you have a marketing site and a separate product domain

Step 2: Install the tag properly

Two paths, depending on your stack:

Direct gtag.js installation for simple sites:

<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-XXXXXXXXXX', {
    'send_page_view': true,
    'anonymize_ip': true,
    'allow_google_signals': false  // Toggle based on consent
  });
</script>

Google Tag Manager for any site with more than five custom events or any e-commerce site. GTM gives you a single tag deployment endpoint, version control on your tag configurations, and the ability to push events without engineering involvement.

For modern frameworks (Next.js, Remix, SvelteKit) the canonical approach is @next/third-parties or equivalent — these handle consent gating and avoid duplicate page-view fires on route changes.

Step 3: Set up consent gating

If you have any European visitors, you need consent gating that meets GDPR. Google's Consent Mode v2 is the standard.

The configuration:

gtag('consent', 'default', {
  'ad_storage': 'denied',
  'analytics_storage': 'denied',
  'ad_user_data': 'denied',
  'ad_personalization': 'denied',
  'wait_for_update': 500
});

// When the user accepts:
gtag('consent', 'update', {
  'ad_storage': 'granted',
  'analytics_storage': 'granted',
  'ad_user_data': 'granted',
  'ad_personalization': 'granted'
});

Cookiebot, OneTrust, Iubenda, and Cloudflare's Zaraz all provide consent banners that integrate cleanly with Google Consent Mode.

Step 4: Define your custom events

This is where most setups fail. GA4's automatic events (page_view, scroll, file_download) are useful but insufficient. You need custom events tied to actual business outcomes.

Minimum set for most businesses:

| Event | Trigger | Parameters | |---|---|---| | generate_lead | Lead form submission | value, currency, lead_source | | book_meeting | Calendly / Cal.com booking confirmation | meeting_type, value | | purchase | E-commerce checkout completion | transaction_id, value, currency, items | | sign_up | Account creation | method | | start_trial | Free trial initiation | plan | | add_to_cart | E-commerce | value, currency, items | | begin_checkout | Checkout page reached | value, currency, items | | view_item | Product page view | items |

In Admin → Events, mark generate_lead, book_meeting, purchase, sign_up, start_trial as conversions so they appear in conversion-specific reports.

Step 5: Configure server-side conversion APIs

This is where serious implementations diverge from amateur ones. Browser-side tracking is increasingly unreliable. Server-side conversion APIs send conversion events directly from your backend to Google, bypassing browser limitations.

For GA4 specifically, the Measurement Protocol API. The setup:

  1. Generate an API secret in Admin → Data Streams → your stream → Measurement Protocol API secrets
  2. From your backend (Stripe webhook, CRM trigger, server-side cart event), POST to the API:
POST https://www.google-analytics.com/mp/collect?measurement_id=G-XXX&api_secret=YYY

{
  "client_id": "[the client_id from the original session]",
  "events": [{
    "name": "purchase",
    "params": {
      "transaction_id": "T-12345",
      "value": 248.00,
      "currency": "EUR",
      "items": [...]
    }
  }]
}

The client_id is the critical piece — without it, the server-side event isn't tied back to the original browser session and shows up as a direct/none conversion. Pass it from your frontend to your backend at the start of the conversion flow.

Step 6: Set up BigQuery export

Free for most properties (up to 1 million events/day). Enables real analysis beyond what the GA4 UI supports.

In Admin → BigQuery Linking, link a Google Cloud project, choose daily and streaming exports, and the data starts flowing withafter a manual review. From there you can run SQL on raw event data, build proper attribution models, and pipe to Looker Studio or any BI tool.

Step 7: Build the reports that actually drive decisions

Default GA4 reports are not the reports you'll use. Build:

  • Lead source attribution — by channel, by campaign, by landing page, joined with your CRM data
  • Funnel report — from first-touch to qualified-lead, with drop-off rates
  • Page performance — by page, by intent (commercial vs informational), tied to conversions
  • Search Console integration — query-level performance for organic
  • Audience segments — by behavior, by source, by lifetime value (if you push LTV back via Measurement Protocol)

What we typically charge

A clean GA4 setup is typically 8–14 hours of work for a non-e-commerce site, 14–30 hours for an e-commerce site, and 30–60 hours for complex multi-domain or multi-region operations. At our standard rate, that maps to €1,400–€8,500 depending on scope. We also offer audit-only engagements at €1,800 flat — output is a written report on what your current GA4 is and isn't capturing, with prioritized remediation.

Related

For the marketing strategy that uses this data: /marketing-strategy-development. For the channels the data tracks: /seo-promotion, /targeting-ads, /smm-promotion.


Written by the Marketing MIX analytics team. Last reviewed: 2026-05-13.