google analytics5 min readBy Phloz team

GA4 conversions vs Google Ads conversions: what fires what (and why your numbers don't match)

Two conversion systems, two reporting surfaces, two attribution models. Here's the mental model that finally makes the numbers reconcile — and the four questions to ask before debugging the mismatch.

Every agency has had this conversation:

"GA4 says 38 conversions yesterday. Google Ads says 51. Which one's right?"

The honest answer is neither. They're measuring different things, with different rules, on different timelines, and the only reason they're ever close is luck. Once you accept that, the numbers stop being a bug to fix and start being two complementary signals to read.

This post is the mental model. The next time the numbers don't match, you'll know which of four things to check.

The two systems are not the same system

GA4 and Google Ads each have their own conversion tracking. They overlap. They are not the same. The four ways they differ:

1. What counts as a conversion

In GA4, a conversion event is any event you've marked as a key event in the property settings. purchase is a conversion in most setups, but so is generate_lead, sign_up, whatever your property has flipped on.

In Google Ads, a conversion action is a separately-defined object that lives in the Google Ads UI. It can be sourced from a GA4 conversion event (imported), from a Google Tag Manager tag firing the conversion template, from offline data uploads, or from a website tag fired directly. Each conversion action is independently configured for counting (one-per-click vs every), attribution model, lookback window, and value.

You can have a GA4 conversion event with no matching Google Ads conversion action. You can have a Google Ads conversion action that GA4 has never heard of. Most agencies have both.

2. Counting model

GA4 counts every qualifying event. Two purchases by the same user = 2 conversions.

Google Ads conversion actions default to "every" or "one" depending on what you picked at create time. "Every" matches GA4. "One" deduplicates per-click. The default for purchase-style actions is "every"; for lead-style actions it's "one." If you didn't think about this, you guessed.

3. Attribution and lookback

GA4 uses data-driven attribution across all sessions in its lookback (90 days for acquisition, 30 days for engagement, configurable in 4.1+). Conversion credit is distributed across touchpoints.

Google Ads conversion actions default to data-driven attribution too — but only across Google-owned touchpoints (Search, Display, YouTube, Shopping). It can't see the organic-social click that ran two weeks before. The lookback is set per conversion action, default 30 days for click and 1 day for view.

So a single purchase can credit:

  • GA4: 0.4 to organic, 0.3 to a Meta ad, 0.3 to a Google Ad
  • Google Ads: 1.0 to that Google Ad

Same purchase. Two correct numbers. Different reports.

4. Timing

GA4 attributes the conversion to the date the conversion event happened.

Google Ads conversion actions can attribute to the click date (default) or the conversion date. The default — click date — means a conversion that fires today from a click 12 days ago shows up in the historical row for 12 days ago. So "today's GA4 number" and "today's Google Ads number" don't even refer to the same day.

If you've never noticed this, look at the same week in both reports a month from now. The Google Ads numbers for that week will keep ticking up.

Four questions before you start debugging

When the numbers don't match — and they won't — go through these in order before you blame a pixel.

1. Are you comparing the same conversion definition on both sides?

Pull the GA4 key event list. Pull the Google Ads conversion action list. Map each Google Ads action to its source: imported from GA4, GTM tag, offline upload, direct website tag. Mismatches here are the most common cause and the easiest to find.

2. Are you using the same counting rule?

Open every Google Ads conversion action and check the "count" column. If it's "one," the GA4 number will be higher because GA4 counts every. If it's "every," they should at least be in the same ballpark.

3. Are you comparing the same date range under the same attribution rule?

Switch Google Ads to "conversion date" attribution for the comparison. Set both reports to last week, not last 7 days. Now the dates align.

4. Are you accounting for view-through?

Google Ads counts view-through conversions (someone saw the ad, didn't click, converted within the lookback). GA4 doesn't credit view-through. Subtract Google Ads view-through conversions before comparing to GA4. Most agencies forget this.

If you've done all four and the numbers still differ by more than 10%, now you have a tracking bug. Most of the time, you don't.

The audit checklist that keeps it sane

The reason this gets messy is that nobody documents which conversion is sourced from where. A clean audit looks like:

Conversion (GA4)Imported to Google Ads?GTM tag firing?Counting ruleNotes
purchaseYes (Purchase - GA4 imported)NoEvery
generate_leadNoYes (Lead form - direct)OneIndependent of GA4
sign_upYesNoEvery
view_pricingNoNoInternal only, GA4 reporting only

When that table exists, every "why don't the numbers match" question takes 30 seconds.

What this looks like as a graph

The reason we built Phloz's tracking map the way we did is exactly this problem. A spreadsheet of conversions can't express that the Google Ads Purchase action is imported from the GA4 purchase key event, which fires from the GTM purchase tag, which is triggered by the dataLayer push on the order-confirmation page.

A graph can. Click the GTM purchase tag node — see every downstream conversion action that depends on it. Change the dataLayer event name and you see, before you ship, what breaks.

Until you have that, the audit table above is the next-best thing. Build it once per client, keep it next to the tracking-map sheet, and the conversion-discrepancy conversation gets short.

The takeaway

GA4 and Google Ads were never going to give you the same number. They're not supposed to. They're two views of the same world with different rules.

What matters is that you can answer, for any conversion, where it came from, what counts it, and what attribution it uses. Once you can do that, you stop fighting the numbers and start reading them.