How to Use GA4 for Marketing in 2026: The Complete Guide

Ishant

Ishant

Published : January 28, 2023 at 5:03 pm

Updated : June 23, 2026 at 4:37 pm

How-to-use-GA4-For-Marketing

Most marketers install GA4, check the dashboard once, and assume it’s working. It isn’t. GA4 installed is not GA4 configured, and the gap between the two is where real measurement gets destroyed. Wrong Reporting Identity understates your user base by 30%. Personalized Advertising toggled off means your remarketing audiences never reach Google Ads. No cross-domain tracking means a payment gateway kills attribution on every order. This guide covers how to actually use GA4 for marketing in 2026: setup, attribution, cross-channel reporting, audience building, exploration reports, Meta and Bing discrepancies, and the newest features that changed how everything works.

What Is GA4 and How Is It Different from Universal Analytics?

GA4 is Google’s current analytics platform. Universal Analytics stopped processing data in July 2023, so if you’re still referencing UA reports, you’re working from dead data. GA4 isn’t a visual upgrade of UA. It’s a completely different measurement system built around events instead of sessions.

In UA, every visit created a session, and hits happened inside that session. In GA4, every interaction is a discrete event: a page view is an event, a scroll is an event, a purchase is an event. There are no “goals” anymore. The equivalent is called a key event, which is any event you’ve marked as important to your business.

The engagement metric changed too. UA counted bounce rate, which measured sessions where someone left without taking action. GA4 replaced it with engagement rate, which counts sessions lasting at least 10 seconds, sessions with a second page view, or sessions containing a key event. Engaged session rate is a far more useful signal than bounce rate ever was.

FeatureUniversal AnalyticsGA4
Measurement modelSession-basedEvent-based
Key engagement metricBounce rateEngagement rate
Conversion terminologyGoalsKey Events (GA4) and Conversions (Google Ads)
Attribution defaultLast non-direct clickData-driven cross-channel
Cross-device trackingLimited, cookie-basedGoogle Signals and User ID
Funnel reportsRigid, presetFlexible funnel exploration
Predictive audiencesNoYes, purchase probability and churn probability
Data retention default26 months2 months, must be extended to 14 manually
AI Assistant channelNoYes, native channel since May 2026

The GA4 Setup Checklist Most Marketers Never Complete

Installing the GA4 tag is step one. It’s not the finish line. These are the settings that actually determine whether your data is usable.

Step 1

Set data retention to 14 months

Admin > Data Settings > Data Retention. The default is 2 months. Change it immediately. You can’t recover data you didn’t retain. Explorations are capped to whatever window you’ve set, so a 2-month window destroys your ability to run cohort analysis or compare year-on-year.

Step 2

Enable Google Signals for all regions

Admin > Data Collection > Google Signals. This allows cross-device tracking by matching signed-in Google users across sessions. Without it, the same person visiting on mobile then desktop counts as two users. Your conversion rates look artificially low and your cohort data is unreliable.

Step 3

Check Reporting Identity

Admin > Property Settings > Reporting Identity. Set it to Blended. This mode uses User ID, device ID, Google Signals, and behavioral modeling to fill gaps from users who declined consent. Observed mode skips modeling. Device-based mode counts every device as a separate user, which inflates your user count and understates returning visitor rates.

Step 4

Set attribution model to Data-Driven

Admin > Attribution Settings. Data-driven is the default for new properties and it’s the right one. It uses machine learning to distribute conversion credit across touchpoints based on actual paths in your account. Extend the lookback windows to 90 days for both key events and purchases, especially if your sales cycle is longer than a week.

Step 5

Acknowledge data collection and enable personalized advertising

Admin > Data Collection: check the acknowledgment toggle. Then go to Admin > Product Links > Google Ads Links > select your linked account > turn on Enable Personalized Advertising. That second step is the one almost every account misses. Without it, your GA4 audiences exist in GA4 but show zero users in Google Ads.

Step 6

Implement Consent Mode v2

Required for any EEA traffic. The four parameters you need sending correctly are ad_storage, analytics_storage, ad_user_data, and ad_personalization. Verify them in GTM Preview mode under the Consent tab. Accept your own cookie banner and confirm all four flip to granted. If they don’t, your audiences won’t populate and your attribution data has gaps.

Key Events vs Conversions: What Changed in 2024 and Why It Matters

In March 2024, Google renamed what GA4 called “conversions” to “key events.” This wasn’t cosmetic. It created a two-layer system that still confuses a lot of marketers.

Here’s how it works now. Any event in GA4 can be marked as a key event by toggling the star icon in Admin > Events. Key events appear in GA4’s Engagement reports and give you a count across all traffic sources, organic, direct, paid, everything. They’re the measure of important user actions across your whole marketing mix.

A conversion is what happens when you import a key event into Google Ads. It keeps the label “conversion” in Google Ads and is what the bidding algorithm uses to optimize campaigns. The same purchase event can be both a key event in GA4 and a conversion in Google Ads at the same time.

The practical workflow
Track the event in GA4 > Mark it as a key event in Admin > Import it into Google Ads as a conversion if you want Smart Bidding to optimize against it. Only the key events that represent genuine business value should become Google Ads conversions. Micro-events like scroll depth or outbound clicks should stay as key events only, not conversions.

One more thing: don’t use GA4 key event imports as your primary Google Ads bidding signal. There’s up to a 3-day data delay when importing from GA4, which slows Smart Bidding learning. Use native Google Ads conversion tags as your primary signal. GA4 imports work well as secondary signals or for micro-conversions you want to observe.

How GA4 Attribution Works Across Every Channel

GA4’s attribution is cross-channel, meaning it looks at every touchpoint in the user journey, not just the last click and not just your Google Ads clicks. This is different from Google Ads attribution, which only considers touchpoints within Google Ads. They’re not the same report and shouldn’t be compared directly.

The default model in GA4 is Data-Driven Attribution. It uses machine learning and actual conversion path data from your property to assign fractional credit to each touchpoint. It factors in device type, number of ad interactions, the order of those interactions, creative types, and time from conversion.

Attribution ModelHow Credit Is AssignedBest For
Data-Driven (default)ML-based fractional credit across all touchpointsMost accounts. Requires sufficient conversion volume.
Last click100% credit to the last touchpointSimple attribution, short sales cycles
First click100% credit to the first touchpointUnderstanding which channels create awareness
LinearEqual credit across every touchpointBalanced view of all channels
Time decayMore credit to touchpoints closer to conversionLonger consideration cycles
Position-based40% first, 40% last, 20% middleWhen acquisition and close both matter equally

The Advertising section in GA4 is where attribution data lives. Go to Advertising > Attribution > Conversion Paths to see the actual sequence of touchpoints users take before converting. This is the report that shows you if your Meta ads are assisting Google Search conversions, or if Paid Social sits at the top of almost every path even when it doesn’t close the sale. That information is worth more than any single-platform report.

