Analytics

How do you reconcile GA4, Meta and Google Ads numbers honestly?

No tool gives one true number. To reconcile GA4, Meta and Google Ads, match the dates, time zone, conversion event and each platform's attribution setting, split clicks from views and anchor on the brand's own orders. Then explain the steady gap, investigate any sudden change and show each number side by side, never merged.

2.13× Meta ROAS on ₹28,064 spend for Moolwan, as Meta reports it, shown next to GA4 and never mergedai-dm · Paid ads · 30 days to 26 Sep 2026 · real data

What you'll see in 10 minutes

  1. Your first brand's report, built from its domain alone.
  2. Its Meta, Google Ads and GA4 accounts connected, one secure sign-in each.
  3. Each platform's own number side by side for the same dates, with how it was counted and the record behind it.

(login required) · No plan to pick. Billed in USD and INR. Nothing changes without your approval.

What happens when a brand adds up its platforms' numbers?

The Monday review goes wrong in one sentence. The founder has opened Meta Ads Manager, Google Ads and GA4 for the same week. Meta claims more purchases than the store recorded. Google Ads claims a share of the same orders. GA4 shows fewer than either. The founder adds Meta and Google Ads together, finds a total well above the real orders, and asks which number the agency made up.

The cost is trust, not just time. An account manager who can't explain the gap starts defending numbers instead of discussing the next move. A brand that suspects the agency quotes whichever figure looks best stops believing any of them, including the good ones. The common fixes make it worse: picking one platform as "the truth", quietly adjusting a number, or promising a tool that will produce one correct figure.

The gap has causes you can name. Each platform is counting correctly by its own rules. Once you know the rules, most of the gap stops being a mystery and becomes something you can show the brand on one page. This guide covers why the numbers differ, how to put them side by side, which gaps are normal and what to say.

Why do GA4, Meta and Google Ads count the same sale differently?

Three systems, three sets of rules. Meta and Google Ads count the conversions they can connect to their own ads. GA4 counts what happened on the brand's site and shares the credit across every channel that sent the visitor, including organic search, email and AI assistants. None of them sees the whole journey. These are the differences that matter most.

Attribution windows

An attribution window is how long after an ad click or view a conversion can still be credited to that ad. Meta's default setting is 7 days after a click and 1 day after a view. Google Ads sets a conversion window on each conversion action, 30 days after a click by default. GA4 uses a key event lookback window, which is 90 days by default for purchases and other key events, according to Google's help page on GA4 attribution settings. A buyer who clicks an ad on day one and buys on day twenty can count in Google Ads and GA4 but not in Meta.

Click-through and view-through

Meta can credit a purchase to someone who saw an ad and didn't click it. That conversion is real to Meta, but GA4 has no record of the ad, so it credits the visit to whatever channel brought the buyer to the site, such as direct or organic search. Brands that spend heavily on video and reels often see a large view-through share, which is one reason Meta reads higher than GA4.

Which day a conversion belongs to

Google Ads dates a conversion to the day of the ad click in its main Conversions column, and offers separate "by conversion time" columns for when the conversion actually happened, as Google explains in understanding your conversion tracking data. GA4 records the purchase on the day it happened. Meta's reports can also credit results to the day of the ad interaction rather than the day of the purchase, so check which basis a report uses. The effect: last week's Google Ads number keeps rising for days as late conversions arrive, while GA4's stays put.

Time zones and currency

Each ad account has its own time zone, set when the account was created and hard to change later. A Meta account set to a US time zone and a GA4 property on Indian time split the same day at different hours, so daily totals never line up. Currency causes the same trouble for revenue: an ad account billed in USD and a GA4 property reporting in INR will disagree on ROAS until both are in one currency at a stated rate.

Conversion definitions

"Conversion" means whatever each account was set up to count. In Google Ads, check which conversion actions are primary, and whether each counts every conversion or one per click. In GA4, check which events are marked as key events. In Meta, check that the campaign optimises for the Purchase event and not add-to-cart or a custom event. Comparing purchases in one tool with all key events in another is the most common cause of a gap that is simply wrong.

Consent, ad blockers and modelled conversions

