Skip to content
ceaksan

Google Ads Enhanced Conversions Guide: Setup, Errors, and Solutions

A comprehensive guide to Google Ads enhanced conversions covering SHA-256 hashing, GTAG/GTM/API setup methods, common diagnostic errors, and data matching strategies.

Mar 27, 2026 7 min read
TL;DR

Google Ads enhanced conversions improve conversion measurement accuracy by hashing first-party customer data with SHA-256. This guide covers setup methods (Google Ads, GTAG, GTM, API), data format requirements, common diagnostic report errors, and multi-stage conversion data matching strategies.

For Google Ads conversion tags to accurately count relevant events (clicks, form submissions, product or service purchases, etc.) and for bids to be validated through verified data, it is essential that campaign performance is properly measured and advertising budgets are used efficiently.

Google Ads offers many features to enrich conversion data. This guide comprehensively covers the enhanced conversions feature, setup methods, data format requirements, common errors, and data matching strategies for multi-stage conversions.

What Are Enhanced Conversions?

In conjunction with Google Ads conversion tags, enhanced conversions enable optimization of conversion measurement accuracy and more effective bidding. This feature is based on supplementing the associated conversion tag with first-party customer data hashed using SHA-2561. One or more of the following data fields must be available:

  • Email (recommended)
  • Name and shipping/billing address (street, city, state/region, postal code)

A phone number may also be included in addition to either of the two fields above.

When a customer completes a defined conversion action (e.g., a product purchase), first-party customer data can be associated with that conversion event alongside the conversion tag. If the website provides the customer’s email address, shipping address, phone number, and other first-party data (with the customer’s consent) during the conversion process, this information can be sent to Google together with the conversion tag signal (in hashed form) and used to improve conversion measurement2.

Hashing Algorithm

The hashing function maps variable-length data sets into fixed-length data sets using an algorithm (e.g., SHA-256). This ensures the privacy and security of hashed data3.

{% assign secretString = "secret string" %}
SHA-1: {{ secret String | sha1 }} -> da39a3ee5e6b4b0d3255bfef95601890afd80709
SHA-256: {{ secret String | sha256 }} -> e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Google tags similarly apply one-way hashing to first-party customer data using the SHA-256 algorithm.

tip

This feature does not support pre-hashing. Hashing is performed by Google tags.

Enhanced Conversions for Web vs. Leads

Depending on the type of enhanced conversions used, hashed data can be utilized in different ways:

Enhanced conversions for webEnhanced conversions for leads
On-site conversion events (sales, form submissions, etc.)Purchases made outside the website (via phone, email, etc.)

When a conversion is recorded, hashed first-party customer data is linked to the customer’s Google account to improve conversion measurement. This enables:

  • Recovery of conversions that would otherwise be unmeasurable
  • Improved bidding through enhanced data quality
Google Ads - Enhanced Conversions
Google Ads - Enhanced Conversions

Setup Methods

Enhanced conversions for web can be set up in four different ways.

Play

Google Ads provides the ability to link customer data to relevant fields using CSS and JavaScript variables under the conversion tag. While practical, this method will fail if CSS definitions or JS variables change or become inaccessible.

Global Site Tag - Enhanced Conversions
Global Site Tag - Enhanced Conversions

Ensure that relevant fields are assigned to fixed and unique values.

GTAG

To send customer data to Google via the Global Site Tag, the allow_enhanced_conversions parameter must be set to true:

gtag("config", "AW-CONVERSION_ID", { allow_enhanced_conversions: true });

Then pass customer data via user_data. Example Liquid template for Shopify stores:

{% if customer.accepts_marketing == true %}
gtag('set', 'user_data', {
    'email': '{{ customer.email }}',
    'phone_number': '{{ customer.phone }}',
    'address': [{
        'first_name': '{{ customer.first_name }}',
        'last_name': '{{ customer.last_name }}',
        'street': '{{ customer.addresses[0].street }}',
        'city': '{{ customer.addresses[0].city }}',
        'region': '{{ customer.addresses[0].province }}',
        'postal_code': '{{ customer.addresses[0].zip }}'
    }]
});
{% endif %}
Google Ads - Enhanced Conversions
Google Ads - Enhanced Conversions

GTM

In addition to the Global Site Tag, data can be processed through data layer variables or by selecting HTML elements on the page via Google Tag Manager.

Google Ads - Enhanced Conversions
Google Ads - Enhanced Conversions

Under the conversion tag’s enhanced conversions settings, select Global site tag or Google Tag Manager, define the page URL where the conversion occurs, and initiate a scan.

Create a Google Ads conversion tag for GTM using data layer variables:

Google Tag Manager - Enhanced Conversions
Google Tag Manager - Enhanced Conversions

Select Include user-provided data from website to link user data to the corresponding fields. GTM offers two variable formats: Manual configuration and Code.

Google Tag Manager - Enhanced Conversions
Google Tag Manager - Enhanced Conversions
Google Tag Manager - Enhanced Conversions
Google Tag Manager - Enhanced Conversions

With Manual configuration, each field can be individually selected as User-provided Data. With Code, a Custom JavaScript must be used:

Google Tag Manager - Enhanced Conversions
Google Tag Manager - Enhanced Conversions
function () {
  return {
    "email": '{{dL - getClientInfo _ clientEmail}}',
    "phone_number": '{{dL - getClientInfo _ clientPhone}}',
    "address": {
      "first_name": '{{dL - getClientInfo _ clientFirstName}}',
      "last_name": '{{dL - getClientInfo _ clientLastName}}',
      "street": '{{dL - getClientInfo _ clientAddressStreet}}',
      "city": '{{dL - getClientInfo _ clientAddressCity}}',
      "region": '{{dL - getClientInfo _ clientAddressRegion}}',
      "postal_code": '{{dL - getClientInfo _ clientAddressZip}}',
      "country": '{{dL - getClientInfo _ clientAddressCountry}}'
    }
  }
}

The _tag_mode value varies depending on the Manual configuration or Code selection.

Google Tag Manager - Enhanced Conversions
Google Tag Manager - Enhanced Conversions

Data can also be sent to Google via the Google Ads API4. For importing CRM data into conversion tags and leveraging offline activities for bid optimization, the API provides a more effective solution. When using first-party customer data from lead forms to send conversions to Google, there is no need to modify lead forms or CRM systems to capture GCLID data5. Instead, previously obtained data (e.g., email) is used for conversion measurement.

Data Fields and Format Requirements

First-party customer data must be accessible on the same page/screen as the associated conversion tag. If this data is part of a flow, it can be stored in the browser cache in hashed form and used as needed.

note

All transmitted data must be treated as string-type variables.

Matching Keys

Data fieldParameterDescription
EmailemailCustomer email address (in hashed form)
Phone numberphone_numberCustomer phone number. Remove symbols and hyphens, include country code (in hashed form)
First nameaddress.first_nameCustomer first name
Last nameaddress.last_nameCustomer last name
Streetaddress.streetStreet, avenue, building name and number
Cityaddress.cityCity
Regionaddress.regionState, province, or region name
Postal codeaddress.postal_codePostal code
Countryaddress.countryTwo-letter country code per ISO 3166-1 alpha-2 standard

At least one of email or address fields must be provided. Phone number should also be included when available. If a field cannot be collected, remove it entirely rather than sending it blank.

Phone Number Format

When different masking formats are used for phone numbers (in both transactional and form fields), each format produces a different hash value:

Phone NumberSHA-256 Hash
+90555444332293d891ecb6e82af6a73fced2463b292ffa5c9b2004299ff2e912904a012fb3e7
05554443322da934756bfef14f0f75afea2028e7d0b2408634e2efa4ef0bad49002dc2e90b7
5554443322fd10f40cc24f4b160584182a59b174c870330b4a8d1516c1a71dfcddb4b55509
555 444 33 228b01cf10c64884ab6106cbe1aa2ae06552671a3f45343b26a04a164056146531
tip

E.164 format is recommended for phone numbers6.

Email Format

While email is a less problematic input field compared to phone numbers, case consistency still matters:

Email AddressSHA-256 Hash
hello@google.com8045c2e6fb47ce67ee758a504062cb809796be36aaf8abb868ad8156a2306061
Hello@google.com54a38abc0aef5c44fcef760d90f2513760290d2ca244150d6a21a02f1da3dda6
HELLO@GOOGLE.COMaf59669972cbb90d01aa6330545288f2aeaa5a1d839f62526ea6b1f0269cde39

Address fields are generally managed through dropdown lists and rarely cause issues. However, region definitions can vary across countries, so customer data should be reviewed broadly7.

Data Matching in Multi-Stage Conversions

When both macro and micro conversions are defined:

  • A visitor from a lead form later becomes a customer
  • A customer who placed a pre-order later completes the transaction
  • A user who submitted a rental request later completes the process

In these or similar scenarios, the conversion tag may need to fire at multiple stages. Therefore, having at least one field (preferably email) in conversion tags with consistent data is critical for user activity tracking, conversions, and campaign success8 9. If a phone number was previously obtained, including additional user information in the macro conversion at the next stage will further enhance conversion effectiveness.

note