How to Build GA4 Audiences From Specific Traffic Sources

GA4’s audience builder lets you segment users by the exact channel they came from and export those segments to Google Ads as remarketing lists. This is where GA4 stops being a reporting tool and starts being a targeting tool.

Users from Meta Ads who didn’t convert: In Admin > Audiences, create a custom audience where session source/medium contains “facebook / cpc” OR “instagram / cpc” AND key event count for purchase equals 0 in the last 30 days. These users clicked your Meta ad, visited, and left. Remarketing to them on Google Search with a direct-response message often converts at a fraction of cold traffic cost.

Organic search visitors who hit high-intent pages: Session default channel group equals Organic Search AND page_view event where page_location contains “/pricing” or “/buy” in the last 14 days. This is your near-purchase organic audience. Your SEO already paid for the acquisition. A well-placed remarketing ad closes the gap.

Predictive audiences: If your property has at least 1,000 returning users and 1,000 churned users in the past 28 days, GA4 unlocks purchase probability and churn probability predictions. The “likely 7-day purchasers” list is particularly powerful as an audience signal for Performance Max campaigns.

Important: GA4 audiences only push natively to Google Ads.
Meta, TikTok, and LinkedIn don’t receive GA4 audiences directly. To get GA4 behavioral segments into Meta, you need to export via BigQuery and upload as a custom audience or use a CDP. The minimum audience size to serve in most Google campaign types is 1,000 users.

GA4 Exploration Reports: What Each Type Is For

Explorations are GA4’s advanced analysis section and they were previously only available in the paid GA360 tier. They’re free in standard GA4 now. Most marketers open them once, feel lost, and go back to standard reports. That’s a mistake because standard reports show you averages. Explorations show you what’s actually happening.

Funnel Exploration shows you where users drop off in a defined conversion flow. For e-commerce, set it up as view_item > add_to_cart > begin_checkout > purchase. Apply a segment breakdown comparing mobile vs desktop users. If mobile drops 35% more at the checkout step, that’s a mobile UX problem, not a campaign problem. Those require different fixes.

Path Exploration answers the question of what users actually do before or after a key page. Set the end point to your purchase key event and look at the pages converters visited before buying. You’ll often find a comparison page, a shipping policy, or a specific blog post appearing consistently. Internal link those pages to the product and watch conversion rates move.

Cohort Exploration groups users by their acquisition week and shows how many return over subsequent weeks. Break it down by First user default channel group. If Organic Search users show 14% week-4 retention and Paid Social users show 4%, that’s a targeting quality signal worth acting on when you’re deciding where to put next month’s budget.

Segment Overlap shows how much two or three audiences share. Useful for finding users who both engaged with your content and added to cart but never purchased. That overlap is a high-value remarketing segment that standard reports won’t surface.

Meta Attribution Model Explained: Why Meta Always Shows More Conversions Than GA4

Meta’s attribution is fundamentally different from GA4’s, and understanding why is the only way to have a productive conversation with clients about platform data discrepancies.

Meta’s default attribution is 7-day click and 1-day view. That second part is what inflates the numbers. View-through attribution means: if someone sees your Meta ad without clicking it, and then converts within 24 hours, Meta counts that as its conversion. GA4 doesn’t track view-through at all. So when a user sees a Meta ad on Monday, googles your brand on Tuesday, and buys through organic search, Meta counts the conversion and GA4 attributes it to Organic Search. Both are technically correct under their own rules.

Meta’s attribution settings live at the ad set level. To find them: Ad Sets > Edit > Cost per Result Goal > Show More Options > Attribution Settings. The options available in 2026 are:

  • 1-day click: Only counts conversions within 24 hours of a link click. Lowest inflation, good for flash sales and lead magnets.
  • 7-day click: Counts conversions up to 7 days after a click. The right window for most e-commerce products that need a few days consideration.
  • 1-day view: Counts conversions within 24 hours of seeing an ad without clicking. Almost always inflates results.
  • 7-day click and 1-day view (default): Meta’s standard setting. Captures both click-driven and impression-influenced conversions.
  • Incremental attribution (2025): Uses holdout testing to measure only conversions that wouldn’t have happened without the ad. More honest, but requires 50+ weekly conversions to work reliably.

For remarketing campaigns specifically: remove the 1-day view component entirely. Users who already know your brand are going to convert regardless. Crediting a view impression from a retargeting ad inflates ROAS substantially and gives you a misleading picture of what’s working.

The attribution setting also affects how Meta’s algorithm delivers your ads, not just how it reports. Switch from 7-day to 1-day click and the algorithm shifts to target users who convert immediately. For high-consideration products, that narrows your audience too aggressively and hurts scaling.

Why Your Google Ads, Meta, Bing, and GA4 Conversion Numbers Will Never Match

Every performance marketer has had this conversation. Google Ads says 120 conversions. Meta says 95. Bing says 40. GA4 says 60. The client asks which one is right. The answer: none of them is ground truth, and all of them are technically correct under their own measurement rules.

PlatformDefault AttributionClick WindowView-ThroughTypical Variance vs Actual
Google AdsData-Driven (within Google Ads only)30 days1 day Display, 3 days Video+15 to 20% when modeled conversions active
Meta AdsLast event within window7 days1 day (default on)+26% vs analytics tools on average
Microsoft / Bing AdsLast click (default)30 daysConfigurable, off by default+10 to 15% vs GA4
GA4Data-Driven cross-channel90 daysNot tracked18 to 35% below actual for paid when cookies blocked
CRM / backendNone, records actual ordersN/AN/AGround truth

The gap has two parts. About a third of it is structural: each platform uses a different attribution philosophy and there’s no configuration that makes them agree. The other two thirds is a data collection gap. Around 31.5% of global users run ad blockers. Safari limits third-party cookies to 7 days. iOS ATT has reduced Meta’s ability to track Apple device conversions by 40 to 60%. These are real signal losses that server-side tracking and the Meta Conversions API (CAPI) can partially recover.

The framework that actually works for client reporting: use each platform’s native numbers to optimize that platform’s campaigns, use GA4 for cross-channel strategy, and use your CRM for business-level revenue truth. Document the ratio between platform-reported and CRM-reported conversions in month one. When that ratio suddenly changes, something broke. That’s far more useful than trying to reconcile absolute numbers every month.

Cross-Domain Tracking and Referral Exclusions: Two Different Problems

These get mixed up constantly. The choice depends on one question: do you own the other domain and does it have GA4 installed?

If you own the domain and GA4 is on it, you need cross-domain tracking. Set it up in Admin > Data Streams > Web Stream > Configure Tag Settings > Configure Your Domains. Add every domain that’s part of the same user journey. GA4 appends a _gl parameter to links between those domains, passing the user’s session and client ID across the hop. One measurement ID must be on all configured domains.

If you don’t own the domain (payment gateway like Stripe or PayPal, booking system, external form), you need a referral exclusion. Admin > Data Streams > Web Stream > Configure Tag Settings > List Unwanted Referrals. Add the gateway domain. GA4 will no longer count a return from that domain as a new referral session, preserving your original campaign attribution.