When a visitor declines analytics cookies or uses an ad blocker, GA4 may not record the visit. With consent mode in place, GA4 can estimate some of that behaviour, but only for user and session metrics, only when its model is confident and only with the blended reporting identity selected, as Google sets out in behavioural modelling for consent mode. Ad platforms also estimate some conversions they can't observe directly. Every platform's number is partly measured and partly modelled, and none of them labels the split clearly in the main view.

Duplicate and missing events

Many D2C sites send Meta purchase events from both the browser pixel and the server through the Conversions API. Meta removes duplicates only when both copies carry the same event name and event ID, and only within 48 hours of the first, according to Meta's guide to handling duplicate pixel and Conversions API events. A missing event ID can quietly double Meta's purchases. A thank-you page that doesn't always load can quietly lose GA4's.

Cross-device journeys

A buyer who sees an ad in the Instagram app on a phone and buys later on a laptop is one person to Meta, which can match logged-in users across devices. GA4 only joins those visits when the brand sends a user ID or Google can link the devices, so it often records two strangers instead. Ad platforms with logged-in users tend to connect more of these journeys than site analytics can.

GA4's own attribution settings

GA4's reporting attribution model decides how credit for a key event is shared across channels, and changing it rewrites historical reports too. Google retired the first click, linear, time decay and position-based models in November 2023, leaving data-driven and last click options. The same page sets which channels can receive credit: GA4 reports default to paid and organic channels, while conversions shared with Google Ads default to Google's paid channels. Note the setting before you compare: two people looking at the same property with different settings will see different numbers.

How do you put the three numbers side by side, step by step?

Make them comparable first, then explain what's left. Most of the gap disappears once the dates, the event and the windows match. Work through these steps once for each brand and keep the result as a short note. Next month it takes minutes.

Write down each platform's settings

Before you pull a number, record the attribution setting in Meta, the conversion window and counting option for each primary conversion action in Google Ads, and the reporting attribution model and lookback window in GA4. Add each account's time zone and currency. Without this list, nobody can check the comparison later.

Use one date range and full weeks

Pick the same date range in all three, in whole weeks, and avoid the most recent few days, when late conversions are still arriving. Single days are noise when time zones differ.

Compare one event

Choose the action that matters to the brand, usually the purchase, and compare only that. Leave add-to-carts, leads and sign-ups out of the conversion column for this exercise.

Split Meta's clicks from views

Break Meta's results down by click-through and view-through. The view-through share is the part GA4 will never see, so it explains much of the gap on its own.

Use Google Ads' conversion-time columns

When comparing Google Ads with GA4, add the "by conversion time" columns so both count the purchase on the day it happened.

Anchor on the brand's own orders

Ask the brand for its order count from the store for the same dates. It is the closest thing to a reference. GA4 usually sits below it. Meta and Google Ads added together usually sit above it, because both can claim the same sale.

Track each platform's share of orders over time

Express each platform's count as a percentage of the brand's orders and record it every week. The level of each share is how that platform counts. A change in the share is the signal.

The example shows the point of the method: the levels look alarming, but they are steady. The one number that moved is the one to investigate. When it does, treat it as a change with a cause and find why the brand's numbers moved before the next report.

Which gaps are normal, and what usually causes each?

Most gaps fall into a few patterns. Use this table to name the likely cause before you start digging. It describes the direction a gap usually takes, not a size, because the size depends on each brand's settings, consent rates and channel mix.

What you see Likely cause What to check
Meta is well above GA4 every week View-through purchases and a 7-day click window Meta results split by click and view
Meta and Google Ads together exceed store orders Both platforms crediting the same sale Never add them up; compare each with orders
Last week's Google Ads number keeps rising Conversions dated to the click, arriving late The "by conversion time" columns
Daily totals never match, weekly totals nearly do Different time zones on the accounts Each account's time zone setting
GA4 is below store orders Consent choices, ad blockers, in-app browsers, a thank-you page that doesn't always load Consent mode setup and the purchase tag
Meta purchases suddenly double Pixel and Conversions API events without a shared event ID Event IDs on both copies of the purchase event
GA4 channel totals change for past months Someone changed the reporting attribution model GA4 attribution settings and change history
Google Ads conversions jump with no change in orders A new primary conversion action, or "every" counting Primary actions and the count setting
GA4 shows sales from sources the ads never touched GA4 shares credit with every channel The channel report; for example, Moolwan's GA4 shows 368 new users from chatgpt.com (GA4 · First user source · 29 Jun–26 Sep 2026)

