Enhanced Conversions Setup Issues | Blue Frog Docs

Enhanced Conversions Setup Issues

Fix enhanced conversions implementation to improve conversion tracking accuracy and ad performance

Enhanced Conversions Setup Issues

What This Means

Enhanced Conversions is a Google Ads feature that supplements conversion tags by sending hashed first-party customer data (email, phone, address) from your website to Google. This data helps Google match conversions more accurately, especially in a cookie-less world with iOS 14.5+ tracking limitations, browser privacy features, and ad blockers. Without enhanced conversions, you lose 20-40% of conversion data, can't optimize campaigns properly, and waste ad spend on untracked conversions.

How Enhanced Conversions Work

Standard Conversion Tracking (Limited):

// Basic conversion tag
gtag('event', 'conversion', {
    'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
    'value': 99.99,
    'currency': 'USD',
    'transaction_id': '12345'
});

// Problem: Relies only on cookies
// Lost if user:
// - Blocks cookies
// - Uses Safari (ITP)
// - Uses iOS 14.5+ (ATT)
// - Clears cookies

Enhanced Conversions (Better):

// Send hashed user data with conversion
gtag('event', 'conversion', {
    'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
    'value': 99.99,
    'currency': 'USD',
    'transaction_id': '12345',
    // Enhanced conversion data
    'email': 'user@example.com',
    'phone_number': '+1234567890',
    'address': {
        'first_name': 'John',
        'last_name': 'Smith',
        'street': '123 Main St',
        'city': 'New York',
        'region': 'NY',
        'postal_code': '10001',
        'country': 'US'
    }
});

// Google hashes this data and matches to signed-in Google users
// Much higher match rate = better tracking

Impact on Your Business

Conversion Tracking Accuracy:

  • 20-40% more conversions tracked - Recovers cookie-blocked conversions
  • Better attribution - Know which ads actually drive sales
  • Reduced data loss - iOS 14.5+ and Safari ITP protection
  • Cross-device tracking - Match users across devices

Ad Campaign Performance:

  • Better ROAS - Optimize based on accurate data
  • Smarter bidding - Automated bidding has more signals
  • Campaign optimization - Google can optimize better with more data
  • Budget efficiency - Stop wasting spend on ineffective ads

Without Enhanced Conversions:

100 actual conversions
↓
60-80 tracked in Google Ads (20-40% lost)
↓
Google optimizes campaigns based on incomplete data
↓
Wasted ad spend + missed opportunities

With Enhanced Conversions:

100 actual conversions
↓
85-95 tracked in Google Ads (5-15% lost)
↓
Google optimizes with accurate data
↓
Better ROI + campaign performance

How to Diagnose

Method 1: Google Ads Enhanced Conversions Status

  1. Open Google Ads
  2. Go to GoalsConversions
  3. Click on conversion action
  4. Check Enhanced conversions section

Status Indicators:

Enabled and working:

Enhanced conversions: Enabled
Status: Recording enhanced conversions
Match rate: 75% (Good)

⚠️ Enabled but not working:

Enhanced conversions: Enabled
Status: No enhanced data detected in last 7 days
Match rate: 0%

Not enabled:

Enhanced conversions: Not set up

Method 2: Google Tag Assistant

  1. Install Tag Assistant
  2. Visit conversion page (checkout confirmation, thank you page)
  3. Complete test conversion
  4. Check Tag Assistant

Look For:

Working:

Conversion Event Fired
Enhanced Conversion Data Detected:
- email: ✓ (hashed)
- phone: ✓ (hashed)
- address: ✓ (hashed)

Not working:

Conversion Event Fired
Enhanced Conversion Data: None detected

Method 3: Browser DevTools Network Tab

  1. Open DevTools (F12)
  2. Go to Network tab
  3. Filter by googleadservices.com
  4. Complete test conversion
  5. Examine conversion request

Check Request Payload:

Enhanced data present:

Request URL: /pagead/conversion/...
Payload:
  em: "482c811da5d5b4bc6d497ffa98491e38..." (hashed email)
  ph: "c6c7418748c87c98e73d5f7f93a1e..." (hashed phone)
  fn: "96d9632f363564cc3032521409cf22a14a... (hashed first name)

No enhanced data:

Request URL: /pagead/conversion/...
Payload:
  value: 99.99
  currency: USD
  (no em, ph, fn fields)

Method 4: Check Implementation Method

Manual code review:

// ❌ BAD: No enhanced conversion data
gtag('event', 'conversion', {
    'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
    'value': 99.99,
    'currency': 'USD'
});

// ✅ GOOD: Enhanced conversion data included
gtag('event', 'conversion', {
    'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
    'value': 99.99,
    'currency': 'USD',
    'email': userEmail, // From form
    'phone_number': userPhone
});

