What Is Data Deduplication? Preventing Double-Counted Conversions
Data deduplication is the process of ensuring each offline conversion is counted exactly once in your ad platform reports. Without deduplication, the same booked job, completed service, or closed deal could appear multiple times — inflating your conversion count, skewing your cost-per-acquisition, and misleading Smart Bidding.
For The Upload Offline Conversions App (TUOCA), deduplication is a critical pipeline stage that runs on every relay execution, preventing double-counting across scheduled uploads.
Why Duplicates Happen
Duplicate conversions are surprisingly common in offline conversion tracking:
| Cause | Frequency | Example |
|---|---|---|
| Same CSV uploaded twice | Very Common | Accidentally re-uploading last week’s file |
| CRM record in multiple exports | Common | Lead appears in both “New this week” and “All qualified” exports |
| Retry after partial failure | Common | 80 of 100 records succeeded; retrying all 100 re-sends the 80 |
| Multiple relays same destination | Moderate | Two relays both uploading CallRail calls to Google Ads |
| Count = “Every” on conversion action | Moderate | Same GCLID counted each time it appears |
| Manual + automated overlap | Common | Manual CSV upload + TUOCA relay both running |
Deduplication Methods
1. GCLID + Action + Timestamp (Google’s Default)
Google Ads automatically deduplicates based on three fields:
GCLID: EAIaIQobChMI8dml...
Conversion Name: Booked Job
Conversion Time: 2026-04-10 14:30:00-05:00
If all three match a previous upload, Google rejects the duplicate with DUPLICATE_CONVERSION. However, this is imperfect — if the timestamp differs by even one second, it’s treated as a new conversion.
2. Order ID Deduplication (Recommended)
The order_id field provides explicit, reliable deduplication:
Google Click ID,Conversion Name,Conversion Time,Conversion Value,Conversion Currency,Order ID
EAIaIQobChMI...,Booked Job,2026-04-10 14:30:00-05:00,4500.00,USD,JOB-2026-04-001
When an order_id is included, Google uses it as the primary deduplication key. Any subsequent upload with the same order_id is rejected, regardless of other field values.
Benefits:
- Idempotent uploads — re-upload the same batch safely
- Reliable across time zones and timestamp formats
- Works even when GCLID or timestamps vary slightly
See What Is Order ID Deduplication? for details.
3. Event ID (Meta CAPI)
Meta’s Conversions API uses event_id for deduplication — both between Pixel and CAPI events, and between duplicate CAPI events:
{
"event_name": "Purchase",
"event_id": "job-2026-04-001",
"event_time": 1714502400
}
4. Platform-Specific Methods
| Platform | Deduplication Key | Behavior |
|---|---|---|
| Google Ads | order_id or GCLID+Action+Time | Rejects duplicates with error |
| Meta | event_id | Silently deduplicates |
| Microsoft Ads | order_id | Rejects duplicates |
| TikTok | event_id | Silently deduplicates |
The Cost of Duplicate Conversions
Duplicates don’t just inflate numbers — they actively harm your campaigns:
1. Inflated Conversion Count
Reality: 45 booked jobs
With duplicates: 63 "conversions"
Error: +40% inflation
2. Deflated CPA
Actual CPA: $222 per booked job
Reported CPA: $159 per "conversion"
Error: CPA appears 28% lower than reality
3. Misleading ROAS
Actual revenue: $157,500
Duplicated revenue: $220,500 (same jobs counted twice)
Reported ROAS: 7.35x vs. actual 5.25x
4. Smart Bidding Corruption
Smart Bidding learns from your conversion data. If duplicates create the illusion of more conversions than reality, the algorithm will bid more aggressively — increasing spend without increasing actual revenue.
How TUOCA Deduplicates
TUOCA implements multi-layer deduplication:
Layer 1: Internal Upload Tracking
TUOCA maintains a record of every successfully uploaded conversion:
- GCLID / click identifier
- Conversion action name
- Timestamp
- Generated order_id
Before uploading, each record is checked against this history. Already-uploaded records are skipped.
Layer 2: Order ID Generation
TUOCA generates a unique order_id for each conversion based on:
- Source system record ID (e.g., CallRail call ID, ServiceTitan job ID)
- Destination platform
- Conversion action
This means re-running the same relay with the same data produces the same order_ids, making uploads idempotent.
Layer 3: API Error Handling
If a duplicate does reach the API (e.g., manual upload + relay overlap), TUOCA catches the DUPLICATE_CONVERSION error, logs it as “expected duplicate,” and continues processing the remaining records.
Layer 4: Cross-Relay Awareness
When multiple relays target the same destination account, TUOCA’s deduplication spans across all relays — preventing a record uploaded by Relay A from being re-uploaded by Relay B.
Best Practices
- Always include order_id — It’s the most reliable deduplication method
- Set Count to “One” on your conversion action — Prevents per-GCLID duplicates
- Don’t mix manual and automated uploads — Use one method per conversion action
- Use TUOCA’s Activity Logs — Review upload history to spot duplication patterns
- Check your CRM exports — Ensure export filters don’t overlap between batches