Setting Up GA4 Conversion Tracking: The Complete Guide
Traffic numbers feel good. Conversion numbers pay the bills. GA4 can tell you that 50,000 people visited your site last month, but without conversion tracking, it can’t tell you how many of those visitors actually did something your business cares about. No form fills, no purchases, no call clicks, no downloads. Just a vanity metric and a blind spot where your performance data should be.
The problem gets worse. A large share of GA4 properties have broken or misconfigured event tracking, which means the businesses relying on that data are optimizing against numbers that only capture a fraction of real outcomes. Every bidding strategy, every channel comparison and every budget conversation built on incomplete conversion data is fundamentally flawed.
Gorilla Marketing treats conversion tracking as job one for every analytics and tracking client. Nothing else in the analytics stack matters until the platform knows what a win looks like. Here’s how to get it right.
The Key Event Rename
Google swapped “conversions” for “key events” in GA4 during March 2024. Same thing, new label. Any event you flag as important to your business becomes a key event. The associated metrics got renamed too: “session conversion rate” turned into “session key event rate” and “user conversion rate” became “user key event rate.”
Google Ads didn’t follow suit. Inside Ads, the word “conversions” stuck. When you link a GA4 key event to your Ads account, it becomes a conversion that Smart Bidding can optimize against. Keep that mapping straight if you run paid campaigns.
GA4 ships with a few pre-flagged key events: purchase, first_open, app_store_subscription_convert and app_store_subscription_renew. For a standard website, purchase is the only one that matters out of the box.
Both terms appear in this guide. The configuration process is identical regardless of labeling.
Picking Your Conversion Events
GA4 caps you at 30 key events per property. That ceiling exists for a reason. Overloading it clutters reports and dilutes the signal. Every key event should represent a completed action tied to revenue or a strong proxy for it.
Primary conversions produce direct business outcomes. Completed purchases, submitted contact forms, phone calls initiated from the site, quote requests and confirmed bookings. If your property doesn’t have at least one of these configured, your analytics setup is incomplete.
Secondary conversions signal intent without closing the loop. Cart additions, form starts, resource downloads, pricing page visits. These belong in your event stream for funnel visibility, but they should stay as standard events. Only promote them to key events if Google Ads bidding specifically requires it.
Page views, scroll milestones and video plays are not conversions. They measure attention, not action. Treat them as engagement data and keep them out of the key event list.
Three Setup Paths

