Conversion tracking in GA4 is where most Google Ads accounts either succeed or quietly fail. The data that feeds your bidding algorithms, your ROAS reports, and every optimization decision you make starts here. When GA4 tracking is set up correctly, you get reliable data and Smart Bidding that actually works. When it is set up wrong, you get confident-looking reports built on inaccurate numbers.
The problem is that GA4 does not tell you when tracking is broken. You will not see an error message. You will see conversions that look plausible but are either duplicated, undercounted, or attributed to the wrong source. The result is bad decisions made with false confidence.
This guide covers the full setup process, the mistakes we see most often in audits, and how to verify that your data is actually accurate before you trust it with budget decisions.
Here is what we cover: why GA4 tracking matters more than you think, the most common setup mistakes that silently break your data, a step-by-step event configuration walkthrough, how to link GA4 to Google Ads properly, attribution settings that affect your numbers, and how to test and validate that everything is working.
Why GA4 Tracking Matters More Than You Think
GA4 is not just a reporting tool. It is the primary data source that Google Ads uses to optimize your campaigns. When you run Smart Bidding strategies like tROAS or tCPA, the algorithm is making thousands of micro-decisions per day based on conversion data flowing from GA4. If that data is wrong, every decision the algorithm makes is based on a flawed signal.
We audit accounts regularly where ROAS looked stable at 3x or 4x in Google Ads, but the actual revenue numbers told a different story. The gap almost always traces back to one of two things: duplicate conversion counting or misattributed conversions. Both are GA4 setup issues, not platform bugs.
The shift from Universal Analytics to GA4 introduced an event-based data model. In Universal Analytics, you had pageviews, sessions, and goals. In GA4, everything is an event. Page loads, button clicks, form submissions, purchases. This gives you more flexibility, but it also means there are more places to make mistakes. A misconfigured event can fire on every page load instead of only on purchase confirmation. A missing parameter can cause revenue data to drop out entirely.
The accounts that perform best on Google Ads are not the ones with the biggest budgets. They are the ones with the cleanest data. Accurate conversion tracking is the foundation that everything else depends on. Without it, bid strategies, audience targeting, and campaign optimization are all working with bad inputs.
The Setup Mistakes That Silently Break Your Data
These are the issues we find most often when auditing GA4 implementations. None of them produce error messages. All of them distort your data.
Duplicate event firing is the most common. This happens when the same conversion event is triggered by multiple sources. For example, if you have a Google Tag (gtag.js) on your site and also a GA4 tag in Google Tag Manager, both will send the same event. GA4 will count it twice. Your conversion volume doubles overnight with no actual change in performance. Smart Bidding sees this inflated data and adjusts bids accordingly, usually leading to overspend on lower-quality traffic.
Missing or incorrect event parameters is the second issue. GA4 events carry parameters like transaction_id, value, and currency. If the purchase event fires without a transaction_id, GA4 cannot deduplicate repeat page loads. If the value parameter is missing or formatted incorrectly, revenue data disappears from your reports. You will see conversions counted but zero revenue attributed. This makes ROAS-based bidding impossible because the algorithm has no revenue signal to optimize against.
Cross-domain tracking gaps are the third problem. If your checkout process spans multiple domains (common with Shopify, external payment processors, or multi-brand setups), GA4 loses the user session when they cross domains unless you have explicitly configured cross-domain measurement. The result is a new session being created on the second domain, which means the original traffic source (your Google Ads click) gets dropped. The conversion gets attributed to direct traffic or a referral instead.
Event naming inconsistencies cause subtler issues. GA4 event names are case-sensitive. "Purchase" and "purchase" are different events. If your developer uses one casing and your GTM setup uses another, you end up with split data across two events. Neither one shows the full picture. This is particularly common when teams have both hardcoded analytics on the site and a Tag Manager implementation running in parallel.
Step-by-Step: Configuring Events the Right Way
The cleanest GA4 implementations use Google Tag Manager as the single source of truth for all event tracking. Hardcoding analytics directly on the site works, but it creates maintenance issues and makes it harder to audit what is actually firing.
Start with the GA4 Configuration tag in GTM. This should fire on all pages and contain your GA4 Measurement ID. Do not add any event parameters to this tag. Its only job is to initialize the GA4 property and send the default page_view event. If you have a gtag.js snippet also on your site, remove it. One or the other, never both.
For purchase tracking, create a custom event tag in GTM with the event name "purchase" (lowercase, no spaces). The trigger should be a dataLayer push that fires only on the order confirmation page. The required parameters are: transaction_id (unique per order), value (total order amount as a number), currency (three-letter code like USD), and items (an array of purchased products). The transaction_id is critical because GA4 uses it to deduplicate events. Without it, a user refreshing the confirmation page creates a duplicate conversion.
For lead generation, the key event is typically "generate_lead" or a custom event like "form_submit." The trigger should fire only when the form submission is confirmed, not when the submit button is clicked. There is an important difference. A button click trigger fires even if validation fails and the form does not actually submit. Use a success page redirect, a dataLayer push from your form handler, or a DOM change that confirms the submission went through.
Set up your key events in the GA4 interface after the tags are live. Navigate to Admin, then Events, and mark the relevant events as key events (formerly called conversions). This step is separate from creating the events in GTM. If you skip it, the events will collect data but will not be available as conversion actions in Google Ads.
One rule we follow: keep event names aligned with GA4's recommended events whenever possible. Using "purchase" instead of "completed_order" means GA4 automatically recognizes the event type and applies the right reporting templates. Custom event names work, but they require more manual configuration downstream.
Linking GA4 to Google Ads Properly
Linking GA4 to Google Ads is straightforward but has a few steps that are easy to miss. The link itself is created in GA4 under Admin, then Product Links, then Google Ads. You need admin access to both the GA4 property and the Google Ads account. Once linked, enable auto-tagging in Google Ads (Settings, Account Settings, Auto-tagging). This appends a gclid parameter to your ad URLs, which GA4 uses to match conversions back to specific clicks.
After linking, you need to import your GA4 key events into Google Ads as conversion actions. This happens in Google Ads under Tools, then Conversions, then Import. Select "Google Analytics 4 properties" and choose the key events you want to use for bidding. Not every GA4 event should be imported. Only import events that represent actual business value: purchases, qualified leads, signups. Importing micro-conversions like page views or scroll depth as primary conversion actions will confuse Smart Bidding.
Set the right counting method for each imported conversion. For ecommerce, use "Every" because each purchase is a separate conversion. For lead generation, use "One" because a single user submitting the same form three times is still one lead. Getting this wrong is one of the most common causes of inflated conversion numbers in Google Ads.
Check the conversion action category and make sure it matches the actual event type. A purchase event should be categorized as "Purchase," not "Other." This affects how Google Ads reports on your data and how Smart Bidding treats different conversion types in portfolio strategies.
The linking process can take up to 24 hours to start flowing data. Do not assume it is broken after one hour. Give it a full day, then verify by checking the Google Ads conversion reporting against GA4's real-time reports.
Attribution Settings That Affect Your Numbers
GA4 uses a data-driven attribution model by default. This means it distributes conversion credit across multiple touchpoints based on machine learning. If a user clicks your ad, visits your site, leaves, comes back through organic search, and then converts, the Google Ads click gets partial credit rather than full credit.
This is a meaningful change from last-click attribution, which gave 100% credit to the final touchpoint. For accounts that rely heavily on Google Ads ROAS reporting, the switch to data-driven attribution can make performance look different even when nothing about the campaigns has changed. ROAS might look lower because credit is being shared with other channels.
You can change the attribution model in GA4 under Admin, then Attribution Settings. The options are data-driven, last-click (paid and organic), or last-click (Google paid channels). For most accounts running Google Ads, data-driven is the right choice because it gives the most accurate picture of how ads contribute to conversions. But you need to know it is in effect, because comparing GA4 numbers to Google Ads numbers (which can use different attribution settings) will show discrepancies.
The conversion window also matters. GA4 defaults to a 30-day engaged-visit window and a 7-day engaged-view-through window. Google Ads has its own conversion window settings per conversion action. If these do not match, you will see different conversion counts in each platform for the same event. We recommend setting both to the same window. For most businesses, 30-day click-through and 1-day view-through is a reasonable starting point.
Attribution settings are not something you set once and forget. When you change campaign strategies, add new channels, or shift budget allocation, revisit attribution to make sure the model still reflects how your customers actually convert.
Testing and Validating Your Setup
Do not trust a GA4 implementation until you have personally verified that it is working. Here is the process we use for every new setup and every audit.
Start with GA4's DebugView. Enable debug mode in GTM by using the Preview function, then navigate through your site and complete a test conversion. DebugView will show you every event that fires, in real time, with all parameters attached. Check that your purchase or lead event fires exactly once on the confirmation page. Check that the parameters (transaction_id, value, currency) contain the correct values. If any parameter shows "not set," the data layer push is not configured correctly.
Next, check the Real-Time report in GA4. Navigate through your conversion flow in a normal browser (not GTM Preview mode) and confirm that the event appears. This verifies that the tag is firing in production, not just in debug mode. If the event shows in DebugView but not in Real-Time, the trigger conditions are likely too restrictive for the live environment.
Third, validate in Google Ads. Go to Tools, then Conversions, and check the status of your imported conversion actions. Each one should show "Recording conversions" with a recent timestamp. If it shows "No recent conversions," either the link between GA4 and Google Ads is not working, or the event is not marked as a key event in GA4.
Fourth, do a transaction ID check. Complete two test conversions with the same transaction_id. GA4 should only count it once. If it counts it twice, deduplication is not working, which means the transaction_id parameter is either missing or not being read correctly.
Finally, compare numbers across platforms for a 7-day window after launch. GA4 conversions, Google Ads conversions, and your backend sales data should be within 10-15% of each other. Larger gaps indicate a tracking issue that needs to be investigated. Perfect alignment is rare because of attribution differences, but anything beyond a 15% gap is a red flag.
Run this validation process after every significant change to your site, your GTM container, or your GA4 configuration. Tracking breaks silently and often. The only way to catch it is to check regularly.
Find Out What's Burning Your Budget
Our free Google Ads Audit checks 64 common account issues in 60 seconds. Conversion tracking, campaign structure, bidding strategy, and more.
Get Your Free Audit