Google maintains a list of email addresses and corresponding hashed strings for matching purposes. After your hashed email data is uploaded, Google Ads compares each hashed string in your data against the hashed strings of Google accounts. If a match is found, the relevant conversion records are marked as matched10.

To resolve warnings and ensure data consistency, multiple conversion tags can be created for the same stage and objective, with the appropriate tag capturing the conversion signal. Additionally, offline conversion data from lead forms can be uploaded to Google Ads or transferred via API.

note

The enhanced conversions feature does not require modifying lead forms or CRM systems to capture GCLID data5.

Diagnostic Report and Common Errors

After enabling the feature, a validation and learning period of approximately 72 hours begins based on daily conversion volume. This process is tracked through the conversion’s diagnostic report11.

Conversion Diagnostics
Conversion Diagnostics

Status Descriptions

Enhanced conversions recorded : No issues detected and data flow is active

Enhanced conversions unavailable : Customer data requirements for enhanced conversions have not been accepted12

Enhanced conversion data pending : Sufficient data flow has not yet been established. It may take up to 48 hours after enabling enhanced conversions for data flow to begin.

Setup issues detected : There is an issue with the enhanced conversion setup13

No new conversion data to process : No conversion has been recorded in the last 7 days, so associated first-party customer data has not been sent.

”Not enough matches for your conversions” Error

Enhanced Conversions - Not enough matches
Enhanced Conversions - Not enough matches

When using GTM or GTAG, discrepancies may occur in dynamic data. For example, the likelihood of receiving empty phone numbers is quite high. In such cases, this error occurs because empty data prevents proper matching between conversions and customer data.

”Setup is missing required address fields” Error

Enhanced Conversions - Missing address fields
Enhanced Conversions - Missing address fields

This error occurs when previously sent data fields are not consistently passed in subsequent conversions, disrupting the learning process. Each null value in required fields results in an average 24-hour error notification and degraded feature performance11.

Fixing Empty Fields: Shopify Liquid Example

The following code snippet is prepared for use in the Shopify Order Status Page field, transforming customer information into data layer format for enhanced conversion tracking. In addition to customer, you can also access customer data via checkout or order objects14:

{% if first_time_accessed %}
{% unless post_purchase_page_accessed %}
post_purchase_page_accessed
{% endunless %}
<script>
window.dataLayer = window.dataLayer || [];
dataLayer.push({
    event: 'get_more_info',
    getCustomerInfo: {
    {% unless customer.email == blank %}"email": "{{ customer.email }}",{% endunless %}
    {% unless customer.phone == blank %}"phone_number": "{{ customer.phone }}",{% endunless %}
    {% unless customer.first_name == blank %}"first_name": "{{ customer.first_name }}",{% endunless %}
    {% unless customer.last_name == blank %}"last_name": "{{ customer.last_name }}",{% endunless %}
    "address": [{
        {% unless customer.addresses[0].street == blank %}"street": "{{ customer.addresses[0].street }}",{% endunless %}
        {% unless customer.addresses[0].city == blank %}"city": "{{ customer.addresses[0].city }}",{% endunless %}
        {% unless customer.addresses[0].province_code == blank %}"region": "{{ customer.addresses[0].province_code }}",{% endunless %}
        {% unless customer.addresses[0].zip == blank %}"postal_code": "{{ customer.addresses[0].zip }}",{% endunless %}
        {% unless customer.addresses[0].country_code == blank %}"country": "{{ customer.addresses[0].country_code }}"{% endunless %}
    }],
    }
});
</script>
{% endif %}

Fixing Empty Fields: GTM Custom JavaScript Example

The data layer may be empty or undefined. Implement checks with these factors in mind:

function(){
    var obj_customer = {}
    var obj_address = {}

    if (window.hasOwnProperty('Shopify')){
        if(Shopify.checkout.email) obj_customer['email'] = Shopify.checkout.email;
        if(Shopify.checkout.billing_address.phone) obj_customer['phone'] = Shopify.checkout.billing_address.phone;
        if(Shopify.checkout.billing_address.first_name) obj_address['first_name'] = Shopify.checkout.billing_address.first_name;
        if(Shopify.checkout.billing_address.last_name) obj_address['last_name'] = Shopify.checkout.billing_address.last_name;
        if(Shopify.checkout.billing_address.address1) obj_address['street'] = Shopify.checkout.billing_address.address1;
        if(Shopify.checkout.billing_address.city) obj_address['city'] = Shopify.checkout.billing_address.city;
        if(Shopify.checkout.billing_address.province_code) obj_address['country'] = Shopify.checkout.billing_address.province_code;
        if(Shopify.checkout.billing_address.zip) obj_address['postal_code'] = Shopify.checkout.billing_address.zip;
        obj_customer['address'] = obj_address;
    }
    return obj_customer;
}
Enhanced Conversions
Enhanced Conversions