Method 5: Google Ads Diagnostics

  1. Tools & SettingsConversions
  2. Select conversion action
  3. Check Diagnostics tab
  4. Review issues

Common Warnings:

⚠️ Enhanced conversions not detected
⚠️ Low match rate (below 50%)
⚠️ Inconsistent data format
⚠️ Missing required fields

General Fixes

Fix 1: Basic Enhanced Conversions Setup

Add customer data to conversion event:

// On conversion page (checkout success, thank you page)
gtag('event', 'conversion', {
    'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
    'value': 99.99,
    'currency': 'USD',
    'transaction_id': '12345',
    // Enhanced conversion data (Google hashes automatically)
    'email': 'customer@example.com',
    'phone_number': '+12345678900', // E.164 format: +[country code][number]
    'address': {
        'first_name': 'John',
        'last_name': 'Smith',
        'street': '123 Main St',
        'city': 'New York',
        'region': 'NY', // State/province
        'postal_code': '10001',
        'country': 'US' // ISO 3166-1 alpha-2
    }
});

Fix 2: Pull Data from Form Fields

Capture user data from checkout form:

// On form submission or order confirmation page
function sendEnhancedConversion() {
    // Get data from form fields or page variables
    const email = document.getElementById('email').value;
    const phone = document.getElementById('phone').value;
    const firstName = document.getElementById('first_name').value;
    const lastName = document.getElementById('last_name').value;
    const street = document.getElementById('street').value;
    const city = document.getElementById('city').value;
    const state = document.getElementById('state').value;
    const zip = document.getElementById('zip').value;

    // Send enhanced conversion
    gtag('event', 'conversion', {
        'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
        'value': parseFloat(document.getElementById('order_total').value),
        'currency': 'USD',
        'transaction_id': document.getElementById('order_id').value,
        'email': email,
        'phone_number': phone,
        'address': {
            'first_name': firstName,
            'last_name': lastName,
            'street': street,
            'city': city,
            'region': state,
            'postal_code': zip,
            'country': 'US'
        }
    });
}

// Trigger on page load (order confirmation)
window.addEventListener('load', sendEnhancedConversion);

Fix 3: E-commerce Platform Integration

WooCommerce example:

// functions.php or custom plugin

add_action('woocommerce_thankyou', 'enhanced_conversion_tracking');
function enhanced_conversion_tracking($order_id) {
    $order = wc_get_order($order_id);

    // Get customer data
    $email = $order->get_billing_email();
    $phone = $order->get_billing_phone();
    $first_name = $order->get_billing_first_name();
    $last_name = $order->get_billing_last_name();
    $address = $order->get_billing_address_1();
    $city = $order->get_billing_city();
    $state = $order->get_billing_state();
    $postcode = $order->get_billing_postcode();
    $country = $order->get_billing_country();
    $total = $order->get_total();

    ?>
    <script>
    gtag('event', 'conversion', {
        'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
        'value': <?php echo $total; ?>,
        'currency': '<?php echo $order->get_currency(); ?>',
        'transaction_id': '<?php echo $order_id; ?>',
        'email': '<?php echo $email; ?>',
        'phone_number': '<?php echo $phone; ?>',
        'address': {
            'first_name': '<?php echo $first_name; ?>',
            'last_name': '<?php echo $last_name; ?>',
            'street': '<?php echo $address; ?>',
            'city': '<?php echo $city; ?>',
            'region': '<?php echo $state; ?>',
            'postal_code': '<?php echo $postcode; ?>',
            'country': '<?php echo $country; ?>'
        }
    });
    </script>
    <?php
}

Fix 4: Shopify Enhanced Conversions

Shopify theme (thank you page):

<!-- In Settings → Checkout → Additional scripts -->
{% if first_time_accessed %}
<script>
gtag('event', 'conversion', {
    'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
    'value': {{ checkout.total_price | money_without_currency }},
    'currency': '{{ checkout.currency }}',
    'transaction_id': '{{ checkout.order_id }}',
    'email': '{{ checkout.email }}',
    'phone_number': '{{ checkout.shipping_address.phone }}',
    'address': {
        'first_name': '{{ checkout.shipping_address.first_name }}',
        'last_name': '{{ checkout.shipping_address.last_name }}',
        'street': '{{ checkout.shipping_address.address1 }}',
        'city': '{{ checkout.shipping_address.city }}',
        'region': '{{ checkout.shipping_address.province_code }}',
        'postal_code': '{{ checkout.shipping_address.zip }}',
        'country': '{{ checkout.shipping_address.country_code }}'
    }
});
</script>
{% endif %}

Fix 5: Google Tag Manager Implementation

GTM enhanced conversions setup:

1. Enable Enhanced Conversions in Tag:

  • Edit Google Ads Conversion Tag
  • Check "Include user-provided data from your website"
  • Select "Code" or "Event Parameters"

