# Why Your GA4, Meta and Google Numbers Don't Match

Your Meta, Google and GA4 conversion counts never agree. Here's why they conflict, which one to trust, and how to get one deduplicated number.

- Canonical: https://mbuzz.co/articles/platform-reports-dont-match
- Published: 2026-05-01
- Last updated: 2026-07-23
- Author: Holly Mehakovic, mbuzz (https://mbuzz.co)

---

> **TL;DR:** Platform reports conflict because each platform uses different attribution windows, takes credit for the same conversion, and can only see its own touchpoints. Google Ads uses 30-day click; Meta uses 7-day click, 1-day view. Both claim credit for overlapping journeys. The solution: use a neutral third-party attribution tool as your single source of truth, and treat platform data as directional for within-platform optimization only.


## The Problem: One Conversion, Three Claims

Here's a scenario every marketer has experienced:

<div class="not-prose my-8 bg-white border border-slate-200 rounded-lg overflow-hidden">
  <div class="px-5 py-3 border-b border-slate-200 bg-slate-50 flex items-center justify-between">
    <p class="text-xs font-bold text-slate-500 tracking-[0.15em]">ONE WEEK, FOUR REPORTS</p>
    <p class="text-xs font-bold text-emerald-700">Actual sales: 100</p>
  </div>
  <div class="px-5 py-5 space-y-2">
    <div class="flex items-center justify-between text-sm">
      <span class="text-slate-700">Google Ads</span>
      <span class="font-semibold text-slate-900">85</span>
    </div>
    <div class="flex items-center justify-between text-sm">
      <span class="text-slate-700">Meta Ads</span>
      <span class="font-semibold text-slate-900">45</span>
    </div>
    <div class="flex items-center justify-between text-sm">
      <span class="text-slate-700">Email</span>
      <span class="font-semibold text-slate-900">35</span>
    </div>
    <div class="flex items-center justify-between text-sm">
      <span class="text-slate-700">Organic Search</span>
      <span class="font-semibold text-slate-900">25</span>
    </div>
    <div class="flex items-center justify-between text-sm pt-2 mt-2 border-t border-slate-200">
      <span class="font-bold text-amber-700">Total claimed</span>
      <span class="font-bold text-amber-700">190 &nbsp;<span class="text-xs font-semibold">(90% overcount)</span></span>
    </div>
  </div>
</div>

You sold 100 products, but your platforms claim responsibility for 190. Someone is lying—or more accurately, everyone is telling their version of the truth.

This isn't a bug. It's how platform attribution works by design.

## Why Platforms Disagree

### 1. Different Attribution Windows

Each platform uses different time windows to claim credit:

| Platform | Click Window | View Window | Total Window |
|----------|-------------|-------------|--------------|
| **Google Ads** | 30 days | 1 day (optional) | Up to 90 days |
| **Meta Ads** | 7 days | 1 day | 7 days |
| **TikTok Ads** | 7 days | 1 day | 7 days |
| **LinkedIn Ads** | 30 days | 7 days | 30 days |
| **Email (typical)** | 30-90 days | N/A | Varies |
| **GA4** | Up to 90 days | N/A | Configurable |

Consider this journey:

<div class="not-prose my-8 flex flex-wrap items-stretch gap-2">
  <div class="flex-1 min-w-[130px] bg-indigo-50 border border-indigo-200 rounded-lg p-3">
    <div class="text-[10px] font-bold tracking-[0.15em] text-indigo-500 mb-1">DAY 1</div>
    <div class="text-sm font-semibold text-slate-900">Clicks Google Ad</div>
  </div>
  <div class="flex items-center text-slate-300 text-xl">&rarr;</div>
  <div class="flex-1 min-w-[130px] bg-indigo-50 border border-indigo-200 rounded-lg p-3">
    <div class="text-[10px] font-bold tracking-[0.15em] text-indigo-500 mb-1">DAY 15</div>
    <div class="text-sm font-semibold text-slate-900">Clicks Meta Ad</div>
  </div>
  <div class="flex items-center text-slate-300 text-xl">&rarr;</div>
  <div class="flex-1 min-w-[130px] bg-emerald-50 border border-emerald-200 rounded-lg p-3">
    <div class="text-[10px] font-bold tracking-[0.15em] text-emerald-600 mb-1">DAY 20</div>
    <div class="text-sm font-semibold text-slate-900">Converts</div>
  </div>
</div>

<div class="not-prose my-8 bg-white border border-slate-200 rounded-lg overflow-hidden">
  <div class="px-5 py-3 border-b border-slate-200 bg-slate-50">
    <p class="text-xs font-bold text-slate-500 tracking-[0.15em]">WHO GETS CREDIT?</p>
  </div>
  <div class="px-5 py-5 space-y-2">
    <div class="flex items-start gap-2 text-sm">
      <span class="text-emerald-600 font-bold">&#10003;</span>
      <span class="text-slate-700"><strong class="text-slate-900">Google Ads</strong> &mdash; within its 30-day click window</span>
    </div>
    <div class="flex items-start gap-2 text-sm">
      <span class="text-emerald-600 font-bold">&#10003;</span>
      <span class="text-slate-700"><strong class="text-slate-900">Meta Ads</strong> &mdash; within its 7-day click window</span>
    </div>
    <div class="flex items-start gap-2 text-sm pt-2 mt-2 border-t border-slate-200">
      <span class="text-amber-600 font-bold">&#8226;</span>
      <span class="text-slate-700"><strong class="text-amber-700">Reality</strong> &mdash; both touched the customer, one conversion occurred</span>
    </div>
  </div>
</div>

Both platforms legitimately claim this conversion under their own rules. Neither is wrong—they're just using different definitions.

### 2. Platforms Only See Their Own Touchpoints

Google can't see your Meta ads. Meta can't see your email campaigns. Each platform operates in a silo:

<div class="not-prose my-8 space-y-3">
  <div class="bg-white border border-slate-200 rounded-lg p-4">
    <div class="text-[10px] font-bold tracking-[0.15em] text-slate-500 mb-3">WHAT GOOGLE SEES</div>
    <div class="flex flex-wrap items-center gap-2">
      <span class="text-sm font-semibold text-indigo-700 bg-indigo-50 border border-indigo-200 rounded-md px-2.5 py-1">Google Ad</span>
      <span class="text-slate-300">&rarr;</span>
      <span class="text-sm text-slate-400 border border-dashed border-slate-300 rounded-md px-2.5 py-1">?</span>
      <span class="text-slate-300">&rarr;</span>
      <span class="text-sm text-slate-400 border border-dashed border-slate-300 rounded-md px-2.5 py-1">?</span>
      <span class="text-slate-300">&rarr;</span>
      <span class="text-sm font-semibold text-emerald-700 bg-emerald-50 border border-emerald-200 rounded-md px-2.5 py-1">Conversion</span>
    </div>
    <p class="text-xs text-slate-500 mt-3 italic">"We drove this conversion."</p>
  </div>
  <div class="bg-white border border-slate-200 rounded-lg p-4">
    <div class="text-[10px] font-bold tracking-[0.15em] text-slate-500 mb-3">WHAT META SEES</div>
    <div class="flex flex-wrap items-center gap-2">
      <span class="text-sm text-slate-400 border border-dashed border-slate-300 rounded-md px-2.5 py-1">?</span>
      <span class="text-slate-300">&rarr;</span>
      <span class="text-sm font-semibold text-pink-700 bg-pink-50 border border-pink-200 rounded-md px-2.5 py-1">Meta Ad</span>
      <span class="text-slate-300">&rarr;</span>
      <span class="text-sm text-slate-400 border border-dashed border-slate-300 rounded-md px-2.5 py-1">?</span>
      <span class="text-slate-300">&rarr;</span>
      <span class="text-sm font-semibold text-emerald-700 bg-emerald-50 border border-emerald-200 rounded-md px-2.5 py-1">Conversion</span>
    </div>
    <p class="text-xs text-slate-500 mt-3 italic">"We drove this conversion."</p>
  </div>
  <div class="bg-slate-50 border border-slate-300 rounded-lg p-4">
    <div class="text-[10px] font-bold tracking-[0.15em] text-slate-600 mb-3">WHAT ACTUALLY HAPPENED</div>
    <div class="flex flex-wrap items-center gap-2">
      <span class="text-sm font-semibold text-indigo-700 bg-indigo-50 border border-indigo-200 rounded-md px-2.5 py-1">Google Ad</span>
      <span class="text-slate-400">&rarr;</span>
      <span class="text-sm font-semibold text-pink-700 bg-pink-50 border border-pink-200 rounded-md px-2.5 py-1">Meta Ad</span>
      <span class="text-slate-400">&rarr;</span>
      <span class="text-sm font-semibold text-amber-700 bg-amber-50 border border-amber-200 rounded-md px-2.5 py-1">Email</span>
      <span class="text-slate-400">&rarr;</span>
      <span class="text-sm font-semibold text-emerald-700 bg-emerald-50 border border-emerald-200 rounded-md px-2.5 py-1">Conversion</span>
    </div>
  </div>
</div>

Platforms can only credit what they can see. The result is each claiming more credit than they deserve.

### 3. Self-Serving Attribution Logic

Platforms aren't neutral observers—they're selling you ads. Their attribution is designed to make their platform look effective:

| Platform Behavior | Effect |
|------------------|--------|
| **Google favors Google** | GA4 over-attributes to Google Ads in same-session scenarios |
| **Meta credits views** | 1-day view attribution claims credit for ads users merely saw |
| **Email claims last-touch** | Email platforms default to last-click, taking credit from earlier touches |
| **Each maximizes their number** | No platform has incentive to share credit fairly |

This isn't conspiracy—it's incentives. Platforms that show better ROAS get more ad spend.

*[Chart omitted from the text version: Platform self-reported conversions vs deduplicated truth. Each platform claims credit for the same conversion.]*


## The Real-World Impact

### Budget Misallocation

When you optimize budget based on platform data:

<div class="not-prose my-8 grid grid-cols-1 md:grid-cols-2 gap-3">
  <div class="bg-amber-50 border border-amber-200 rounded-lg overflow-hidden">
    <div class="px-4 py-3 border-b border-amber-200">
      <p class="text-[10px] font-bold tracking-[0.15em] text-amber-700">PLATFORM-REPORTED ROAS</p>
    </div>
    <div class="px-4 py-4 space-y-3">
      <div>
        <div class="flex items-center justify-between text-sm">
          <span class="text-slate-700">Google Ads</span>
          <span class="font-bold text-slate-900">4.2&times;</span>
        </div>
        <div class="text-xs text-amber-700 mt-0.5">&rarr; "Increase budget!"</div>
      </div>
      <div>
        <div class="flex items-center justify-between text-sm">
          <span class="text-slate-700">Meta Ads</span>
          <span class="font-bold text-slate-900">3.1&times;</span>
        </div>
        <div class="text-xs text-amber-700 mt-0.5">&rarr; "Maintain"</div>
      </div>
      <div>
        <div class="flex items-center justify-between text-sm">
          <span class="text-slate-700">Display</span>
          <span class="font-bold text-slate-900">0.8&times;</span>
        </div>
        <div class="text-xs text-amber-700 mt-0.5">&rarr; "Cut this!"</div>
      </div>
    </div>
  </div>
  <div class="bg-emerald-50 border border-emerald-200 rounded-lg overflow-hidden">
    <div class="px-4 py-3 border-b border-emerald-200">
      <p class="text-[10px] font-bold tracking-[0.15em] text-emerald-700">MULTI-TOUCH REALITY</p>
    </div>
    <div class="px-4 py-4 space-y-3">
      <div>
        <div class="flex items-center justify-between text-sm">
          <span class="text-slate-700">Google Ads</span>
          <span class="font-bold text-slate-900">2.8&times;</span>
        </div>
        <div class="text-xs text-slate-500 mt-0.5">overcredited by 50%</div>
      </div>
      <div>
        <div class="flex items-center justify-between text-sm">
          <span class="text-slate-700">Meta Ads</span>
          <span class="font-bold text-slate-900">2.2&times;</span>
        </div>
        <div class="text-xs text-slate-500 mt-0.5">overcredited by 40%</div>
      </div>
      <div>
        <div class="flex items-center justify-between text-sm">
          <span class="text-slate-700">Display</span>
          <span class="font-bold text-emerald-700">1.9&times;</span>
        </div>
        <div class="text-xs text-emerald-700 mt-0.5">undercredited by 140%</div>
      </div>
    </div>
  </div>
</div>

<div class="not-prose mb-8 -mt-1 bg-slate-50 border-l-4 border-amber-400 px-5 py-4 rounded-r-md">
  <p class="text-sm text-slate-700"><strong class="text-slate-900">Result:</strong> You cut Display, which was actually introducing customers that Google and Meta later converted.</p>
</div>

### The Attribution Arms Race

Platforms continuously adjust attribution to maintain perceived performance:

- Meta shortened their window from 28 days to 7 days (post-ATT) partly because shorter windows showed more immediate impact
- Google extended conversion windows and added data-driven attribution that favors Google touchpoints
- Each platform adds "modeled conversions" that estimate untracked activity—conveniently in their favor

You're not measuring marketing performance. You're measuring each platform's attribution marketing.

> **Warning:**
> **The 80% problem:** Industry research shows 80% of marketers are concerned about bias in AdTech reporting. They're right to be concerned—platform data is inherently biased toward the platform reporting it.

## How to Build a Single Source of Truth

### Option 1: Third-Party Attribution Tool (Recommended)

Use a neutral tool that sees all touchpoints and applies consistent logic:

**How it works:**
1. Track all touchpoints (ads, email, organic, direct) in one system
2. Apply a single attribution model across all channels
3. Deduplicate conversions—each sale counts once
4. Report consistent metrics across channels

**Benefits:**
- Unbiased cross-channel comparison
- Deduplicated conversion counts
- Consistent attribution windows
- Full journey visibility

**Limitations:**
- Additional cost
- Implementation required
- May not match platform optimization signals

#### What "implementation required" actually means

This is the objection that stops most teams, and the honest answer is that it depends
entirely on which route you take. The work is not the same across options:

| Route | What you actually do | Realistic time to first number |
|---|---|---|
| **Build it yourself** | Pipe ad-platform APIs and GA4 exports into BigQuery, write identity stitching, write the attribution logic, maintain it through every platform API change | Weeks to months of engineering, then ongoing maintenance |
| **Enterprise MTA** | Vendor-led implementation, data-warehouse integration, often a professional-services engagement before you see a dashboard | Typically weeks, plus procurement |
| **Server-side MTA on your own stack** | Install an SDK or point a server-side tag at the endpoint, send conversions, pick a model | Hours to days, depending on how your stack is set up |

None of these are zero. Anyone promising attribution with no setup is either running
client-side only (which is where the 30-40% data loss comes from) or reading numbers
straight out of the platforms, which is the problem you started with.

The useful question is not "does this require setup?" but **"is this less setup than
continuing to reconcile three dashboards by hand every month?"** For most teams
spending real money on media, it is.

### Option 2: Incrementality Testing

Measure true causal impact through experiments:

<div class="not-prose my-8 bg-white border border-slate-200 rounded-lg overflow-hidden">
  <div class="px-5 py-3 border-b border-slate-200 bg-slate-50">
    <p class="text-xs font-bold text-slate-500 tracking-[0.15em]">INCREMENTALITY TEST DESIGN</p>
  </div>
  <div class="px-5 py-5 space-y-3">
    <p class="text-sm text-slate-700"><strong class="text-slate-900">Question:</strong> does Meta actually drive incremental revenue?</p>
    <p class="text-sm text-slate-700"><strong class="text-slate-900">Setup:</strong> 50% of geos paused (control), 50% running normal Meta spend (treatment). 4 weeks.</p>
    <div class="grid grid-cols-2 gap-3 mt-4">
      <div class="bg-slate-50 border border-slate-200 rounded-md p-3">
        <div class="text-[10px] font-bold tracking-[0.15em] text-slate-500 mb-1">RESULT</div>
        <ul class="text-sm text-slate-700 space-y-1">
          <li>Treatment revenue: <strong>$500,000</strong></li>
          <li>Control revenue: <strong>$420,000</strong></li>
          <li>Incremental lift: <strong>$80,000 (19%)</strong></li>
          <li>Meta spend: <strong>$50,000</strong></li>
          <li class="pt-1 border-t border-slate-200 mt-2 text-emerald-700"><strong>True iROAS: 1.6&times;</strong></li>
        </ul>
      </div>
      <div class="bg-amber-50 border border-amber-200 rounded-md p-3">
        <div class="text-[10px] font-bold tracking-[0.15em] text-amber-700 mb-1">META-REPORTED</div>
        <div class="text-3xl font-bold text-amber-700 mb-2">3.1&times;</div>
        <div class="text-xs text-amber-700">Over-credited by <strong>94%</strong> &mdash; the platform claims nearly twice the lift the experiment shows.</div>
      </div>
    </div>
  </div>
</div>

Incrementality tests reveal what each platform actually causes, not just what it touches.

### Option 3: Marketing Mix Modeling (MMM)

Use aggregate data and econometrics to estimate channel contribution:

**Best for:**
- High spend ($500K+/year)
- Mix of online and offline channels
- Strategic planning (not tactical)

**How it helps reconciliation:**
- Estimates total channel impact independent of platform reporting
- Accounts for brand effects, seasonality, competition
- Provides calibration factors for platform data

*[Chart omitted from the text version: Reconciliation framework as a worked table: the 4 calibration layers (columns) applied to each channel (rows).]*


## Practical Reconciliation Workflow

### Step 1: Establish Baseline Discrepancy

Document how much platforms over-report:

```sql
-- Compare platform-reported vs actual conversions
SELECT
  date_trunc('week', conversion_date) as week,
  SUM(google_reported) as google_claims,
  SUM(meta_reported) as meta_claims,
  SUM(email_reported) as email_claims,
  SUM(actual_conversions) as actual,
  (SUM(google_reported) + SUM(meta_reported) + SUM(email_reported))
    / NULLIF(SUM(actual_conversions), 0) as overcount_ratio
FROM conversion_reconciliation
GROUP BY 1
ORDER BY 1 DESC;
```

Typical result: 1.4x to 2.0x overcounting.

### Step 2: Apply Discount Factors

Create platform-specific discount factors based on historical overcounting:

| Platform | Typical Overcredit | Discount Factor |
|----------|-------------------|-----------------|
| Google Ads | 30-50% | 0.70 |
| Meta Ads | 40-60% | 0.60 |
| Email | 50-70% | 0.50 |
| Display | -50% (undercredited) | 1.50 |

**Warning:** These are rough averages. Your actual factors depend on your funnel, customer behavior, and channel mix. Calculate your own from historical data.

### Step 3: Use Each Data Source Appropriately

| Decision Type | Data Source | Why |
|--------------|-------------|-----|
| **Cross-channel budget allocation** | Third-party MTA | Unbiased, deduplicated |
| **Google Ads bid optimization** | Google Ads | Platform-specific signals |
| **Meta creative testing** | Meta Ads | Platform-specific signals |
| **Executive reporting** | Third-party MTA | Defensible, consistent |
| **Quarterly planning** | MMM + Incrementality | Strategic, causal |

Don't try to make platforms agree. Use each data source for what it's good at.

### Step 4: Validate with Holdout Tests

Quarterly, validate your reconciliation with incrementality tests:

<div class="not-prose my-6 bg-slate-50 border-l-4 border-slate-400 px-5 py-4 rounded-r-md">
  <p class="text-xs font-bold text-slate-500 tracking-[0.15em] mb-2">QUARTERLY VALIDATION TEST</p>
  <p class="text-sm text-slate-700 mb-2">Pick one channel. Run a geo-holdout. Compare the three numbers:</p>
  <ul class="text-sm text-slate-700 space-y-1 list-none pl-0">
    <li>Platform-reported contribution: <strong>25%</strong></li>
    <li>MTA-calculated contribution: <strong>18%</strong></li>
    <li>Incrementality-measured: <strong class="text-emerald-700">15%</strong> &larr; ground truth</li>
  </ul>
  <p class="text-sm text-slate-700 mt-2">MTA is closer to truth than the platform data. Adjust discount factors accordingly and re-run quarterly.</p>
</div>

## What NOT to Do

### Don't Sum Platform Numbers

<div class="not-prose my-8 grid grid-cols-1 md:grid-cols-2 gap-3">
  <div class="bg-white border border-amber-200 rounded-lg p-4">
    <div class="flex items-center gap-2 mb-2">
      <span class="text-amber-600 font-bold">&times;</span>
      <span class="text-[10px] font-bold tracking-[0.15em] text-amber-700">WRONG</span>
    </div>
    <p class="text-sm text-slate-700">"Google (85) + Meta (45) + Email (35) = <strong class="text-amber-700">165 conversions</strong>"</p>
  </div>
  <div class="bg-white border border-emerald-200 rounded-lg p-4">
    <div class="flex items-center gap-2 mb-2">
      <span class="text-emerald-600 font-bold">&#10003;</span>
      <span class="text-[10px] font-bold tracking-[0.15em] text-emerald-700">RIGHT</span>
    </div>
    <p class="text-sm text-slate-700">"We had <strong class="text-slate-900">100 conversions</strong>. MTA credits Google 35%, Meta 28%, Email 22%, Organic 15%."</p>
  </div>
</div>

### Don't Pick the Highest Number

Some teams use "whichever platform claims the conversion." This systematically over-credits bottom-funnel and always distorts the picture.

### Don't Ignore the Problem

Using platform data "because it's what we have" leads to systematic misallocation. The effort to build a single source of truth pays back in better decisions.

### Don't Expect Platforms to Agree

They have different incentives, different windows, different visibility. Reconciliation isn't about making them match—it's about building your own truth.

<div class="bg-slate-50 border-l-4 border-slate-400 p-5 my-8 rounded-r-md not-prose">
  <p class="text-xs font-bold text-slate-500 tracking-[0.15em] mb-3">A WORKED EXAMPLE</p>
  <p class="text-sm text-slate-700 leading-relaxed mb-3">A DTC brand pulls reports from Meta, Google, TikTok, and Klaviyo. Each says it drove the strongest week. Summed, the four platforms claim 162 conversions for a week that produced 100 actual orders. Every platform optimization algorithm is bidding harder for the same buyers, and nobody can tell which platform is the marginal driver.</p>
  <p class="text-sm text-slate-700 leading-relaxed">After deploying server-side multi-touch attribution that dedupes the orders across platforms, the picture changes: Klaviyo's email flow is mostly closing already-won customers, Display is doing more sourcing than any platform credited it for, and TikTok's reported ROAS is inflated by 50%+ from view-through claims that don't survive the dedupe. Six weeks of reallocation later, blended ROAS is up 18% on flat spend &mdash; the same dollars buying more incremental orders because they're going to the channels that earn them.</p>
</div>

## Summary

Platform attribution data conflicts because:

1. **Different windows** — Google uses 30 days, Meta uses 7 days
2. **Siloed visibility** — Each platform only sees its own touchpoints
3. **Self-serving logic** — Platforms are incentivized to maximize their claimed value

**What to do:**

| Action | Purpose |
|--------|---------|
| Use third-party MTA | Unbiased, deduplicated cross-channel view |
| Calculate discount factors | Adjust platform data for overcounting |
| Run incrementality tests | Validate true causal impact |
| Match data source to decision | Platform data for within-platform; MTA for cross-channel |

**Never sum platform-reported conversions.** They're each telling their version of the truth, and those versions overlap.

## Further Reading

**On Building Your Source of Truth:**
- [What is Multi-Touch Attribution?](/articles/what-is-multi-touch-attribution) — The cross-channel solution
- [MTA vs MMM](/articles/mta-vs-mmm) — Complementary measurement approaches

**On Platform-Specific Issues:**
- [Why Did GA4 Remove Attribution Models?](/articles/ga4-attribution-models-removed) — Google's attribution changes
- [Last-Touch Attribution](/articles/last-touch-attribution) — Why platform defaults mislead

## Key takeaways

- Platforms use different attribution windows (Google 30-day, Meta 7-day)
- Each platform only sees its own touchpoints—they can't see the full journey
- Adding up platform-reported conversions always exceeds actual conversions
- Use third-party attribution for cross-channel decisions; platform data for within-channel optimization


## FAQ

**Why does Google Ads show more conversions than I actually have?**

Google Ads uses 30-day click attribution and may count view-through conversions. If someone clicked an ad 25 days ago then converted, Google claims it. If they also clicked a Meta ad 5 days ago, Meta claims the same conversion. Both report it, but it's one actual sale.

**Should I trust Google Analytics or Google Ads data?**

They measure differently. Google Ads uses campaign-centric attribution optimized for bidding. GA4 uses session-based attribution across all channels. For cross-channel decisions, GA4 is less biased. For Google Ads optimization, use Google Ads data. For unbiased measurement, use neither—use a third-party tool.

**How do I know which platform actually drove the conversion?**

You often can't know with certainty from platform data alone. The customer likely saw multiple touchpoints. Use multi-touch attribution to distribute credit fairly, or run incrementality tests to measure each platform's true causal impact.

**Why do my total conversions from all platforms exceed my actual sales?**

Because platforms double-count. If a customer clicked Google, then Meta, then converted—both platforms claim 100% credit. Summing platform data always overcounts. This is why you need a deduplicated source of truth.

**Can I just pick one platform as my source of truth?**

Not recommended. Each platform is biased toward crediting itself. GA4 is less biased but still limited. The best approach is a neutral third-party tool that sees all touchpoints and applies consistent attribution logic.

**How much engineering work does third-party attribution actually require?**

It depends on the route. Building it yourself in BigQuery means weeks to months of engineering plus ongoing maintenance through every platform API change. An enterprise MTA implementation is usually vendor-led and takes weeks, often with a professional-services engagement first. Installing a server-side SDK or pointing a server-side tag at an attribution endpoint is typically hours to days. None of these are zero setup. Any tool claiming zero setup is either client-side only, which loses 30-40% of touchpoints to ad blockers and privacy features, or it's reading numbers straight from the ad platforms, which is the double-counting problem you were trying to solve.

**Is there an attribution tool that doesn't require engineering help?**

Not honestly, if you want deduplicated cross-channel numbers. Accurate attribution needs server-side data collection, and server-side collection means something on your servers sends the events. The realistic comparison is not setup versus no setup, it's a few hours of instrumentation versus continuing to manually reconcile three conflicting dashboards every month. If you have a developer who can add an SDK or configure a server-side tag, you have enough. If you have nobody who can do that, a marketer-friendly tool reading platform APIs will still inherit the platforms' double-counting.