Common mistake that destroys attribution:
Adding your own domain to the referral exclusion list instead of configuring cross-domain tracking. It hides the self-referral symptom but doesn’t fix the underlying session break. GA4 still starts a new session when the user crosses domains, and your original traffic source gets replaced.

The New AI Assistant Channel in GA4: What It Tracks and What It Misses

On May 13, 2026, Google added “AI Assistant” to GA4’s Default Channel Group. No configuration needed. Sessions from recognized AI chatbots now get their own row in Acquisition reports, sitting alongside Organic Search, Direct, Paid Search, and Referral.

When GA4 detects a referrer matching a recognized AI source, it assigns the medium value “ai-assistant,” groups the session under the AI Assistant channel, and labels the campaign “(ai-assistant).” As of June 2026, the officially recognized sources are ChatGPT, Gemini, Deepseek, Copilot, and Grok.

What it misses: Perplexity is not on the official recognized list and still lands in Referral. AI traffic that arrives without a referrer header (copy-paste links, mobile apps, in-app browsers) goes to Direct. Google’s own AI Overviews click traffic is classified as Organic Search, not AI Assistant. And the channel isn’t retroactive: sessions before May 13, 2026 stay in whichever channel they originally landed in.

The fix for incomplete coverage: add a custom channel group in Admin > Data Settings > Channel Groups. Create a channel called “AI Assistants (custom)” with a session source regex rule that catches Perplexity, Mistral, Meta AI, and others. Place it above the Referral rule so it fires first. Run both the native channel and the custom group simultaneously.

GA4 Data Quality Settings You Probably Haven’t Touched

Internal traffic filter: Go to Admin > Data Collection > Define Internal Traffic. Add your office and agency IP addresses. Then Admin > Data Filters, create a filter to exclude traffic_type = internal. Critical note: leave it in Testing mode for 48 hours and verify it’s catching the right traffic in a free-form exploration before switching to Active. Data filters are permanent. Excluded data is gone from BigQuery too.

Content groups: If your reporting needs page category breakdowns (blog vs product vs category page), implement content groups via the content_group event parameter in GTM. UA had a built-in grouping system. GA4 doesn’t. Accounts that migrated from UA without recreating content groups are missing their entire content category reporting.

Enhanced Measurement review: Admin > Data Streams > Web Stream > Enhanced Measurement. The form_start and form_submit toggles have a high false-positive rate, firing on search bars and newsletter fields. If you have custom form tracking set up in GTM, turn these off. Duplicate or inflated form events will distort your key event counts and mess with any audience built around form interactions.

Annotations: GA4 brought annotations back in 2025. They appear as icons on time-series charts in the Reports section. Use them every time you publish a GTM container, change a consent banner, run a core algorithm update, or change your attribution settings. Anyone who doesn’t annotate these events spends hours every quarter trying to explain traffic changes they can’t tie to any known cause.

BigQuery Export: What You’re Missing Without It

GA4’s standard reports cap Explorations at 14 months of data and apply sampling on high-traffic properties. Standard reports hit a 50,000-row-per-day ceiling, causing low-frequency values to collapse into an “(other)” row. GA4’s BigQuery export has none of these limitations.

The export is free to enable. You pay Google Cloud’s standard BigQuery storage and compute costs, which typically run under $20 per month for mid-market traffic volumes. Enable it in Admin > Product Links > BigQuery Links. Choose Daily export. Data arrives the next day as events_YYYYMMDD tables.

What BigQuery unlocks that the GA4 UI never will: full unsampled data with no 14-month ceiling, SQL-based custom attribution models, joins with your CRM or order database by user ID or email, item-level e-commerce analysis across every order without hitting the (other) row, and cohort retention analysis beyond GA4’s 60-cohort cap.

For marketers, the most immediately valuable query is attribution analysis: create a CTE of session_start events with their source and medium, join it to conversion events by session ID, and you get raw conversion counts by traffic source without any of GA4’s pre-applied attribution model logic. That’s the unbiased baseline every cross-channel budget conversation should start from.

How to Install GA4 with Google Tag Manager: Step by Step

Google Tag Manager is the right way to deploy GA4 in almost every situation. Direct gtag.js installs work but they make future configuration changes harder, require developer access for every update, and have no built-in preview or testing layer. GTM gives you all of that. Here’s the exact setup.

Step 7

Create a GTM account and container

Go to tagmanager.google.com. Create an account with your business name and a container with your domain. Choose “Web” as the platform. GTM gives you two code snippets: a script tag for the <head> and a noscript iframe for right after <body>. Both need to go on every page of your site.

Step 8

Create the Google Tag (GA4 configuration tag)

In GTM, go to Tags > New. Choose Google Tag as the tag type. Enter your GA4 Measurement ID (format: G-XXXXXXXXXX, found in GA4 Admin > Data Streams > your web stream). Under Configuration Parameters, do not add anything yet. Set the trigger to Initialization – All Pages. Name it “Google Tag – GA4.” Under advanced settings, set the tag firing priority to 100. This ensures GA4 loads before any event tags fire.

Tag Type: Google Tag
Measurement ID: G-XXXXXXXXXX
Trigger: Initialization - All Pages
Tag Firing Priority: 100

Priority 100 is critical. Without it, event tags may fire before the config tag, causing some events to not have session data or source/medium attribution.

Step 9

Create a GA4 Event tag template for all events

Go to Tags > New. Choose Google Analytics: GA4 Event. Select your Google Tag as the configuration tag. Leave the Event Name field as a variable that you’ll populate per event. Create an Event Settings Variable (Variables > New > Event Settings Variable) , this is where you’ll store parameters that should go on every event (like user_id if you’re implementing it, or custom dimensions). Set the trigger to All Pages for testing, then switch to specific triggers per event.

Step 10

Enable enhanced measurement in GA4

In GA4: Admin > Data Streams > your web stream > Enhanced Measurement toggle. Review what’s enabled. If you have custom form tracking set up in GTM, turn off Form Interactions. If you’re on a site with iframes or non-YouTube video players, turn off Video Engagement unless you’ve confirmed it works correctly on your setup.

Step 11

Test with GTM Preview before publishing

Click Preview in GTM. Open your site in the preview session. In the GTM preview panel, confirm your Google Tag fires on initialization. Check that page_view fires on every page. Go to GA4 Admin > DebugView and confirm events appear. Only publish the container once DebugView shows clean data with the correct source/medium attribution.

The Conversion Linker tag is required even if you’re only running GA4.
Add a Conversion Linker tag in GTM (Tag Type: Conversion Linker) triggered on All Pages. Without it, cross-domain attribution breaks and iOS 14.5+ users lose attribution. Set its firing priority to 99, just below your Google Tag at 100.

GA4 Event Types: Which Ones Fire Automatically and Which Ones You Have to Build

