Deduplication System
Convultra uses a multi-tier deduplication system to prevent double-counting conversions.
Why Deduplication Matters
Without deduplication, conversions can be counted multiple times:
- Page refresh after purchase
- User clicking "back" to confirmation page
- Network retries
- Multiple tracking sources (client + server)
This leads to:
- Inflated conversion numbers
- Inaccurate ROAS calculations
- Wasted ad spend on over-attributed campaigns
Deduplication Tiers
Convultra applies four levels of deduplication:
Tier 1: Conversion ID (Order ID)
Window: 24 hours (configurable)
The primary deduplication method using your provided order/transaction ID:
Convultra.trackPurchase({
orderId: 'ORD-12345', // Used for deduplication
value: 99.99
})| Check | Result |
|---|---|
Same orderId within 24h | โ Duplicate |
Different orderId | โ Unique |
Always provide an orderId for purchases. It's the most reliable deduplication method.
Tier 2: Event ID
Window: 5 minutes (configurable)
Unique identifier generated per event:
// Automatically generated
{
event_id: 'evt_1704067200000_abc123',
event_type: 'purchase',
...
}Catches:
- Exact duplicate requests (network retries)
- Rapid-fire button clicks
Tier 3: Click ID + Value
Window: 1 hour (configurable)
Same click ID + same value = likely duplicate:
// Scenario: User refreshes thank you page
{
gclid: 'Cj0KCQ...',
value: 99.99
}
// Second request with same gclid + value = duplicate| First Event | Second Event | Result |
|---|---|---|
| gclid=abc, value=99 | gclid=abc, value=99 | โ Duplicate |
| gclid=abc, value=99 | gclid=abc, value=50 | โ Unique |
| gclid=abc, value=99 | gclid=xyz, value=99 | โ Unique |
Tier 4: Browser Fingerprint
Window: 5 minutes (configurable)
Same fingerprint + same value within short window:
{
fingerprint: 'fp_a1b2c3...',
value: 99.99
}Catches:
- Users without click IDs
- Direct traffic conversions
Deduplication Flow
Event Received
โ
[1] Check Order ID (24h window)
โ not duplicate
[2] Check Event ID (5min window)
โ not duplicate
[3] Check Click ID + Value (1h window)
โ not duplicate
[4] Check Fingerprint + Value (5min window)
โ not duplicate
โ
Process as unique conversionConfiguration
Dashboard Settings
Dashboard โ Settings โ Deduplication
| Setting | Default | Range |
|---|---|---|
| Conversion ID Window | 24 hours | 1h - 7 days |
| Event ID Window | 5 minutes | 1min - 1h |
| Click ID Window | 1 hour | 5min - 24h |
| Fingerprint Window | 5 minutes | 1min - 1h |
SDK Configuration
Convultra.init({
apiKey: 'your-key',
endpoint: 'https://your-endpoint.com',
deduplication: {
orderIdWindow: 86400, // 24 hours in seconds
eventIdWindow: 300, // 5 minutes
clickIdWindow: 3600, // 1 hour
fingerprintWindow: 300 // 5 minutes
}
})Best Practices
1. Always Use Order IDs
// โ
Good
Convultra.trackPurchase({
orderId: 'ORD-12345',
value: 99.99
})
// โ Bad - no orderId
Convultra.trackPurchase({
value: 99.99
})2. Use Unique Order IDs
// โ
Good - unique per transaction
orderId: `ORD-${timestamp}-${random}`
// โ Bad - reused IDs
orderId: 'purchase'3. Include Lead IDs
For leads, use a unique identifier:
Convultra.trackLead({
leadId: `LEAD-${formId}-${timestamp}`,
value: 100
})Viewing Duplicates
Dashboard
Dashboard โ Conversions โ Duplicates
Shows:
- Original event
- Duplicate attempts
- Deduplication tier triggered
API
// Query duplicates
GET /v1/events/duplicates?date_from=2024-01-01Platform Deduplication
In addition to Convultra's deduplication, each ad platform has its own:
| Platform | Dedup Field | How Used |
|---|---|---|
| Google Ads | orderId | Google dedupes by order ID |
| Meta Ads | event_id + order_id | Meta dedupes by both |
| Microsoft | orderId | Microsoft dedupes by order ID |
Convultra sends these fields to enable platform-side deduplication too.
Troubleshooting
Duplicates Still Appearing
- Check orderId uniqueness - Are IDs truly unique?
- Check time windows - Is the gap between events too long?
- Check multi-source - Are you tracking same event client + server?
Legitimate Events Marked Duplicate
- Extend time windows - If legitimate events are within window
- Check value differences - Small value changes should be unique
- Verify orderId format - Ensure IDs are properly generated