Skip to main content

Enhanced Conversions

Implement Google Ads Enhanced Conversions to improve conversion measurement accuracy using first-party customer data.

What Are Enhanced Conversions?

Enhanced Conversions supplement your existing conversion tags with hashed first-party customer data, enabling better attribution when:

  • Third-party cookies are blocked
  • Cross-device journeys are involved
  • Click IDs expire before conversion

How It Works

┌─────────────────────────────────────────────────────────┐
│                   Conversion Event                       │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  Standard Conversion        Enhanced Conversion         │
│  ─────────────────────────────────────────────────────  │
│  • Click ID (gclid)         • Click ID + User Data     │
│  • Cookie-based             • Hashed email/phone       │
│  • Device-limited           • Cross-device capable     │
│                                                         │
│  Ad Click ──▶ Cookie ──▶ Conversion                    │
│                    │                                    │
│                    ▼                                    │
│              Enhanced data                              │
│              (hashed PII)                               │
│                                                         │
└─────────────────────────────────────────────────────────┘

Benefits

| Metric | Typical Improvement | |--------|---------------------| | Observed conversions | +5-15% | | Conversion accuracy | +10-20% | | Attribution accuracy | +15-25% | | Cross-device tracking | Significantly improved |

Prerequisites

Before implementing:

  • [ ] Google Ads account with conversion tracking
  • [ ] Google Tag Manager (recommended)
  • [ ] Access to website backend/data layer
  • [ ] Privacy policy updated to cover data sharing
  • [ ] User consent mechanism in place

Implementation Methods

Method 1: GTM with Data Layer (Recommended)

Best for dynamic websites with existing data layer.

Step 1: Data Layer Push

Add user data to your data layer on conversion:

// On purchase/lead form submission
dataLayer.push({
  event: 'purchase',
  transaction_id: 'T_12345',
  value: 99.99,
  currency: 'USD',
  // Enhanced conversion data
  enhanced_conversion_data: {
    email: '[email protected]'
  }
});

Step 2: Create Data Layer Variable

In GTM:

  1. VariablesNewData Layer Variable
  2. Name: DLV - Enhanced Conversion Email
  3. Data Layer Variable Name: enhanced_conversion_data.email

Step 3: Configure Conversion Tag

  1. Open your Google Ads Conversion Tracking tag
  2. Enable Include user-provided data from your website
  3. Select New Variable under User-provided data
  4. Map the email variable

Method 2: Automatic Collection

For sites with standard form fields.

  1. In Google Ads tag, enable Automatically detect
  2. Google will scan for fields: email, phone, name, address
  3. Data is hashed automatically

Limitations:

  • Less reliable than manual implementation
  • May not capture all conversions
  • Depends on form field naming

Method 3: CSS Selector

Specify CSS selectors for user data fields:

// In GTM User-Provided Data variable
{
  "email": {
    "cssSelector": "#checkout-email, .customer-email input"
  },
  "phone_number": {
    "cssSelector": "#checkout-phone, input[type='tel']"
  }
}

Complete Data Layer Implementation

Full User Data Object

// Complete enhanced conversion data
dataLayer.push({
  event: 'purchase',
  transaction_id: 'T_12345',
  value: 149.99,
  currency: 'USD',
  enhanced_conversion_data: {
    // Required: At least one identifier
    email: '[email protected]',

    // Recommended: Additional identifiers
    phone_number: '+15551234567',

    // Optional: Address data for higher match rates
    first_name: 'John',
    last_name: 'Doe',
    street: '123 Main Street',
    city: 'San Francisco',
    region: 'CA',
    postal_code: '94105',
    country: 'US'
  }
});

Data Normalization

Google recommends normalizing data before pushing:

function normalizeEmail(email) {
  return email.toLowerCase().trim();
}

function normalizePhone(phone) {
  // Remove non-numeric, keep country code
  return phone.replace(/[^0-9+]/g, '');
}