GA4 has four categories of events. Most implementations rely entirely on the first two and never build the third and fourth. That’s why most GA4 setups look functional but miss the data that actually matters for decisions.

Event TypeSetup Required?ExamplesWhen to Use
Automatically collectedNonefirst_visit, session_start, user_engagement, page_view (basic)These fire by default with any GA4 tag. Don’t modify or duplicate them.
Enhanced MeasurementToggle in Admin (no code)scroll, click (outbound), view_search_results, video_start, file_download, form_start, form_submitEnable selectively. Disable form events if you have custom form tracking.
Recommended eventsGTM tags or dataLayer push by developerpurchase, add_to_cart, begin_checkout, generate_lead, login, sign_up, view_itemAlways use these for e-commerce and lead gen. Using Google’s naming unlocks pre-built reports.
Custom eventsGTM tags or gtag.js codevideo_quiz_complete, chatbot_opened, pricing_calculator_used, document_sharedUse when no recommended event name fits the action. These only appear in custom reports, not pre-built ones.

The recommended events list matters more than most people realize. If you name your cart event “cart_add” instead of “add_to_cart,” GA4 won’t populate the Shopping Behavior or Purchase Journey reports with your data. You’ll have the event but no visual funnel. Always check Google’s recommended event names before creating a custom event name for a common action.

Custom event parameter limit: 25 for standard reports, unlimited for BigQuery.
GA4 supports up to 25 custom event parameters registered as custom dimensions (visible in standard reports). BigQuery export captures all parameters regardless of that limit. If you have more than 25 parameters, register the 25 most analytically important ones in Admin and track the rest exclusively through BigQuery.

How to Set Up GA4 E-commerce Tracking in GTM (With Full Data Layer Code)

GA4 e-commerce tracking requires a correctly structured dataLayer on your site. This is a developer task, not a GTM task. GTM reads the dataLayer and forwards the data to GA4. If the dataLayer is wrong, GTM can’t fix it. Get the developer to implement the dataLayer first, then configure GTM to read it.

The Critical Rule: Always Clear the ecommerce Object Before Every Push

Every dataLayer push for an e-commerce event must be preceded by a null push. Without it, GTM may read a stale ecommerce object from a previous event and send wrong product data.

// Always do this first
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ ecommerce: null });  // clear previous ecommerce data

// Then push your event
window.dataLayer.push({
  event: "add_to_cart",
  ecommerce: {
    currency: "USD",
    value: 59.99,
    items: [{
      item_id: "SKU-123",
      item_name: "Blue Running Shoe",
      item_brand: "Nike",
      item_category: "Footwear",
      item_variant: "Size 10",
      price: 59.99,
      quantity: 1
    }]
  }
});

The Complete E-commerce Event Sequence

Event NameWhen to FireRequired ParametersCommon Mistake
view_item_listCategory page or search results loadsitems (item_id, item_name, price, index)Sending too many items (cap at visible items, not full catalog)
select_itemUser clicks a product from a listitems (item_id, item_name), item_list_nameNot passing item_list_name, breaking list attribution
view_itemProduct detail page loadscurrency, value, items (item_id, item_name, price)Missing currency parameter , revenue reports break
add_to_cartUser clicks Add to Cartcurrency, value, items (with quantity)Not clearing ecommerce: null first, stale product data sent
view_cartUser opens cart pagecurrency, value, items (all items in cart)Skipping this event , breaks cart abandonment analysis
begin_checkoutUser clicks Proceed to Checkoutcurrency, value, items, coupon (if applied)Firing on cart page instead of actual checkout initiation
add_shipping_infoUser completes shipping stepcurrency, value, items, shipping_tierOften skipped , missing it means no shipping abandonment analysis
add_payment_infoUser submits payment detailscurrency, value, items, payment_typeOften skipped , missing it hides payment method abandonment
purchaseOrder confirmation page loadstransaction_id, value, currency, items, tax, shippingFiring on page reload = duplicate transactions; no deduplication on transaction_id
refundRefund processed (server-side via Measurement Protocol)transaction_id, value, items (refunded items only)Sending via browser instead of server , unreliable for backend-triggered refunds

The Purchase Event DataLayer (The One That Breaks Everything When Wrong)

window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ ecommerce: null });

window.dataLayer.push({
  event: "purchase",
  ecommerce: {
    transaction_id: "ORD-20260623-8841",  // MUST be unique per order
    value: 161.98,           // revenue AFTER discounts, BEFORE tax/shipping
    tax: 14.40,
    shipping: 9.99,
    currency: "USD",
    coupon: "SAVE10",        // order-level coupon if applied
    items: [
      {
        item_id: "SKU-001",
        item_name: "Blue Running Shoe",
        item_brand: "Nike",
        item_category: "Footwear",
        item_category2: "Running",   // up to item_category5 for hierarchy
        item_variant: "Size 10",
        price: 80.99,       // price PER UNIT after item-level discount
        quantity: 2,
        coupon: ""          // item-level coupon if different from order coupon
      },
      {
        item_id: "SKU-002",
        item_name: "Running Socks",
        item_brand: "Nike",
        item_category: "Accessories",
        price: 9.99,
        quantity: 2
      }
    ]
  }
});

Duplicate purchase events kill your revenue data.
If your thank-you page can be refreshed or revisited, the purchase event will fire multiple times. Server-side deduplication via the transaction_id is recommended: before firing the event on the client, check a first-party cookie or sessionStorage flag. If the transaction_id has already fired in this session, don’t push it again. GA4 does not deduplicate on transaction_id automatically.

How to Set Up GA4 for Lead Generation: Custom Events That Actually Matter

Lead gen sites don’t have a purchase event. But they need the same level of conversion tracking depth. Here’s the event structure that gives you funnel visibility without an e-commerce implementation.

The Core Lead Gen Event Sequence

// 1. User lands on a key service page (track engagement, not just pageview)
window.dataLayer.push({
  event: "page_engagement",
  page_type: "service",
  service_name: "google-ads-management"
});

// 2. User starts filling out a form (generate_lead is Google's recommended name)
window.dataLayer.push({
  event: "form_start",
  form_name: "contact-form",
  form_location: "hero-section"
});

// 3. User submits the form , this is your key event
window.dataLayer.push({
  event: "generate_lead",
  form_name: "contact-form",
  lead_type: "contact",
  value: 50,          // assign a monetary value to leads for ROAS calculation
  currency: "USD"
});

// 4. User books a call (higher-intent action)
window.dataLayer.push({
  event: "generate_lead",
  form_name: "discovery-call-booking",
  lead_type: "qualified_lead",
  value: 150,
  currency: "USD"
});

Assigning a value to every lead type is non-negotiable if you’re using Smart Bidding. Google Ads Target ROAS bidding requires revenue data. Without a value parameter, the algorithm is optimizing for lead count, not lead quality. Set values based on your average lead-to-close rate and deal value. A contact form submit worth $50 and a booked call worth $150 will teach the algorithm to prefer higher-intent actions.