2. Create Data Layer Variables:

// Push to dataLayer on conversion page
window.dataLayer = window.dataLayer || [];
dataLayer.push({
    'event': 'purchase',
    'transactionId': '12345',
    'transactionTotal': 99.99,
    'userEmail': 'customer@example.com',
    'userPhone': '+12345678900',
    'userFirstName': 'John',
    'userLastName': 'Smith',
    'userStreet': '123 Main St',
    'userCity': 'New York',
    'userRegion': 'NY',
    'userPostalCode': '10001',
    'userCountry': 'US'
});

3. Map Variables in GTM:

  • Create User-Defined Variables for each field
  • Variable Type: Data Layer Variable
  • Data Layer Variable Name: userEmail, userPhone, etc.

4. Configure in Conversion Tag:

  • Email: \{\{userEmail\}\}
  • Phone: \{\{userPhone\}\}
  • First Name: \{\{userFirstName\}\}
  • etc.

Fix 6: Fix Phone Number Format

Use E.164 international format:

// ❌ WRONG: Various formats
'555-1234' // Missing country code
'(555) 123-4567' // Wrong format
'1234567890' // Missing +

// ✅ CORRECT: E.164 format
'+12345678900' // +[country code][number], no spaces/dashes

// Function to format phone number
function formatPhoneE164(phone, countryCode = '1') {
    // Remove all non-digits
    phone = phone.replace(/\D/g, '');

    // Add country code if missing
    if (!phone.startsWith(countryCode)) {
        phone = countryCode + phone;
    }

    // Add + prefix
    return '+' + phone;
}

// Usage:
const formattedPhone = formatPhoneE164('(555) 123-4567', '1');
// Returns: '+15551234567'

Fix 7: Normalize Email Addresses

Clean email data before sending:

function normalizeEmail(email) {
    // Convert to lowercase
    email = email.toLowerCase().trim();

    // Remove Gmail dots and plus addressing
    if (email.includes('@gmail.com')) {
        const [local, domain] = email.split('@');
        const cleanLocal = local.split('+')[0].replace(/\./g, '');
        email = cleanLocal + '@' + domain;
    }

    return email;
}

// Usage:
const email = normalizeEmail('John.Doe+newsletter@Gmail.com');
// Returns: 'johndoe@gmail.com'

gtag('event', 'conversion', {
    'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
    'email': email
});

Fix 8: Test Enhanced Conversions

Create test conversion:

// Test enhanced conversions in development
function testEnhancedConversion() {
    gtag('event', 'conversion', {
        'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
        'value': 10.00,
        'currency': 'USD',
        'transaction_id': 'TEST-' + Date.now(),
        'email': 'test@example.com',
        'phone_number': '+11234567890',
        'address': {
            'first_name': 'Test',
            'last_name': 'User',
            'street': '123 Test St',
            'city': 'Test City',
            'region': 'TS',
            'postal_code': '12345',
            'country': 'US'
        }
    });
    console.log('Test enhanced conversion fired');
}

// Run test
testEnhancedConversion();

Platform-Specific Guides

Detailed implementation instructions for your specific platform:

Platform Troubleshooting Guide
Shopify Shopify Enhanced Conversions Guide
WordPress WordPress Enhanced Conversions Guide
Wix Wix Enhanced Conversions Guide
Squarespace Squarespace Enhanced Conversions Guide
Webflow Webflow Enhanced Conversions Guide

Verification

After implementing enhanced conversions:

Test 1: Tag Assistant

  1. Open Tag Assistant
  2. Complete test purchase
  3. Check conversion event
  4. Verify enhanced data detected

Test 2: Google Ads Conversion Report

  1. Wait 24-48 hours
  2. Check Conversions report
  3. Look for "Enhanced conversions" column
  4. Match rate should be 50%+ (ideally 70%+)

Test 3: Network Request

  1. DevTools Network tab
  2. Complete conversion
  3. Find googleadservices request
  4. Check for em=, ph=, fn= parameters (hashed)

Test 4: Diagnostics

  1. Google Ads → Conversions
  2. Click conversion action
  3. Check diagnostics
  4. Should show "Recording enhanced conversions"

Common Mistakes

  1. Wrong phone format - Must be E.164 (+12345678900)
  2. Not normalizing emails - Case-sensitive, extra spaces
  3. Missing data - Not all conversions have user data
  4. Wrong timing - Send on confirmation page, not form submit
  5. Invalid country codes - Use ISO 3166-1 alpha-2 (US, GB, CA)
  6. Including PII in GTM container - Security risk
  7. Not testing - Always test before deploying
  8. Sending unhashed data - Google hashes automatically, don't pre-hash

Further Reading

// SYS.FOOTER