Enhanced Conversions Setup
Enhanced Conversions improve Google Ads conversion measurement by sending hashed first-party data alongside conversion events. This enables Google to match conversions that would otherwise be missed due to cookie deletion, cross-device behavior, or ad blockers. In well-implemented accounts, you can recover 15–30% of previously unmeasured conversions.
This recipe is a complete end-to-end setup guide. For context on how Enhanced Conversions works technically, see Enhanced Conversions.
Before you start
Section titled “Before you start”You need:
- Google Ads account with at least one active conversion action
- GTM installed on your conversion page (thank-you page, checkout confirmation, etc.)
- Access to the page where conversion data is rendered (to add the dataLayer push)
- The user’s email address (minimum), phone number, or name and address
Step 1 — Enable Enhanced Conversions in Google Ads
Section titled “Step 1 — Enable Enhanced Conversions in Google Ads”- Go to Google Ads → Tools & Settings → Measurement → Conversions
- Click on your primary conversion action (e.g., “Purchase”, “Lead Form Submit”)
- Click Edit settings
- Expand Enhanced conversions
- Toggle Turn on enhanced conversions to ON
- Select GTM as the implementation method
- Save
Note your Conversion ID (format: 123456789) and Conversion Label (format: AbCdEFghIJklMNop) — you will need these in GTM.
Step 2 — Push user-provided data to the dataLayer
Section titled “Step 2 — Push user-provided data to the dataLayer”On your conversion page, push the customer’s data that they provided during checkout or form submission:
Push on the thank-you page. Include all available user-provided fields — more data = better match rate.
<script> window.dataLayer = window.dataLayer || [];
// Clear ecommerce if this is a purchase window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({ event: 'conversion', // Standard conversion data transaction_id: '{{ order.id }}', value: {{ order.total }}, currency: '{{ order.currency }}',
// User-provided data for Enhanced Conversions // Pass raw (unhashed) values — GTM hashes them enhanced_conversions: { email: '{{ order.customer_email }}', phone_number: '{{ order.phone }}', // E.164 format: +12125551234 first_name: '{{ order.billing_first_name }}', last_name: '{{ order.billing_last_name }}', street: '{{ order.billing_address }}', city: '{{ order.billing_city }}', region: '{{ order.billing_state }}', postal_code: '{{ order.billing_zip }}', country: '{{ order.billing_country }}' } });</script>Only include fields that were actually provided by the user. Do not pass empty strings or placeholder values — they reduce match quality.
Step 3 — Create the User-Provided Data variable in GTM
Section titled “Step 3 — Create the User-Provided Data variable in GTM”-
In GTM → Variables → New
-
Variable type: User-Provided Data
-
Provide the following fields:
Email (required as minimum):
- Select variable: create a new Data Layer Variable
- DLV name:
enhanced_conversions.email - Name:
DLV - EC email
Phone number:
- Select variable:
DLV - EC phone→enhanced_conversions.phone_number
Name:
- First name:
DLV - EC first_name→enhanced_conversions.first_name - Last name:
DLV - EC last_name→enhanced_conversions.last_name
Address:
- Street:
DLV - EC street→enhanced_conversions.street - City:
DLV - EC city→enhanced_conversions.city - Region:
DLV - EC region→enhanced_conversions.region - Postal code:
DLV - EC postal_code→enhanced_conversions.postal_code - Country:
DLV - EC country→enhanced_conversions.country
-
Name the variable:
User-Provided Data - Enhanced Conversions -
Save
Step 4 — Create the Google Ads Conversion tag
Section titled “Step 4 — Create the Google Ads Conversion tag”-
In GTM → Tags → New
-
Tag type: Google Ads Conversion Tracking
-
Configure:
- Conversion ID: your Google Ads Conversion ID
- Conversion Label: your conversion label
- Conversion Value:
{{DLV - value}} - Currency Code:
{{DLV - currency}} - Order ID:
{{DLV - transaction_id}} - Enhanced Conversions: toggle ON
- User-Provided Data: select
User-Provided Data - Enhanced Conversions
-
Create a Custom Event Trigger:
- Trigger type: Custom Event
- Event name:
conversion
-
Set trigger to the Custom Event trigger
-
Name tag:
Google Ads - Conversion Tracking (EC) -
Save and publish
Google Ads - Conversion Tracking (EC)
- Type
- Google Ads Conversion Tracking
- Trigger
- Custom Event - conversion
- Variables
-
User-Provided Data - Enhanced ConversionsDLV - valueDLV - transaction_id
Step 5 — Verify with Tag Assistant
Section titled “Step 5 — Verify with Tag Assistant”-
Install the Google Tag Assistant Chrome extension
-
Visit your thank-you page in Tag Assistant’s test mode
-
Check that the Google Ads Conversion Tracking tag fires
-
Click on the tag to expand its details
-
Look for the Enhanced Conversions section — it should show:
- A green checkmark if user data was received and hashed
- The hash values (you will see SHA-256 strings, not the original data)
- Match indicators for each field
-
In Google Ads → Conversions → [your conversion] → Diagnostics, look for “Enhanced conversions detected” within 24-48 hours
Step 6 — Monitor performance
Section titled “Step 6 — Monitor performance”After 7-14 days:
- Go to Google Ads → Conversions
- Check the Enhanced conversions column — this shows how many conversions used enhanced data for matching
- Compare the total conversion column before and after implementing EC — you should see an increase
Phone number formatting
Section titled “Phone number formatting”Google requires E.164 format for phone numbers. Your checkout form likely collects numbers in other formats. Normalise before pushing:
function normalizePhone(phone, countryCode) { // Remove all non-digit characters var digits = phone.replace(/\D/g, ''); // Add country code if not present if (countryCode === 'US' && digits.length === 10) { return '+1' + digits; } if (!digits.startsWith('+')) { return '+' + digits; } return '+' + digits;}
// In your template:enhanced_conversions.phone_number = normalizePhone('{{ order.phone }}', '{{ order.billing_country }}');Test it
Section titled “Test it”- Complete a test checkout or form submission on your site
- On the thank-you page, open GTM Preview
- Verify the
conversionevent fires in the Summary pane - Check the Google Ads tag is in Tags Fired
- Expand the tag details — the Enhanced Conversions section should show hashed data
- In Google Ads, wait 24-48 hours and check Diagnostics
Common gotchas
Section titled “Common gotchas”Email is blank. If the user object does not have an email address at the time the page renders, enhanced_conversions.email will be an empty string or undefined. Google requires at least one valid data field for the match to work. Guard the push with a check: if (!orderEmail) { delete enhancedConversions.email; }.
Phone is not in E.164 format. Common issue: forms collect (212) 555-1234 but the push sends 2125551234 without the country code. Match rates drop significantly with malformed phone numbers.
Enhanced Conversions is marked as “inactive” in Google Ads. This usually means the tag has not fired recently, or the implementation was detected but the data format is incorrect. Use Tag Assistant to verify the hash data is being sent.