In GA4, mark generate_lead as a key event in Admin > Events. Import it into Google Ads as a conversion. Set the counting method to “Once per session” for form submits , a user who submits the same form twice in a session should count as one lead, not two.

How to Use GA4 DebugView to Verify Every Event Before It Goes Live

DebugView is the closest thing GA4 has to a real-time event inspector. Every event fires instantly and you can see every parameter, every value. It’s the tool you use after GTM Preview to confirm data is arriving in GA4 the way you expect.

To activate DebugView: in GTM Preview mode, it activates automatically. Outside of GTM Preview, add the Chrome extension “GA Debugger” or append ?_ga4_debug=1 to your URL. Then go to GA4 Admin > DebugView.

What to check for every event:

  • The event name appears correctly (check for typos: “purchace” instead of “purchase” happens more than you’d think)
  • The items array is populated for e-commerce events (click the event, look for the Items tab)
  • source and medium are correct (if you see “direct” when you expected “google/cpc”, auto-tagging or UTMs are broken)
  • user_id appears if you’ve implemented it (shows as a parameter on events for authenticated users)
  • currency is present on all purchase and generate_lead events with value
  • transaction_id is unique (refresh the purchase page and confirm the event doesn’t fire again)

DebugView only shows data from the device currently in debug mode.
It’s not a real-time view of all traffic. If you open a second browser tab in non-debug mode, those events won’t appear in DebugView. This is intentional. Always test in the same session you enabled debug mode.

Common DebugView Red Flags and Their Fixes

What You See in DebugViewWhat It MeansHow to Fix It
event fires but items array is emptydataLayer ecommerce object not cleared before push, or items array built incorrectlyAdd dataLayer.push({ecommerce: null}) before every ecommerce push; inspect window.dataLayer in browser console
source = “(direct)” on a paid clickAuto-tagging disabled, or gclid stripped by the landing pageVerify auto-tagging in Google Ads; check if CMS is stripping URL parameters; verify UTMs as fallback
purchase event fires twice on page loadGTM trigger firing on All Pages or tag not limited to thank-you page correctlyAdd sessionStorage flag check before firing; tighten GTM trigger to URL path match
user_id shows as “undefined”dataLayer push for user_id is firing after the Google Tag config tagMove user_id push to server-rendered HTML before GTM snippet; or use gtag(‘set’, ‘user_id’, value) after login event
currency missing on purchase eventcurrency parameter not included in dataLayer pushAdd currency to every event where value is sent; required for monetization reports to populate
No events appearing at allGTM container not published, or wrong Measurement ID in Google TagConfirm GTM container is published; verify Measurement ID matches your GA4 property data stream

GA4 Setup for E-commerce vs Lead Gen vs SaaS: What Changes

The core GA4 setup is the same across business types. What changes is which events you implement, what you mark as key events, and what you optimize Google Ads bidding against.

ElementE-commerceLead GenerationSaaS / App
Primary key eventpurchasegenerate_leadsign_up or trial_started
Revenue trackingAutomatic via ecommerce.value on purchaseManual value assignment per lead typeRevenue via Measurement Protocol from backend on subscription activation
Funnel explorationview_item > add_to_cart > begin_checkout > purchaseLanding page > form_start > generate_lead > qualified_leadsign_up > onboarding_complete > feature_used > subscription_started
Most valuable audience for Google AdsPast purchasers (lookalike) and cart abandoners (RLSA)High-intent page visitors (pricing, services) who didn’t submitTrial users who completed onboarding but haven’t upgraded
Cohort analysis focusRepeat purchase rate and LTV by acquisition channelLead-to-contact rate; revisit rate from organicFeature adoption rate; churn week by onboarding behavior
BigQuery join priorityCRM order data by transaction_id for returns/refundsCRM lead data by form submission ID for close rateProduct DB by user_id for feature usage and MRR

How to Create a GA4 Property From Scratch

Before any tracking setup, you need a GA4 property. If you’re migrating from UA it was created for you. If you’re starting fresh, here’s the exact path.

Step 12

Go to analytics.google.com and sign in

Click the admin gear icon at the bottom left. Under the Account column, confirm you’re in the right Google account. Under the Property column, click “Create Property.”

Step 13

Fill in the property details

Property name: use the client or site name, not “GA4.” Reporting time zone: set this to your business timezone. Get it wrong and your day-boundaries in reports will be off. Currency: set to your trading currency. Click Next.

Step 14

Choose your business details

Select the industry category that matches your client’s business , this affects which pre-built reports GA4 shows you by default. If you’re an agency, set the client’s industry here, not “advertising.” Business size and objectives can be set to whatever applies. Click Create.

Step 15

Set up a Web data stream