function normalizeName(name) {
  return name.toLowerCase().trim();
}

// Usage
dataLayer.push({
  event: 'purchase',
  enhanced_conversion_data: {
    email: normalizeEmail(userData.email),
    phone_number: normalizePhone(userData.phone),
    first_name: normalizeName(userData.firstName),
    last_name: normalizeName(userData.lastName)
  }
});

GTM Variable Configuration

User-Provided Data Variable

  1. VariablesNew
  2. Choose User-Provided Data
  3. Configure data sources:

| Field | Source Type | Value | |-------|-------------|-------| | Email | Data Layer | {{DLV - Enhanced Email}} | | Phone | Data Layer | {{DLV - Enhanced Phone}} | | First Name | Data Layer | {{DLV - Enhanced First Name}} | | Last Name | Data Layer | {{DLV - Enhanced Last Name}} | | Street | Data Layer | {{DLV - Enhanced Street}} | | City | Data Layer | {{DLV - Enhanced City}} | | Region | Data Layer | {{DLV - Enhanced Region}} | | Postal Code | Data Layer | {{DLV - Enhanced Postal Code}} | | Country | Data Layer | {{DLV - Enhanced Country}} |

Tag Configuration

  1. Edit your Google Ads Conversion Tracking tag
  2. Enable Include user-provided data from your website
  3. Select your User-Provided Data variable
  4. Save and publish

Server-Side Implementation

For maximum data recovery, implement server-side:

// Server-side GTM tag configuration
// In Google Ads Conversion Tracking tag

// Event data from client
const eventData = getAllEventData();

// Add enhanced conversion data
const enhancedConversionData = {
  sha256_email_address: hashSHA256(eventData.user_data.email),
  sha256_phone_number: hashSHA256(eventData.user_data.phone)
};

Benefits of Server-Side

| Aspect | Client-Side | Server-Side | |--------|-------------|-------------| | Ad blocker bypass | No | Yes | | Data enrichment | Limited | Full | | PII handling | Browser exposure | Server-only | | Match rate | Good | Better |

Verification & Testing

GTM Preview Mode

  1. Start Preview mode
  2. Complete a test conversion
  3. Check the conversion tag fired
  4. Verify user_data parameters present

Google Ads Diagnostics

  1. Go to Google AdsToolsConversions
  2. Select your conversion action
  3. Check Diagnostics tab
  4. Look for "Enhanced conversions" section

Verification Checklist

  • [ ] Tag fires on conversions
  • [ ] User data parameters populated
  • [ ] Data appears hashed (not plain text)
  • [ ] Google Ads shows "Active" status
  • [ ] Match rate visible in diagnostics

Privacy Compliance

Required Disclosures

Update your privacy policy to include:

  1. Data shared with Google for advertising
  2. How user data is protected (hashing)
  3. Purpose: conversion measurement
  4. User rights to opt out

Consent Requirements

// Only send enhanced data with marketing consent
if (hasMarketingConsent()) {
  dataLayer.push({
    event: 'purchase',
    enhanced_conversion_data: {
      email: customerEmail
    }
  });
} else {
  // Send basic conversion without user data
  dataLayer.push({
    event: 'purchase'
  });
}

Troubleshooting

No Match Rate Showing

| Cause | Solution | |-------|----------| | Too few conversions | Wait for 20+ conversions | | Data not hashed | Check SHA-256 hashing | | Missing email | Verify data layer population | | Tag misconfigured | Review variable mapping |

Low Match Rate

| Cause | Solution | |-------|----------| | Bad data quality | Normalize email/phone | | Single identifier | Add phone + name + address | | Hash format wrong | Use lowercase before hashing |

Enhanced Conversions Not Active

  1. Verify acceptance of Enhanced Conversions T&Cs
  2. Check conversion action settings
  3. Verify tag is firing correctly
  4. Allow 72 hours for activation

Related: Conversion Tracking Next: Attribution Modeling