Why does GA4 show more key events than Google Ads conversions?
GA4 usually shows more because it counts key events (the actions GA4 treats as conversions) from every channel, dated to when they happen, while Google Ads counts only conversions from its own ads, dated to the ad click. That gap is normal, and the note on why GA4 and Google Ads numbers don't match lists the causes.
It is a setup fault, filed here as F-104, when a setting widens the gap. A non-sale, such as a scroll, marked as a key event inflates GA4. A purchase with no Google Ads tag and no GA4 import never reaches Ads at all. A purchase set to count only one conversion per ad click (Count: One) drops repeat orders. These last two leave Ads short.
The check: compare purchases for a closed month, using the Conv. (by conv. time) column in Google Ads, which dates sales to the purchase rather than the click. A gap that is an exact multiple, matches a second event's total, or appeared the day someone changed the settings is F-104.
Filed as F-104 · Key events & counting mis-set · How to catch it ↓ · The fix ↓
Seeing this on your account? Send me GA4 purchases, Google Ads conversions and real orders for one closed month →
F-104 (key events and counting mis-set) is Google Ads bidding on the wrong number because the switches that decide what counts as a conversion are set wrong. The tags fire correctly, but the business outcome was never marked as a key event (GA4's current name for a conversion), is counted on the wrong method, or reaches Ads through two primary conversion actions. It is not the normal gap between GA4 and Ads, where GA4 usually shows more: GA4 credits every channel and dates to the conversion, Ads credits its own clicks and dates to the click.
Symptom and cause
- Symptom
- The event fires, but the count is wrong: GA4 inflated by a non-sale marked as a key event, Google Ads missing a second order from the same ad click on Count: One, or a conversion counted twice or never imported.
- Cause
- The event was never marked as a key event, its GA4 counting method is wrong (Once per event where it should be Once per session, or the reverse), or its Google Ads Count is wrong (Every where it should be One, or the reverse). Either way, Ads imports the wrong set.
- Where it's caught
- GA4 Admin: the key-events list not matching what the business calls a conversion; the Ads conversion column disagreeing with GA4 for the same event.
How a correct fire becomes the wrong count
Four switches sit between a correct event and the number Google Ads' automated bidding (Smart Bidding) optimises on, and each one is set by hand. The first is the GA4 key-event flag: only key events can be imported into Google Ads (choosing a plain event in the import flow marks it as a key event on the way), so a purchase or lead that was never marked or imported never reaches it, and a scroll or file_download that was imported inflates it.
The second is the GA4 counting method. Once per event (the recommended default) counts every fire; Once per session (labelled Legacy) counts one per session, and it is the default for key events created from Universal Analytics goals, so migrated properties often still carry it on events where it is wrong.
The third is the Google Ads Count setting on the conversion action: Every counts each conversion after an ad interaction and suits sales, One counts a single conversion per ad click and suits leads. When the GA4 link shares conversions on Paid and organic channels attribution, that count is managed in GA4, not Ads.
The fourth is the goal status. In standard goals, only primary actions feed the Conversions column and bidding; secondary actions report in All conv. only (a secondary action inside a custom goal is still bid on). Google sets conversion actions based on GA4 key events to secondary to prevent counting the same event twice for bidding, but anyone can switch them to primary in Google Ads, and if the Google Ads tag is also primary for the same sale, every order is counted twice in the column the bid strategy reads.
None of this is the normal gap between GA4 and Ads. Ads dates a conversion to the ad click, GA4 to the moment it happened; Ads credits only its own ad interactions while GA4 credits every channel; Ads adds modelled and cross-device conversions on top of what it observed. Those differences are expected and do not need fixing. F-104 is the part of the gap someone configured.
| Conversion action · source | Status | Count | Conv. |
|---|---|---|---|
| Purchase · Google Ads tag | Primary | Every | 412 |
| purchase · GA4 import | Primary | Every | 398 |
| Conversions column (bidding reads) | 810 | ||
| Store orders · back office | 405 |
How to catch it
- Write down what the business actually calls a conversion (a paid order, a qualified lead, a booked call) before opening any tool. Then open GA4 Admin → Data display → Events, Key events tab, and set the list against it. Every business outcome should be there once, and nothing else should be: page_view, scroll, file_download or a generic form_start marked as a key event inflate whatever they are shared into.
- On the same Key events tab, read each key event's counting method. A purchase on Once per session (Legacy) under-counts a second order in the same visit; a generate_lead on Once per event counts a double-submitted form as two leads. If the property was migrated from Universal Analytics, expect the Legacy method on the old goals and check each one.
- In Google Ads, open Goals → Conversions → Summary and list every conversion action with its source and its status (Primary or Secondary), then open each action's settings to read its Count. Two primary actions measuring the same outcome, typically the Google Ads tag purchase and a GA4-imported purchase, is the core tell. Add the Conversions column and the All conv. column to the campaign view: if Conversions runs at roughly double the real orders, that is the pair being summed.
- Check the Count on each primary action against its job: Every for sales, One for leads. If the GA4 link shares conversions on Paid and organic channels attribution, read the count in GA4 instead, because Ads defers to it there.
- Separate the fault from the expected gap before calling it. Compare the same outcome over a closed window that ended long enough ago for late conversions to land, using Conv. (by conv. time) and All conv. (by conv. time) in Ads so both tools are dated to the conversion, not the click. A modest, stable gap is attribution scope and modelling, and is normal in either direction. A gap that is an exact multiple, an exact sum of two actions, or that appeared on the day someone touched the link or the goals, is F-104.
- Finish against the back office. Set the Conversions column for a window against real orders or CRM-qualified leads for the same window. The store and the CRM are the only counts that are not a setting.
What putting it right involves
- Fix the list first. Mark exactly one key event per business outcome in GA4 and unmark the rest. Engagement signals can stay as plain events, or be shared to Ads as secondary for observation, but they should not sit in the set that bidding reads.
- Set each counting method on purpose. Purchases on Once per event in GA4 and Every in Ads, with a stable transaction_id stopping the same order counting twice (that dedup work is F-101 and F-102, not this). Leads on Once per session in GA4 where a repeat submit is the same lead, and One in Ads. Changes apply to future data only, so note the date you made them.
- Keep one primary action per outcome. Choose either the Google Ads tag or the GA4 import as the primary source for each sale or lead and set the other to secondary, where it still reports in All conv. without feeding the bid, and check that no custom goal pulls the secondary one back into bidding. Which source you pick matters less than having exactly one. Make the switch in a quiet week and expect bidding to recalibrate for a while, because the number it optimises on has just changed.
- Check the GA4 link settings. In GA4 Admin → Product links → Google Ads links, confirm the right Ads account is linked, then in Advertising → Conversion management confirm which key events are shared and on which attribution setting, so you know whether counting is managed in GA4 or in Ads.
- Verify after a full cycle. Re-run the closed-window comparison: one primary action per outcome, the Conversions column tracking real orders or qualified leads within the normal attribution gap, and the change date written down so the next person reading the account knows why the line moved.
Sources on file
- GA4: About key event counting method (Once per event recommended; Once per session is Legacy and the default for migrated UA goals)support.google.com
- Google Ads: About conversion counting options (Every versus One; Paid and organic channels imports are counted in Analytics)support.google.com
- Google Ads: About primary and secondary conversion actions (only primary feeds the Conversions column and bidding)support.google.com
- Google Ads: Create conversions from Google Analytics events (secondary by default, to avoid counting the same event twice for bidding)support.google.com
- Google Ads: Understand your conversion tracking data (Conversions columns dated to the click; discrepancies with Analytics, often up to 20%, expected from different attribution models)support.google.com
Cited in these case files
F-104 turns up as evidence across the archive. It is cited in:
- SYMPTOM GA4 purchase event fires twice: how to find the second sender and fix it A GA4 purchase fires twice because two things send it for one order. On a website, GA4 drops a repeat with the same transaction_id, so the copies that reach your reports carry no ID or a different one. Find every sender with one test order, keep one, and send the order number as transaction_id.
- SYMPTOM Google Ads conversion value doesn't match actual revenue: reconcile it step by step Google Ads value below the store is normal: Ads counts only sales after its own ads. Above it usually means one of six things: another primary action carrying a value, value rules or new-customer value, refunds never uploaded, a tag value with tax, shipping or the wrong currency in it, a purchase counted twice, or a fixed value on every order.
- SYMPTOM Google Ads offline conversions not importing: what the upload errors mean Offline conversion upload rejected, or accepted with nothing in the reports? Each Google Ads upload error, what it means and the first fix: too old, invalid conversion times, too recent, action not active, wrong account, not hashed, format errors, unknown clicks. Plus where to find them and how long imports take.
- SYMPTOM GA4 and Google Ads numbers don't match: which gaps are normal and which are faults The hub for "GA4 and Google Ads don't match". It lists the seven gaps that are normal by design, then the shapes that are faults. The exact doubling from two primary actions and the GA4 import counting different events are both this code.
- FIELD NOTE Server-side vs web GTM: which is better for conversion accuracy? (2026) Server-side GTM runs your tags on a server you control instead of the browser, alongside web GTM, not instead of it. It is better only for ad-blocker loss, Safari cookie life and data control. It does not fix consent, duplicate purchases, wrong values or counting settings.
Questions on this file
Should Google Ads bid on the Google Ads tag or on the GA4 import?
On one of them, never both as primary for the same outcome. Both are valid sources. What breaks bidding is having the tag and the import both set to primary, because the Conversions column then sums them and every sale counts twice. Pick one per outcome, set the other to secondary so it still reports in All conv. (and keep it out of any custom goal), and write the choice down so nobody flips it back.
Should a key event count once per event or once per session?
It depends on what one occurrence means to the business. A purchase is worth counting every time, so Once per event, with a transaction_id to stop the same order counting twice. A lead form submitted twice in one visit is usually one lead, so Once per session fits. Google recommends Once per event and labels Once per session as Legacy, but the right answer is the one that matches how the business counts the outcome. The method applies to future data only.
Should my Google Ads conversion count be One or Every?
Every for sales, where one ad click can genuinely lead to several orders. One for leads, where three form submits from one click are still one prospect. Count One on ecommerce under-reports repeat buyers; Count Every on lead generation rewards the campaigns that attract double-submitters. If GA4 shares conversions on Paid and organic channels attribution, the count is managed in GA4, not in Ads.
Why did my Google Ads conversions double overnight?
Look first for a second primary action. The usual cause is a GA4-imported conversion being switched to primary while the Google Ads tag for the same sale was already primary, or a fresh GA4 link that brought key events in alongside an existing tag. Open Goals → Conversions → Summary, filter to primary, and look for two actions measuring the same outcome. If you find only one, it is likely a double fire at the tag instead, which is F-101.