Enhanced Conversions
Enhanced Conversions increase match rates by providing hashed user data to ad platforms. This improves attribution accuracy, especially for cross-device conversions.
Overview
When a user converts, ad platforms try to match the conversion back to an ad click. Without user data, they rely solely on cookies and click IDs, which can fail when:
- Cookies are blocked or expired
- User converts on a different device
- Click ID is missing from the conversion
Enhanced Conversions solve this by sending hashed user data (email, phone, address) that platforms can use to match users.
Standard Tracking Enhanced Conversions
โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ
Click ID only โ Click ID + Email Hash + Phone Hash
50-70% match rate โ 85-95% match rateHow It Works
Collect User Data
During checkout/signup, collect user information:
- Email address
- Phone number
- Name and address (optional)
Hash Automatically
Convultra automatically:
- Normalizes data (lowercase, trim whitespace)
- Hashes with SHA-256
- Never stores or transmits raw PII
Forward to Platforms
Hashed data is sent to:
- Google Ads (Enhanced Conversions for Web)
- Meta (Advanced Matching via CAPI)
- Microsoft Ads (Enhanced Conversions)
Implementation Methods
Method 1: Combined Tracking (Recommended)
Track conversion and user data in one call:
Convultra.trackConversion('purchase',
// Conversion data
{
orderId: 'ORDER-12345',
value: 149.99,
currency: 'USD'
},
// User data (will be hashed)
{
email: 'customer@example.com',
phone: '+1234567890',
firstName: 'John',
lastName: 'Doe'
}
)Method 2: Identify + Track
Pre-identify user, then track conversion:
// First, identify the user (data stored for all future events)
Convultra.identify('user_123', {
email: 'customer@example.com',
phone: '+1234567890',
firstName: 'John',
lastName: 'Doe'
})
// Later, track conversion (user data automatically included)
Convultra.trackPurchase({
orderId: 'ORDER-12345',
value: 149.99,
currency: 'USD'
})Method 3: Two-Stage Enhancement
Track conversion first, add user data later:
// Stage 1: Track conversion (user not logged in yet)
Convultra.track('purchase', {
orderId: 'ORDER-12345',
value: 149.99
})
// Stage 2: User enters email for receipt (within 30 minutes)
Convultra.enhance({
email: 'customer@example.com',
phone: '+1234567890'
})Supported User Data
Required (Minimum One)
| Field | Format | Example |
|---|---|---|
email | Email address | user@example.com |
phone | Phone with country code | +1234567890 |
Recommended (Better Matching)
| Field | Format | Example |
|---|---|---|
firstName | First name | John |
lastName | Last name | Doe |
Optional (Best Matching)
| Field | Format | Example |
|---|---|---|
street | Street address | 123 Main St |
city | City | New York |
state | State/province | NY |
postalCode | Postal/ZIP code | 10001 |
country | Country code | US |
Match Rate Tiers
| Data Provided | Match Rate |
|---|---|
| Click ID only | 50-70% |
| 75-85% | |
| + Email + Phone | 85-92% |
| + Email + Phone + Name | 90-95% |
| + Email + Phone + Name + Address | 93-98% |
Google reports that Enhanced Conversions can recover up to 5-15% additional conversions that would otherwise be missed.
Platform-Specific Details
Google Ads Enhanced Conversions
Data sent to Google Ads Offline Conversions API:
// What Convultra sends (hashed)
{
conversionAction: 'customers/123/conversionActions/456',
gclid: 'Cj0KCQjw...',
conversionDateTime: '2024-01-15 12:30:45-05:00',
conversionValue: 99.99,
currencyCode: 'USD',
orderId: 'ORDER-12345',
userIdentifiers: [
{ hashedEmail: 'sha256_e3b0c44298fc1c14...' },
{ hashedPhoneNumber: 'sha256_a7b9c3d4e5f6...' },
{ addressInfo: {
hashedFirstName: 'sha256_...',
hashedLastName: 'sha256_...',
hashedStreetAddress: 'sha256_...',
city: 'New York',
state: 'NY',
countryCode: 'US',
postalCode: '10001'
}
}
]
}Meta Conversions API
Data sent to Meta CAPI:
// What Convultra sends
{
event_name: 'Purchase',
event_time: 1704067200,
action_source: 'website',
user_data: {
em: ['sha256_email_hash'],
ph: ['sha256_phone_hash'],
fn: ['sha256_first_name_hash'],
ln: ['sha256_last_name_hash'],
ct: ['sha256_city_hash'],
st: ['sha256_state_hash'],
zp: ['10001'],
country: ['us'],
fbc: 'fb.1.1704067200.IwAR3x...',
fbp: 'fb.1.1704067200.abc123'
},
custom_data: {
value: 99.99,
currency: 'USD',
order_id: 'ORDER-12345'
}
}Microsoft Ads
Data sent to Microsoft Ads API:
{
conversionName: 'Purchase',
conversionTime: '2024-01-15T12:30:45Z',
conversionValue: 99.99,
currencyCode: 'USD',
msclkid: 'abc123...',
HashedEmailAddress: 'sha256_...',
HashedPhoneNumber: 'sha256_...'
}Privacy & Security
Data Handling
- Normalization: Email lowercased, phone stripped of non-digits
- Hashing: SHA-256 applied before any network transmission
- No Storage: Raw PII is never stored in Convultra systems
- Encrypted Transit: All data transmitted over HTTPS
Example Transformation
// Input (what you provide)
{
email: 'John.Doe@Example.com ',
phone: '+1 (555) 123-4567'
}
// Normalized
{
email: 'john.doe@example.com',
phone: '15551234567'
}
// Hashed (what is transmitted)
{
email: 'sha256_e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
phone: 'sha256_a7b9c3d4e5f6a7b9c3d4e5f6a7b9c3d4e5f6a7b9c3d4e5f6a7b9c3d4e5f6a7b9'
}Best Practices
1. Collect Early
Collect user data as early as possible in the funnel:
// On email capture (newsletter, account creation)
Convultra.identify('temp_' + Date.now(), {
email: email
})
// Data persists for all subsequent conversions2. Use All Available Data
More data = higher match rates:
// โ
Good - maximum data
Convultra.trackConversion('purchase', conversionData, {
email: 'user@example.com',
phone: '+1234567890',
firstName: 'John',
lastName: 'Doe',
street: '123 Main St',
city: 'New York',
postalCode: '10001',
country: 'US'
})
// โ ๏ธ Okay - minimum data
Convultra.trackConversion('purchase', conversionData, {
email: 'user@example.com'
})3. Validate Phone Numbers
Include country code for reliable matching:
// โ
Good - with country code
{ phone: '+1234567890' }
{ phone: '+44 20 7946 0958' }
// โ Bad - missing country code
{ phone: '234567890' }Testing Enhanced Conversions
1. Enable Debug Mode
Convultra.init('proj_xxx', { debug: true })2. Check Console Output
Look for:
[Convultra] Conversion enhancement sent: ORDER-12345 { email: 'sha256_...', phone: 'sha256_...' }3. Verify in Platforms
- Google Ads: Conversions โ Enhanced Conversions Diagnostics
- Meta: Events Manager โ Data Sources โ Data Quality
- Microsoft: Tools โ Offline Conversions โ Match Rate
Helper Methods
Set User Data Globally
// Set once, applied to all future conversions
Convultra.setEnhancedUserData({
email: 'user@example.com',
phone: '+1234567890',
firstName: 'John',
lastName: 'Doe'
})Enhance Recent Conversions
// After user enters email, enhance their recent conversions
Convultra.enhanceRecentConversions({
email: 'user@example.com'
}, 3) // Enhance last 3 conversionsCheck User Data Status
// Check if we have enough data for enhancement
if (Convultra.hasUserData()) {
console.log('Enhanced conversions enabled')
}