Choose Web. Enter the website URL (without https://). Name it clearly. Enable Enhanced Measurement toggle. Copy your Measurement ID (format: G-XXXXXXXXXX). This is what you’ll need for GTM or gtag installation.

Important: Set data retention to 14 months immediately after property creation.
The default is 2 months. Admin > Data Settings > Data Retention. You cannot recover data you didn’t retain. Do this before any traffic hits the property.

How to Install GA4 Without Google Tag Manager (gtag.js Direct)

GTM is recommended for most sites, but some setups don’t support it: strict content security policies, headless CMS platforms, or situations where a developer prefers to own the tracking layer directly. gtag.js works perfectly for those cases.

Add this code to the <head> section of every page, replacing G-XXXXXXXXXX with your actual Measurement ID:

<!-- Google tag (gtag.js) -->
<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');
</script>

For authenticated users, add user_id to the config call:

gtag('config', 'G-XXXXXXXXXX', {
  user_id: '{{YOUR_USER_ID_VARIABLE}}'  // only when user is logged in
});

For custom events, use gtag() directly after the snippet loads. Don’t place event calls above the config snippet , GA4 won’t process data from events that fire before configuration.

// Track a lead form submission
gtag('event', 'generate_lead', {
  value: 50,
  currency: 'USD',
  form_name: 'contact-form'
});

The main downside of gtag.js over GTM: every change requires a developer deploy. There’s no preview or testing layer. Changing a Measurement ID or adding a parameter means a code push. For most client work, GTM is worth the setup overhead.

How to Set Up GA4 on Shopify, WordPress, and WooCommerce

Each platform has its own GA4 implementation path. The right one depends on whether you need basic tracking or full e-commerce event data.

GA4 on Shopify

Shopify has a native Google and YouTube app that installs GA4 automatically. Go to Shopify Admin > Apps > Google and YouTube. Connect your Google account, link your GA4 property. This handles page views, sessions, and basic purchase tracking with no GTM required.

What Shopify’s native integration misses: it doesn’t track view_item, add_to_cart, begin_checkout, or add_to_wishlist. You only get the purchase event. For full funnel analysis, you need GTM on Shopify. Add GTM via your theme.liquid file (paste the GTM container code in <head> and after <body>), then build your e-commerce dataLayer in a custom theme snippet.

Shopify checkout is a separate domain (.myshopify.com) that you don’t fully control.
This breaks cross-domain tracking for standard Shopify plans. The purchase event fired in Shopify’s checkout may show as a new session in GA4 with source “direct.” The fix: add your primary domain and myshopify.com to GA4’s cross-domain tracking list (Admin > Data Streams > Configure Tag Settings > Configure your domains). Shopify Plus allows full GTM in checkout.

GA4 on WordPress (Without WooCommerce)

Two options: Site Kit by Google (Google’s official WordPress plugin) and manual GTM installation. Site Kit installs GA4 with a few clicks and shows basic GA4 data inside your WordPress dashboard. It works but doesn’t support custom event tracking or e-commerce.

For agencies managing WordPress clients, GTM is the right approach. Install GTM via the Insert Headers and Footers plugin or by editing the theme’s header.php directly. Paste both GTM code snippets. Then configure GA4 event tags in GTM the same way you would on any other site.

GA4 on WooCommerce

WooCommerce requires a dataLayer plugin to push e-commerce events. The recommended option is the free GTM4WP plugin (duracell.toth.hu). Install it, configure it in WordPress Admin > Settings > Google Tag Manager. Under Integrations, enable WooCommerce support. This automatically pushes view_item, add_to_cart, begin_checkout, and purchase events in GA4’s recommended schema.

Once the dataLayer is in place, you don’t need custom event tags in GTM. Create a single GA4 Event tag that uses “Send Ecommerce data” set to “Data Layer” , it reads the entire WooCommerce ecommerce object and forwards it to GA4 in one tag. Verify in GTM Preview that the items array contains item_id, item_name, and price before publishing.

How to Implement Consent Mode v2 in GTM (Full Code)

Consent Mode v2 isn’t just a setting to enable , it requires specific GTM configuration and a Consent Management Platform (CMP) integration. Here’s the exact setup.

The Four Parameters You Must Handle

ParameterWhat It ControlsIf Denied
ad_storageAdvertising cookies (gclid, conversion tracking)Google Ads conversion tracking disabled
analytics_storageGA4 analytics cookies (client ID, session data)GA4 tracks in limited mode, no session continuity
ad_user_dataSending user data to Google for ad personalizationUser excluded from GA4 remarketing audiences in Google Ads
ad_personalizationPersonalized ads based on user behaviorNon-personalized ads only, no RLSA

Step 1: Add Default Consent State in GTM

In GTM, go to Tags > New. Type: Custom HTML. Name it “Consent Initialization – Default.” Paste this code:

<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}

// Set default state to denied for EEA users (before consent banner fires)
gtag('consent', 'default', {
  'ad_storage': 'denied',
  'analytics_storage': 'denied',
  'ad_user_data': 'denied',
  'ad_personalization': 'denied',
  'wait_for_update': 500  // wait 500ms for CMP to update before firing tags
});

// For non-EEA regions where consent is not legally required:
// gtag('consent', 'default', {
//   'ad_storage': 'granted',
//   'analytics_storage': 'granted',
//   'ad_user_data': 'granted',
//   'ad_personalization': 'granted',
//   'region': ['US', 'CA']  // US and Canada: granted by default
// });
</script>

Set this tag’s trigger to: Consent Initialization – All Pages. Set firing priority to 999 (highest). It must fire before every other tag.

Step 2: Update Consent When User Accepts

Your CMP (OneTrust, Cookiebot, Usercentrics, etc.) fires a dataLayer event when the user grants consent. Listen for that event and update the consent state:

<script>
// This fires when user accepts marketing/analytics cookies
// The event name varies by CMP -- check your CMP documentation
// Common event names: OneTrustGroupsUpdated, cookie_consent_update, CookiebotOnAccept

gtag('consent', 'update', {
  'ad_storage': 'granted',
  'analytics_storage': 'granted',
  'ad_user_data': 'granted',
  'ad_personalization': 'granted'
});
</script>

Create this as a Custom HTML tag in GTM triggered by your CMP’s consent event.

Step 3: Verify in GTM Preview

Open GTM Preview. Go to your site. In the preview panel, click on any event tag and look for the “Consent” tab. You should see all four parameters in “Denied” state initially. Accept the cookie banner and check the same tab. All four should switch to “Granted.” If any stay denied after accepting, your CMP is not firing the update correctly , check the CMP’s GTM integration settings.

What happens with behavioral modeling when consent is denied.
With Consent Mode v2 active and analytics_storage denied, GA4 doesn’t track that user normally. Instead, GA4 models their behavior using similar consented users. For this modeling to activate, your property needs at least 1,000 daily events with analytics_storage denied for 7 consecutive days. Below that threshold, denied traffic is simply not counted. This is why EU-heavy properties can show 30-40% lower user counts than actual traffic.

How to Rename GA4 Events Without Code or GTM

GA4 lets you rename events, add parameters, or create entirely new events from existing ones directly in the Admin panel. No developer access, no GTM publish. This is one of the most underused features in GA4 and it solves a real agency problem: fixing a client’s wrong event naming after the fact.

Go to Admin > Data Display > Events > Create Event (to build a new event from an existing one) or Modify Event (to rename a parameter value or the event name itself).

Common Agency Use Cases

ProblemSolution via Event Modification
Client’s developer named form submit “form_submitted” instead of “generate_lead”Modify Event: rename form_submitted to generate_lead when condition matches. GA4 then treats it as the recommended event and populates lead reports correctly.
Purchase event fires but has wrong currency parameter (“GBP” instead of “USD”)Modify Event on purchase: change currency parameter value from “GBP” to “USD.” Revenue reports correct from that point forward.
Need a new “high_value_page_view” event only when page contains “/pricing”Create Event based on page_view with condition: page_location contains /pricing. No code needed.
Scroll event fires but need it only on blog pages, not all pagesModify Event on scroll: add condition page_location contains /blog/. Scroll events from other pages won’t match and won’t count.

Event modification applies going forward only , it’s not retroactive.
If you rename “form_submitted” to “generate_lead” today, historical data still shows form_submitted. The change takes effect on events received after you save it. For retroactive fixes, you need BigQuery and a data transformation layer.

GA4 Monetization Reports: Purchase Journey and Checkout Journey

Most guides send e-commerce clients straight to Explorations for funnel analysis. The Monetization section in standard reports has pre-built funnel visualizations that are faster to access and easier to share with clients.

In GA4’s left navigation: Reports > Monetization. You’ll see three key reports:

Overview: Revenue trend, top items by revenue, average purchase revenue. Quick health check for e-commerce accounts.

Purchase Journey: A visual funnel showing the drop-off from Session Start to View Product > Add to Cart > Begin Checkout > Purchase. This uses your actual e-commerce event data automatically , no configuration needed beyond having the events implemented correctly. The percentages shown are user-level (what percentage of sessions that started reached each step), not event-level.