Path 1: Flag an existing event
When GA4 or Enhanced Measurement already captures the action you care about, flagging it takes seconds.
Open Admin > Events. Spot the event, hit the star. Done. Alternatively: Admin > Data Display > Key Events > New key event, type the exact name. Zero code changes.
The event has to have fired at least once before flagging works properly. Flag a name that doesn’t exist in the event stream yet and you’ll get “(not set)” polluting your reports.
Path 2: Build a custom event inside GA4
When the action isn’t already in your event list, GA4 lets you synthesize one from existing data.
Admin > Events > Create Event. Name it with lowercase letters and underscores, 40 characters max, no special characters. Good examples: lead_form_complete, demo_request_submitted.
Define the conditions. The most common recipe: trigger on page_view where page_location includes a confirmation URL like /thank-you/. After creation, give it up to 24 hours to surface in the Events list, then promote to key event. No historical backfill happens.
This works for simple use cases. Anything with conditional logic, dynamic pages or multiple form types calls for Google Tag Manager.
Path 3: Google Tag Manager
GTM is where serious tracking setups live. It gives you full control over firing conditions, event parameters and tag sequencing.
Identify the trigger. What user action counts? A form submission, a button click, a confirmation page load, a data layer push from your application.
Build the trigger in GTM. Triggers > New. Pick Form Submission for forms, Click with CSS/ID filters for buttons, Custom Event for data layer pushes. Match conditions to the exact interaction.
Create the GA4 event tag. Tags > New > GA4 Event. Drop in your Measurement ID (GA4 Admin > Data Streams) and assign an event name that follows your naming conventions.
Attach parameters. Parameters add context. For a form: form_name (which form), form_destination (where it sends), form_value (dollar amount if applicable). Register the ones you need in reports as custom dimensions under GA4 Admin > Custom Definitions.
Wire the trigger to the tag and test. Connect them, save. Do not publish until testing confirms everything fires correctly.
Validating with DebugView
Shipping untested tracking is asking for bad data.
Activate debug mode. Install the Google Analytics Debugger extension for Chrome, or append debug_mode to your GA4 config tag in GTM.
Launch DebugView. GA4 Admin > DebugView. Go to the page where your conversion should fire and complete the action.
Inspect the event. It should hit the timeline within seconds. Click it. Confirm the event name and parameter values match what you configured.
Hunt for duplicates. One action firing two events means double-counting. The usual culprit: Enhanced Measurement and a GTM tag both watching the same interaction. Kill one.
Run GTM Preview in parallel. Preview mode reveals which tags fired, which triggers matched and what data was transmitted. Paired with DebugView, you see the entire chain from user action to GA4 receipt.
When Things Go Wrong
Walk through this sequence when conversion data looks off:
No event in DebugView? The trigger isn’t matching. Open GTM Preview and inspect which conditions failed. Check for JavaScript errors blocking execution.
Event fires but reports show nothing? Confirm the event is flagged as a key event. GA4 needs 24 to 48 hours to process new key events into reports.
Conversion counts look inflated? Pull event count per user. If a form submission event consistently logs more than one per user, you’ve got duplication. Implement a transaction_id parameter to deduplicate.
Numbers suspiciously low? Check your consent configuration. Test with ad blockers disabled. Cross-reference against server logs for volume sanity checks.
Seeing “(not set)” in reports? You probably flagged the event before it ever fired. Unflag, let it log naturally, then re-flag.
Counting: Once Per Event vs Once Per Session
This setting trips up more teams than any other configuration choice.
Once per event logs every occurrence. Two purchases in one session equals two conversions. Correct for transactions where each instance carries independent value.
Once per session logs a maximum of one. Correct for lead generation, where the first form submission is the real conversion and anything after that is noise.
Find it under Admin > Key Events. Click the event, pick the counting method. The default is “once per event,” which works for ecommerce but massively overstates lead gen conversions. Google recommends the default across the board, but that recommendation doesn’t hold for non-transactional actions.
Naming Events Consistently
GA4 allows up to 500 distinct events per property, separate from the 30 key event cap. Sloppy naming eats into that allowance fast.
Stick with action_object format: form_submit_contact, purchase_complete, download_whitepaper, click_phone_cta. All lowercase, underscores between words. No spaces, no capitals, no slashes, no hyphens.
Keep a tracking plan. A shared spreadsheet listing every event name, its trigger, parameters and key event status saves hours of confusion down the line, especially when multiple people touch the GTM container.
Enhanced Conversions

