How to Deduplicate Conversions Across Platforms

Running Meta, Google, and TikTok simultaneously? Your conversion counts are inflated. Here's how to deduplicate across platforms without losing real data.

conversion deduplicationMetaGoogle AdsTikTokattributionconversion tracking

You’re running Google Ads, Meta Ads, and TikTok Ads. Last month Google reported 150 purchases, Meta reported 130 purchases, and TikTok reported 45 purchases. That’s 325 platform-reported conversions. Your actual order count? 180.

This isn’t a bug — it’s how platform attribution works. Each platform takes credit for any conversion it touched, even if another platform also touched it. A customer who clicked a Google ad on Monday and a Meta ad on Tuesday counts as a conversion in both platforms.

This guide covers how to deduplicate conversions so you know what’s real and can make accurate budget decisions.

Why Platforms Over-Count

The Attribution Overlap Problem

Each ad platform uses its own attribution window and model:

PlatformDefault Click WindowDefault View WindowModel
Google Ads30 days1 dayData-driven
Meta Ads7 days click, 1 day view1 dayLast touch (within Meta)
TikTok Ads7 days click, 1 day view1 dayLast click
Microsoft Ads30 days1 dayLast click

When a customer interacts with multiple platforms before buying, every platform that falls within its attribution window claims the conversion. Nobody is lying — they’re just answering different questions.

Google asks: “Did this user click a Google ad in the last 30 days?” Meta asks: “Did this user click a Meta ad in the last 7 days?” TikTok asks: “Did this user click a TikTok ad in the last 7 days?”

If the answer is “yes” for all three, all three claim the sale.

The Pixel + CAPI Double-Count

Even within a single platform, you can double-count. If you’re running Meta Pixel alongside Conversions API without proper deduplication, Meta receives two events for the same conversion — one from the browser, one from your server.

Meta deduplicates these using event_id, but only if you send the same event_id in both the Pixel and CAPI events. If you don’t, Meta counts it twice.

The Multi-Tag Problem

Some sites have conversion tags firing more than once per transaction:

  • Thank-you page reloads (user refreshes the confirmation page)
  • Multiple GTM tags for the same platform
  • Both native Shopify integration AND custom pixel firing
  • Redirect chains that load the conversion page twice

Level 1: Deduplicate Within Each Platform

Before solving cross-platform overlap, make sure each platform isn’t double-counting on its own.

Transaction IDs (Required)

Every conversion event should include a unique transaction ID. This is the single most important deduplication mechanism.

Google Ads:

<!-- In GTM, set transaction_id on the conversion tag -->
Transaction ID: {{transactionId}}

Meta Pixel:

fbq('track', 'Purchase', {
  value: 99.99,
  currency: 'USD'
}, { eventID: 'order_12345' });

Meta CAPI:

{
  "event_name": "Purchase",
  "event_id": "order_12345",
  "custom_data": {
    "value": 99.99,
    "currency": "USD"
  }
}

TikTok:

ttq.track('CompletePayment', {
  content_type: 'product',
  value: 99.99,
  currency: 'USD'
}, { event_id: 'order_12345' });

The event_id / transaction_id must be identical across browser and server events for the same platform. Use your order ID — it’s already unique.

Prevent Thank-You Page Reloads

When a customer refreshes the thank-you page, conversion tags fire again. Three fixes:

  1. One-time flag: Set a cookie or sessionStorage flag after the first fire. Check it before firing again.
if (!sessionStorage.getItem('conversion_fired_order_12345')) {
  // Fire conversion tags
  sessionStorage.setItem('conversion_fired_order_12345', 'true');
}
  1. Redirect after conversion: Redirect from /thank-you?order=12345 to /thank-you (no order param). Only fire tags when the order param exists.

  2. Server-side only: Skip browser tags entirely. Fire conversions server-side only, where you control whether the event sends once.

Audit Your Tags

Check for duplicate implementations:

  • Two GA4 tags (one from Shopify, one from GTM)
  • A Meta Pixel in the theme code AND in GTM
  • Native platform integrations AND custom pixel code

Run a GTM container audit to find these. If your GA4 conversion numbers don’t match Google Ads, duplicate tags are a common cause.

Level 2: Establish a Single Source of Truth

Cross-platform deduplication requires one system that sees all conversions and knows which ones are real.

Option A: GA4 as Source of Truth

GA4 counts each conversion once (assuming you’ve deduplicated within GA4). Use it as the arbiter:

How it works:

  1. GA4 tracks all purchases with a unique transaction_id
  2. GA4 deduplicates automatically — same transaction_id = one conversion
  3. Compare platform-reported conversions against GA4
  4. The difference is your overlap/inflation

Example:

SourceReported PurchasesRevenue
Google Ads150$15,000
Meta Ads130$13,000
TikTok Ads45$4,500
GA4 (actual)180$18,000
Platform sum325$32,500
Inflation ratio1.81x1.81x

Platforms are collectively over-counting by 81%. This doesn’t mean any platform is “wrong” — it means 145 conversions were touched by more than one platform.

Limitation: GA4 uses its own attribution model. It doesn’t tell you which platform “deserves” credit — just how many actual conversions occurred.

Option B: Your Backend / Order System

The most accurate source of truth is your own order database.

How it works:

  1. Export order data from Shopify, WooCommerce, or your custom system
  2. For each order, check which platform’s click ID or UTM is attached
  3. Count unique orders, not platform-reported conversions

What to capture per order:

  • Order ID (your internal ID)
  • Revenue
  • UTM source/medium/campaign (from the converting session)
  • gclid (Google click ID)
  • fbclid (Meta click ID)
  • ttclid (TikTok click ID)

If an order has both a gclid and fbclid, the customer interacted with both platforms. Your backend can decide attribution based on last click, first click, or whatever model you choose.

Option C: Server-Side Tracking Hub

The most sophisticated approach: route all conversion events through a single server-side endpoint that deduplicates before forwarding to platforms.

Customer Purchases

Your Server (single event)

  ┌────┼────────┐
  ↓    ↓        ↓
Google Meta  TikTok
(CAPI) (CAPI) (Events API)

Each platform receives exactly one event per conversion. Your server controls deduplication, not the platforms.

Benefits:

  • No double-counting possible (server sends once per order)
  • No thank-you page reload problem (server-side, not browser)
  • Better data quality (server knows the real order value)
  • Server-side tracking recovers conversions blocked by ad blockers

Implementation: This is what server-side GTM (sGTM) does. Your browser sends one event to your sGTM server, which fans it out to Google, Meta, TikTok, etc. — each with proper deduplication IDs.

Level 3: Cross-Platform Attribution

Deduplication tells you the real count. Attribution tells you who gets credit.

Blended ROAS

The simplest cross-platform metric: total revenue divided by total ad spend.

Blended ROAS = $18,000 revenue / ($5,000 Google + $3,000 Meta + $1,000 TikTok)
            = $18,000 / $9,000
            = 2.0x

This avoids the attribution question entirely. If blended ROAS is healthy, the mix is working.

Platform-Reported ROAS (With Discount)

Apply the inflation ratio to each platform’s reported conversions:

Inflation ratio: 1.81x (325 reported / 180 actual)

Google Ads adjusted: 150 / 1.81 = 83 conversions
Meta Ads adjusted: 130 / 1.81 = 72 conversions
TikTok Ads adjusted: 45 / 1.81 = 25 conversions
Total adjusted: 180 (matches actual)

This is a rough heuristic — it assumes overlap is evenly distributed, which it isn’t. But it’s better than taking platform numbers at face value.

Multi-Touch Attribution

For the most accurate picture, implement multi-touch attribution that distributes credit across touchpoints. This requires tracking the full customer journey, not just the converting session.

Platform-Specific Dedup Settings

  • Set Count to “One” for lead conversions (prevents counting repeat form submissions)
  • Always include transaction_id in conversion tags
  • If importing from GA4, GA4 handles dedup — don’t also run native conversion tags

Meta Ads

  • Send identical event_id in both Pixel and CAPI events
  • In Events Manager, check the Deduplicated Events column
  • If dedup rate is 0%, your event_id isn’t matching — check the case, format, and encoding

TikTok Ads

  • Use event_id in both browser pixel and Events API
  • TikTok deduplicates based on event_id + event name
  • In TikTok Events Manager, check for “Duplicate Events” warnings

Quick Dedup Audit

Run through this checklist:

  • Every conversion tag includes a transaction/event ID
  • Meta Pixel and CAPI send the same event_id
  • No duplicate tags for the same platform in GTM
  • Thank-you page fires tags only once (not on reload)
  • GA4 conversion count is close to your actual order count
  • Platform-reported totals don’t exceed 1.5x your actual conversions
  • Native Shopify integrations aren’t duplicating your GTM tags

The Bottom Line

Every ad platform will over-report conversions when you run multi-platform campaigns. This is by design — each platform attributes based on its own touchpoints. The fix isn’t to “correct” any single platform, it’s to establish your own source of truth and use it for budget decisions.

Start with transaction IDs everywhere. Move to GA4 or backend data as your source of truth. Graduate to server-side tracking when your spend justifies the complexity.

Not sure how inflated your conversion numbers are? Run a free scan — we check your conversion tags, deduplication setup, and cross-platform tracking automatically.