Checkout Journey: Zooms into the final steps: Begin Checkout > Add Shipping Info > Add Payment Info > Purchase. If you’ve implemented add_shipping_info and add_payment_info, this report shows exactly where payment friction is occurring. Most implementations skip these two events. Without them, this report only shows Begin Checkout and Purchase with a 100% gap between.

These reports differ from Funnel Explorations in one important way: they can’t be segmented or customized. You can’t add a “Mobile only” comparison or filter by traffic source. For that depth, use Funnel Exploration. Use Monetization reports for fast client reporting and Explorations for diagnostic work.

How to Track TikTok and LinkedIn Ads in GA4

TikTok Ads in GA4

TikTok doesn’t have a native GA4 integration. All attribution depends on UTM parameters on your ad URLs. Use this UTM structure for every TikTok ad:

utm_source=tiktok
utm_medium=paid-social
utm_campaign={{campaign_name}}
utm_content={{ad_group_name}}
utm_term={{creative_name}}

In GA4, TikTok traffic with these UTMs lands in the Paid Social channel group. To separate it from Meta, create a custom channel group (Admin > Data Settings > Channel Groups) with a rule that sets TikTok as its own channel when utm_source exactly matches “tiktok.”

TikTok’s own attribution uses a 7-day click and 1-day view window by default , the same structure as Meta. The same over-reporting logic applies: view-through conversions in TikTok Ads Manager won’t appear in GA4 at all. TikTok also uses its own click ID (ttclid) which GA4 doesn’t read natively, so cross-device attribution between TikTok clicks and conversions is weaker than Google Ads.

For improved TikTok conversion tracking, implement TikTok’s Events API (server-side equivalent of Meta’s CAPI). Send your GA4 purchase events to TikTok server-side so TikTok’s algorithm gets better optimization signal, even when the pixel fails on iOS.

LinkedIn Ads in GA4

LinkedIn has no native GA4 integration. UTM parameters are the only mechanism. LinkedIn auto-tags ads with its own click ID (li_fat_id) but GA4 doesn’t read it. Use manual UTMs:

utm_source=linkedin
utm_medium=paid-social
utm_campaign={{Campaign Name}}
utm_content={{Ad Name}}

LinkedIn’s attribution default is a 30-day click window with a 7-day view window. The view-through window means LinkedIn Ads Manager will claim conversions from users who saw a LinkedIn ad in the past 7 days but clicked through any other channel. This is the same structural over-reporting problem as Meta, just with different window lengths.

For B2B clients running LinkedIn campaigns, the most honest cross-platform view comes from comparing LinkedIn’s last-click data, GA4’s Conversion Paths (which will show LinkedIn in assist positions), and your CRM’s actual lead source. LinkedIn typically shows 2-4x more conversions than GA4 attributes to it because of the 7-day view window on B2B decision cycles that often span multiple channels.

GA4 Standard vs GA4 360: The Limits That Actually Matter

Most agencies never need GA4 360. But when a client is large enough that standard limits start breaking their reporting, knowing the exact thresholds matters for setting expectations and making the upgrade case.

FeatureGA4 Standard (Free)GA4 360
Event parameters per event25100
User properties25 per property100 per property
Key events3050
Audiences100400
Exploration query limit10M events per query1B events per query
Unsampled explorationsNot available20K tokens/day, 200K tokens/month
Data retentionUp to 14 months (select 38 months if available)Up to 50 months
BigQuery export daily limit1M events/day20B events/day
SubpropertiesNot availableAvailable (filter a parent property into sub-views)
Rollup propertiesNot availableCombine multiple properties into one unified view
BigQuery Fresh Daily exportNot availableAvailable with completeness signal
SLA guaranteeNoYes

The practical trigger for 360 upgrade: when Exploration reports are consistently sampled, when you have more than 30 events you want to mark as key events, or when subproperties are needed to give separate teams their own filtered view of the main property. For most mid-market clients, standard GA4 with BigQuery export handles everything without 360.

GA4 Session Timeout: Why the Default Setting Affects Your Data

GA4 defines a session as a period of activity with no more than 30 minutes of inactivity. After 30 minutes without an event, the session ends. The next event starts a new session. This is the default and most sites never change it.

When to change it: content-heavy sites (news, documentation, long-form articles) where users read without clicking for extended periods. A reader spending 45 minutes on a guide gets counted as two sessions. Their engagement time is double-counted across two session_start events. This inflates your session count and makes session-level metrics (revenue per session, conversion rate) look artificially low.

Where to change it: Admin > Data Streams > your web stream > Configure Tag Settings > Adjust session timeout. You can increase the timeout up to 7 hours and 55 minutes. For most sites, 60 minutes is a reasonable adjustment if you’re seeing evidence of the split-session problem.

Where this causes the (not set) landing page problem: if a user leaves your site open in a browser tab for over 30 minutes and then scrolls (triggering a user_engagement event), a new session starts without a page_view event. GA4 then can’t determine a landing page for that session. The result is (not set) in your Landing Page dimension. You can’t eliminate this entirely, but increasing session timeout reduces how often it happens.

Want GA4 Set Up Correctly Across Every Client Account?

Most GA4 properties we audit have at least five of the issues in this post. Wrong Reporting Identity. Personalized Advertising off. Data retention at 2 months. No cross-domain tracking. No audiences built. We fix all of it as part of every account we onboard, and we run the 40-point audit every quarter to keep it clean.

Hustle Marketers is a Google Partner and Meta Business Partner agency. We’ve helped 2,500+ brands generate $780M+ in trackable revenue across Google Ads, Meta Ads, SEO, and white-label PPC. Our audits are free and worth $500.

Get Your Free GA4 Audit

GA4 and Looker Studio: Three Reports Every Client Account Needs

Looker Studio is GA4’s native visualization layer and it’s free. The GA4 connector exposes nearly every dimension and metric in the GA4 interface, plus the predictive metrics. You can blend GA4 data with Google Ads, Search Console, and YouTube Analytics in a single Looker Studio report without needing a third-party tool.

Executive dashboard: GA4 and Google Ads blended on Campaign Name. Sessions, engaged sessions, key event rate, conversions, cost, and ROAS in one view. Daily refresh. Client-facing with a read-only link so they stop emailing for weekly screenshots.

SEO report: GA4 and Search Console blended on Landing Page. Organic sessions, GSC impressions, clicks, CTR, average position, and key event conversions from organic. This is the report that shows which organic pages actually drive business, not just traffic. It replaces toggling between GSC and GA4 every time someone asks about SEO performance.

Cross-channel ROAS: GA4 with cost data import configured. Shows all channels, non-Google spend, revenue, and blended ROAS. Google expanded cost data import in June 2025 to support Google Sheets, BigQuery, Redshift, S3, Snowflake, and more. Set up a Google Sheet that auto-pulls Meta and Bing spend daily and connect it to GA4’s cost import. You get a live cross-channel ROAS view inside GA4 without a separate attribution platform.