Standard tracking loses conversions to cookie decay and cross-device gaps. Enhanced conversions close part of that gap by sending hashed first-party data (email, phone, name, address) alongside the conversion signal. Google matches it against signed-in accounts to recover conversions that would otherwise vanish.
The lift is real: 5% to 15% more reported conversions after activation. Match rates improve 10% to 40%. A good benchmark: if 50%+ of your conversions show as “enhanced” in Google Ads diagnostics, the setup is healthy.
GA4 setup: Admin > Data Streams > pick your stream > Enhanced measurement > toggle on user-provided data collection. GA4 can auto-detect email and phone fields in forms, or you can map specific fields through GTM data layer variables.
Google Ads setup: Goals > Conversions > Settings > enable enhanced conversions. Choose from three collection methods: automatic form scanning, JavaScript code snippets or GTM data layer variables. Everything gets SHA-256 hashed before leaving the browser.
Google Ads Data Manager, rolled out at scale in 2025, offers direct CRM connections to Salesforce, HubSpot and similar platforms. If you’re dealing with a messy CRM integration, it’s worth investigating as an alternative to manual plumbing.
Linking Key Events to Google Ads
If you run paid campaigns, this connection is non-negotiable. Smart Bidding algorithms need conversion data to function. Without it, you’re paying for clicks with no optimization signal.
Link accounts at GA4 Admin > Product Links > Google Ads Links. Flip on auto-tagging in your Google Ads account. Key events then appear in Ads under Goals > Conversions. Mark which ones are primary (used for bid optimization) and which are secondary (tracked but not used for bidding).
A hard rule: never run a GA4-imported conversion alongside a standalone Google Ads conversion tag for the same action. Double-counting corrupts Smart Bidding and inflates reported performance. Pick one source of truth.
For teams managing SEO and PPC together, sharing the same key events across both channels keeps measurement consistent. GA4 gives you unified conversion data across organic and paid, which matters when you’re comparing channels or building attribution models.
Two Conversion Metrics That Get Mixed Up
Session key event rate = sessions containing at least one key event / total sessions. This is what people usually mean when they say “conversion rate.”
User key event rate = users with at least one key event / total users. This one runs higher because a user who bounces on visit one and converts on visit three still counts as a converting user.
Mixing scopes is the trap. Pair a session-level metric with a user-level dimension and you’ll get nonsensical numbers, sometimes 100% conversion rates. Always match your metric scope to your dimension scope.
Mistakes That Wreck Your Data
Unfiltered thank-you page tracking. If the conversion fires on /thank-you/ loading, a bookmarked or refreshed page generates a phantom conversion. Add a condition requiring the previous page to be the form, or require a form interaction event to precede the page view.
Ignoring consent gaps. Visitors who decline cookies are invisible to GA4. Real conversions exceed reported conversions. Consent Mode v2 fills part of the gap through conversion modeling, but with global cookie acceptance hovering around 31%, the delta is significant.
Duplicate firing. Enhanced Measurement and GTM both watching the same form submission is the classic example. Audit your Enhanced Measurement toggles against every GTM tag.
Broken cross-domain handoff. When the conversion happens on a separate domain (payment processor, booking engine), the session breaks at the boundary. The conversion credits the external domain instead of the original traffic source. Cross-domain tracking configuration fixes this.
No post-launch testing. Site redesigns, CMS migrations and form plugin swaps silently break tracking. Bake conversion verification into every deployment checklist.
Internal traffic inflation. Staff visits generating conversions skew numbers, particularly painful at low volumes. Exclude office IP ranges under Admin > Data Streams > Configure tag settings.
Mismatched conversion windows. The default 30-day lookback window doesn’t fit every business. B2B sales cycles and high-consideration purchases may need longer windows to capture the full journey.
Reality-Checking Your Numbers
After everything is wired up, compare GA4 key event counts against ground truth. Form submissions versus inbox count. Purchases versus payment processor records. Phone click events versus call logs.
Exact matches are rare. Consent gaps, ad blockers, bot activity and processing delays all introduce variance. GA4 typically reports about 15% fewer conversions than Universal Analytics did for equivalent setups. Compared to Google Ads native tracking, GA4 runs roughly 40% lower. Those gaps are expected.
But there’s a difference between expected variance and broken tracking. GA4 reporting 50 form submissions when the inbox shows 120 is a problem. GA4 reporting 50 when the inbox shows 57 is normal friction.
Set up a monthly five-minute reconciliation. It catches silent failures before they corrupt a quarter of reporting.
After Setup: Making the Data Work
Configuration is plumbing. The value lives in what flows through it.
Map conversions to landing pages to see which organic content actually drives business outcomes. Compare conversion rates across channels to put budget where returns are strongest. Build audiences from conversion behavior: exclude people who already converted from acquisition campaigns, retarget those who came close. Server-side tracking recovers conversion signals that browser-based tracking misses, tightening the data that powers all of these decisions.
Gorilla Marketing’s analytics service covers conversion tracking setup, GTM configuration, enhanced conversions, ongoing data validation and reporting that ties analytics to outcomes. Get in touch if your current setup isn’t delivering numbers you trust.