Tag Verification

During the verification phase, network activity can be monitored. Enter googleadservices.com/pagead/conversion/ in the search field to view query parameter details related to the conversion signal in the Payload section.

Google Ads - Enhanced Conversions Query Parameter
Google Ads - Enhanced Conversions Query Parameter

If customer data has been successfully captured, it will be listed alongside the em parameter. ec_mode indicates how customer data was processed: m for Manual configuration, c for Code. Parameters are separated by ~ within the request.

tv.1~
em.1nZ4hb8syB4LWVNtF-yqGoQZo3kFWcyvdio_A2gJvNw~
fn0.ltljLzY1ZMwwMlIUCc8iqFLyAy7sCZ7VlnwNAAzsYHo~
ln0.eZ75KhGvkY4_t0HfQpNPO1aO0tk6wd908bjUGieTKm8~
sa0.dskjC8o14QJxgk4s9I4Ly85pzj_VLf6KDX9foLGKYzY~
ct0.los%20angeles~
pc0.90017~
rg0.california~
co0.US

The example values above correspond to the following fields:

  • em: email
  • fn0: first name
  • ln0: last name
  • sa0: street address
  • ct0: city
  • pc0: postal code
  • rg0: region
  • co0: country

If multiple data points are defined for a customer, they can be sent to Google as an array. The absence of the em parameter in the request indicates that customer data was not associated with the conversion tag.

Google Tag Manager - Enhanced Conversions
Google Tag Manager - Enhanced Conversions

Advanced Topics

For user_data scope and precedence behavior, event-level override mechanisms, null handling, consent mode v2 integration, and scenario-based outcomes, see the Google Ads gtag.js: Conversion, Remarketing, and Cart Data Guide.

*[GCLID]: Google Click Identifier

Footnotes

  1. About enhanced conversions. Google Ads Help
  2. Manually set up enhanced conversions for web with the global site tag. Google Ads Help
  3. Hashed data: Definition. Google Ads Help
  4. Enhanced Conversions. Google Ads API
  5. Set up enhanced conversions for leads with the global site tag. Google Ads Help 2
  6. E.164. Wikipedia
  7. Fix Customer Match issues. Google Ads Help
  8. About modeled online conversions. Google Ads Help
  9. The future of attribution is data-driven. Ads & Commerce Blog
  10. How Google uses enhanced conversion data. Google Ads Ad Policy Help
  11. About the enhanced conversion tag diagnostic report for web. Google Ads Help 2
  12. Customer data policies. Google Ads Help
  13. Manually set up enhanced conversions for web with Google Tag Manager. Google Ads Help
  14. Objects. Shopify.dev
Key Takeaways
  • 01 Enhanced conversions hash first-party customer data with SHA-256 to improve conversion measurement accuracy
  • 02 Setup can be done via Google Ads panel, GTAG, GTM, or Google Ads API
  • 03 At least one of email or address fields must be provided; remove empty parameters instead of sending blank values
  • 04 Phone numbers must use E.164 format; different formats produce different SHA-256 hashes
  • 05 Empty customer data fields cause 'Not enough matches' errors; use Liquid unless checks in Shopify stores
  • 06 Check for the em parameter in Network requests to verify tag operation; ec_mode indicates setup method
Frequently Asked Questions (FAQ)
+ What data fields do enhanced conversions support?

Email, phone number, first name, last name, street address, city, region, postal code, and country code. At least email or address must be provided.

+ How do you enable enhanced conversions with GTAG?

Set allow_enhanced_conversions to true in the gtag config call. Then pass customer data via gtag('set', 'user_data', ...).

+ How do you verify the enhanced conversion tag is working?

Check the browser Network tab for googleadservices.com/pagead/conversion/ requests and confirm the em parameter is present.

+ What is the difference between enhanced conversions for web and for leads?

Enhanced conversions for web cover on-site events like sales and form submissions. Enhanced conversions for leads measure purchases from off-site channels like phone or email.

+ Why does the 'Not enough matches' error occur in the diagnostics report?

This error appears when customer data sent with the conversion tag contains empty fields. Remove the parameter entirely instead of sending blank values.

+ How long does it take for enhanced conversions to start working?

A validation and learning period of approximately 72 hours begins after activation, depending on daily conversion volume.

+ How do you fix 'Setup is missing required address fields'?

This error occurs when previously sent data fields are not consistently included in subsequent conversions. Ensure the same fields are sent consistently with every conversion.