The Complete GA4 Property Audit Checklist (Run This Every Quarter)

This checklist covers every setting, link, and report that separates a correctly configured GA4 property from one generating misleading data. Run it on every new account in the first week and on every existing account every quarter. Five failures here means your attribution, your audiences, and your bidding signals are all compromised.

Admin Settings

  • Reporting Identity set to Blended (Admin > Property Settings > Reporting Identity)
  • Data retention set to 14 months minimum (Admin > Data Settings > Data Retention)
  • Google Signals enabled for all regions where paid campaigns are running
  • Data Collection acknowledgment toggle checked (Admin > Data Collection)
  • Attribution model set to Data-Driven cross-channel (Admin > Attribution Settings)
  • Lookback window at 90 days for key events and purchases
  • Internal traffic IP addresses defined with traffic_type parameter set
  • Internal traffic data filter in Testing state, verified in DebugView before going Active
  • Referral exclusions added for every payment gateway and pass-through domain
  • Cross-domain tracking configured for all owned domains in the same user journey
  • Enhanced Measurement reviewed: form_start and form_submit disabled if custom form tracking exists in GTM

Linking and Integrations

  • Google Ads linked with Personalized Advertising toggle ON (this alone fixes most zero-audience problems)
  • Auto-tagging verified active in the linked Google Ads account settings
  • Search Console linked to the correct web data stream
  • BigQuery linked with Daily export enabled
  • Consent Mode v2 implemented and verified in GTM Preview mode under the Consent tab

Data Quality

  • Consent Settings report reviewed in Admin: EEA signals for ad_user_data and ad_personalization both coming through correctly
  • No unexpected (not set) values in source/medium beyond normal volume
  • User ID not registered as a custom dimension (send at config level only, never as an event parameter)
  • No payment gateway appearing as top referral source for key event conversions
  • UTM parameters enforced on every non-Google paid URL: Meta, LinkedIn, TikTok, Bing
  • No self-referrals from your own domain appearing in the Traffic Acquisition report

Key Events and Conversions

  • Key event list audited: no micro-events (scroll, outbound click, file download) marked as key events
  • Counting method correct: once per session for lead forms, once per event for purchases
  • GA4 key events imported into Google Ads as secondary signals only (native Google Ads tag is still the primary signal for bidding)
  • No duplicate events from Enhanced Measurement and custom GTM tracking firing on the same action simultaneously

Audiences

  • At minimum three audiences built: all visitors (30-day window), high-intent page visitors, past converters
  • Audience sizes verified in Google Ads Audience Manager, not just in GA4 (check for zeros)
  • Source-specific audiences built: Paid Social non-converters, Organic high-intent visitors
  • Predictive audiences enabled if eligible (needs 1,000+ return users and 1,000+ churned users in the past 28 days)

Reporting and Analysis

  • Annotations added for all GTM publishes, consent banner changes, algorithm updates, and attribution setting changes
  • Custom channel group created for AI assistant traffic: includes Perplexity and other sources not in GA4’s native list
  • Content groups implemented via content_group event parameter if category-level page reporting is needed
  • Funnel exploration built for your primary conversion flow and compared across mobile vs desktop segments
  • Cohort exploration run monthly with week-4 retention broken down by First user default channel group
  • Advertising > Conversion Paths reviewed quarterly to quantify Meta and Bing assist roles
  • Cost data import configured for non-Google paid channels (Google Sheets connector for Meta and Bing at minimum)
  • Looker Studio reports built: executive dashboard (GA4 and Google Ads blend), SEO report (GA4 and Search Console blend), cross-channel ROAS view
  • Cross-platform attribution baseline delta documented: ratio of platform-reported to CRM-reported conversions per channel, set in month one

How to use this checklist
Any item that fails is a data quality issue affecting your campaigns right now. Reporting Identity wrong and data retention at 2 months are the two most common failures across accounts we audit. Fix Admin settings first, then linking, then data quality, then events, then audiences, then reporting. In that order.

Start Using GA4 Properly in 2026

GA4 installed without configuration isn’t analytics. It’s an expensive-looking gap in your data. Reporting Identity understating users, Personalized Advertising killing your audience exports, data retention at 2 months, no internal traffic filter, Meta view-through inflating ROAS, Bing disappearing into Direct traffic because UTMs aren’t enforced: any one of these quietly corrupts every decision you make with the data.

The good news is none of these fixes are technically complex. They’re mostly Admin settings and a few GTM configurations. The 40-point checklist in this guide covers everything. Run it on every new client account in the first week and on every existing account every quarter. The improvement in data quality shows up in campaign performance within 90 days because your bidding algorithms, your audiences, and your budget decisions are finally working from accurate signals.

Frequently Asked Questions About Using GA4 for Marketing

What is the difference between GA4 key events and conversions?

Key events are important actions tracked in GA4 across all channels. Conversions are key events imported into Google Ads for bidding. The same event can be both.

Why are my GA4 audiences showing zero users in Google Ads?

The most common cause is Personalized Advertising being toggled off in the Google Ads link settings. Enable it in Admin > Product Links > Google Ads Links.

Why does Meta show more conversions than GA4?

Meta includes view-through conversions by default. GA4 doesn’t track view-through at all. The same sale gets credited differently under each platform’s rules.

What is Reporting Identity in GA4 and which one should I use?

Reporting Identity controls how GA4 identifies users. Use Blended. It uses User ID, Google Signals, device ID, and behavioral modeling for the most complete user count.

Do I need to configure cross-domain tracking and referral exclusions?

Not both for the same domain. Use cross-domain tracking for domains you own with GA4 installed. Use referral exclusions for payment gateways and external tools you don’t control.

What is the new AI Assistant channel in GA4?

GA4 added a native AI Assistant channel in May 2026 that automatically classifies traffic from ChatGPT, Gemini, Deepseek, Copilot, and Grok into its own channel.

Should I use GA4 BigQuery export?

Yes if you need unsampled data, custom attribution analysis, or joins with CRM data. Setup is free. Storage costs typically run under $20 a month for mid-market traffic.

How do I track Meta and Bing traffic in GA4?

Add UTM parameters to every Meta and Bing ad URL. GA4 reads them and attributes sessions correctly. Without UTMs, Bing and Meta traffic lands in Direct or Referral.

I hope you enjoy reading this blog post. If you want my team to just do your marketing for you, click here.

Ishant

Ishant Sharma is the Founder and CEO of Hustle Marketers, a Google Partner digital marketing agency. With 12+ years of experience in Google Ads, Meta Ads, SEO, and e-commerce PPC, he has helped 2500+ brands generate $780M+ in trackable revenue. Upwork Top Rated Plus with 99% Job Success Score. Ishant Sharma is the digital marketing specialist, not the Indian cricketer of the same name.

I hope you enjoy reading this blog post. If you want my team to just do your marketing for you, click here.
Scroll to Top