Google Ads enhanced conversions for Shopify: setup and verification

Hashed customer data, consent and how to verify it works.

Enhanced conversions let Google Ads match a purchase to an ad click even when cookies are missing, by sending hashed customer data (email, phone, name and address) with the conversion. On a Shopify store, they usually recover a noticeable share of conversions that would otherwise go unattributed, and they give Smart Bidding better signals. Here is how to set them up with each method, how consent fits in, and how to check they work.

How enhanced conversions work

  1. A customer clicks your ad and buys.
  2. Your tag sends the purchase to Google Ads with the customer’s email and other details, hashed with SHA-256 before they leave the browser or your server.
  3. Google compares the hashes with signed-in Google accounts and attributes the conversion to the click, even if the click ID or cookie was lost.

Google receives a hash, not the email itself. You still need the customer’s consent for advertising use of their data, which is what Consent Mode’s ad_user_data signal expresses.

Before you start

  • Accept the customer data terms in Google Ads: Goals → Settings → Enhanced conversions for web. Choose the method you will use (Google tag, GTM or API).
  • Have one primary purchase action. If two purchase actions are primary, enhanced conversions just make the double counting more precise. See Google Ads conversions not tracking on Shopify.
  • Have Consent Mode v2 working, with ad_user_data following the visitor’s marketing choice. See Consent Mode v2 on Shopify.

Option 1: the Google & YouTube app

If the app sends your Google Ads conversions, enable enhanced conversions in the app’s conversion settings. The app sends the customer data from Shopify, and Google’s server-to-server connection for app users strengthens it further.

Good for: stores that rely on the app for Google Ads. Limit: you can’t see or adjust which fields are sent, and you must not have another tag sending the same purchase.

Option 2: Google Tag Manager in a custom pixel

The checkout data in Shopify’s checkout_completed event contains the email, phone and addresses. Push them to the data layer only when the visitor allowed marketing:

let marketingAllowed = init.customerPrivacy.marketingAllowed;
customerPrivacy.subscribe("visitorConsentCollected", (e) => {
  marketingAllowed = e.customerPrivacy.marketingAllowed;
});

analytics.subscribe("checkout_completed", (event) => {
  const c = event.data.checkout;
  const a = c.billingAddress || c.shippingAddress || {};
  window.dataLayer.push({
    event: "purchase_user_data",
    user_data: marketingAllowed ? {
      email: c.email || undefined,
      phone_number: c.phone || a.phone || undefined,
      address: {
        first_name: a.firstName,
        last_name: a.lastName,
        street: a.address1,
        city: a.city,
        region: a.provinceCode,
        postal_code: a.zip,
        country: a.countryCode
      }
    } : undefined
  });
});

Push this before your purchase event, or merge user_data into the purchase push itself. Then in GTM:

  1. Create a User-Provided Data variable, type “Code”, that returns {{DLV - user_data}}, or map each field manually.
  2. In your Google Ads conversion tag for the purchase, check Include user-provided data from your website and select the variable.
  3. In the Google tag, enable the same user-provided data setting if you also want it for GA4-linked audiences.

Send the values raw: Google’s tag normalizes and hashes them. If you hash them yourself, follow Google’s normalization rules exactly (lowercase, trimmed, phone in E.164 format), otherwise nothing matches. Phone numbers from Shopify are often stored without the country code, so check a few real orders.

The rest of the purchase data layer is in building a full ecommerce dataLayer from a Shopify custom pixel.

Option 3: server-side GTM

With server-side GTM, the browser sends the purchase with the user data to your server container, and the Google Ads conversion tag there forwards it. You can also enrich the conversion with data from Shopify’s order webhook, which doesn’t depend on the browser at all. This is the most complete option, and it’s how I set up stores that spend significantly on Google Ads. See Shopify server-side tracking and Google & YouTube app vs server-side GTM.

Which fields matter

FieldImportanceShopify source
EmailEssential, the strongest match keycheckout.email
PhoneStrong, if in international formatcheckout.phone or the address phone
First and last name, postal code, countryUseful together, never aloneBilling or shipping address
Street, city, regionAdds matching for some usersBilling or shipping address

How to verify it works

  1. In the browser: place a test order with marketing consent accepted, open the Network tab, and find the Google Ads conversion request (filter on googleadservices or pagead/conversion). It should carry an em parameter with hashed data.
  2. With consent refused: repeat with a refusal. No hashed data should be sent.
  3. In Google Ads: open the purchase conversion action and its Diagnostics tab. After 48 to 72 hours, it shows whether enhanced conversions are recording, the match coverage and any issues such as missing or badly formatted fields.
  4. In server-side GTM: use preview mode and check that the Google Ads tag receives user_data.

Common problems

  • “Enhanced conversions not detected”: the user data isn’t reaching the tag, often because the variable is empty on the purchase event. Check the order of your data layer pushes.
  • Low coverage: consent refused by many visitors, or fields missing. Email should be present on nearly every order.
  • Badly formatted phone numbers: normalize to E.164 (for example +33612345678) if you hash yourself.
  • Data sent without consent: a compliance risk. Tie the user data to the marketing permission as in the code above.
  • Two methods at once: the app and GTM both sending purchases with user data. Keep one.

Frequently asked questions

Do enhanced conversions work with the Google & YouTube app?

Yes. Enable them in the app’s conversion settings and accept the customer data terms in Google Ads.

Are enhanced conversions GDPR compliant?

They send hashed customer data to Google for advertising, so they require the visitor’s consent for advertising use of their data (ad_user_data in Consent Mode v2). Have your legal team validate the setup.

How long does it take to see enhanced conversions working?

Usually 48 to 72 hours before the diagnostics in Google Ads show their status and coverage.

Do I need to hash the data myself?

No. Google’s tag hashes it for you. If you hash it yourself, follow Google’s normalization rules exactly.

Enhanced conversions are part of my Professional package (3,500€), which sets up server-side tracking for Google Ads, Meta and your other platforms. See the Shopify tracking packages or book a free 30-minute call.

Elliot Latil

Full Stack Web Analytics expert: GA4, GTM, server-side tracking and Shopify. About me