Swipe the table sideways to see every column.

If a gap doesn't fit any row, write down what changed in the accounts that week. Most unexplained jumps follow an edit someone forgot to mention, and a record of each number's source makes them quick to find. You can trace every number to its source record instead of relying on screenshots.

What should you tell the brand about the gap?

Explain it once, in plain words, before the brand asks. The aim is to replace "which number is right" with "here is how each one counts, and here is what moved". Send it with the first report after onboarding and repeat it whenever a share changes.

Keep the script short and specific to the week. Name the one share that moved and what you're doing about it. When the explanation goes into a report, keep each figure's source and counting method with it, and send white-label reports under your agency's name so the brand sees the same explanation every month.

Is there one true number that settles it?

No, and it's better to say so. No tool gives one single true number for how many sales an ad produced. Every platform's figure is true to its own window, its own date rule and its own mix of measured and modelled conversions. A merged figure doesn't remove those assumptions; it hides them inside a model the brand can't check. Incrementality tests, such as a holdout or lift test, answer a different question and need their own design.

How ai-dm handles it. ai-dm shows each platform's own number side by side for the same dates, each with its attribution setting, its source and the record it came from. It tracks each platform's ratio to GA4 every day and flags a ratio that leaves its normal range. It does not do attribution modelling, and it never adjusts one platform's number to match another. You can see how it works in GA4, Meta and Google Ads reconciliation.

On our own brand. Moolwan, the Bengaluru D2C home décor brand the ai-dm founders run, shows a Meta ROAS of 2.13× on ₹28,064 of spend in the 30 days to 26 September 2026, against a 4× benchmark (ai-dm · Paid ads). That is Meta's own figure, as Meta counts it, and it is below benchmark. We show it next to GA4 for the same dates and are investigating why, rather than choosing a model that would make it look better.

What should you do this week?

Start with one brand and one page of notes. The first reconciliation takes an afternoon; every one after that is a quick check against last week.

Do this for the brand whose numbers cause the most questions, then repeat it for the rest. When the shares are recorded every week, the Monday review stops being a debate about which number is right and becomes a conversation about what to do next.

Questions agencies ask

Why do GA4, Meta and Google Ads show different conversions for the same brand?

Each platform counts with its own attribution window, its own rule for which day a conversion belongs to and its own definition of a conversion. Meta also credits some purchases after an ad view, which GA4 cannot see, and consent choices and ad blockers hide some visits from GA4.

Which number should we report to the brand?

Report each platform's own figure with how it was counted, next to the brand's own order count for the same dates, and explain the gap. Never add Meta and Google Ads together, because both can claim the same sale.

How do we know if a gap between platforms is a problem?

Track each platform's count as a share of the brand's orders every week. A share that stays steady is how that platform counts. A share that suddenly moves usually means something changed in tracking, settings or the site, and it should be checked before the next report.

Can any tool give one true conversion number?

No. Every number is true to its own rules, and a merged figure only replaces those rules with a model's assumptions. The honest approach is to show each platform's number with its evidence and explain the differences.

Does ai-dm do attribution modelling?

No. ai-dm shows GA4, Meta and Google Ads numbers side by side for the same dates, each with its source, attribution setting and the record behind it, and flags a gap that leaves its normal range. It does not build attribution models or merge the numbers into one.

Compare a brand's numbers side by side

No plan to pick. Billed in USD and INR. A brand's data is deletable on request.

Win the why.™

Every number that moves has a reason. Dashboards show what happened; they rarely show why. Without the why, teams guess, act late and lose trust. ai-dm exists to Win the why for every brand, every day: to find the reason behind every change, prove it with evidence, recommend the next move and check that it worked. Then it starts again, because the why keeps changing. When you Win the why, you stop guessing and start growing. That is why we exist.

Gather. Analyse. Detect. Alert. Recommend. You act. Monitor. Learn and repeat. Always on.

Built on our own brand first.

Talk to the founder