Ad platforms and webshops

Google Ads enhanced conversions on Shopify

Enhanced conversions add hashed customer data to Google Ads purchases on Shopify. How they work, how they differ from offline imports, and the setup.

·Updated ·9 min read·By the ROASaurus team

Key takeaways
  • Enhanced conversions add hashed first-party customer data, such as the buyer's email address, to a Google Ads conversion when it happens.
  • Google matches the hashed data to Google accounts that were signed in when the person engaged with your ad.
  • Offline conversion imports are different: you upload conversions later, identified by a click id such as gclid, gbraid or wbraid.
  • In ROASaurus, Google Ads conversions fire in the browser from the Shopify checkout custom pixel, with the order id as transaction_id, and only on Shopify.
  • Enhanced conversions also need to be turned on in your Google Ads conversion settings, where you accept Google's customer data terms.

Enhanced conversions are a Google Ads feature that adds hashed first-party customer data, such as the buyer's email address, phone number or address, to a conversion when it happens. Google matches that data to Google accounts that were signed in when the person engaged with your ad. Google says this can improve the accuracy of your conversion measurement.

On Shopify, the natural place to send this data is the checkout, where the customer has just entered it. This guide explains how enhanced conversions work, the role of gclid, gbraid and wbraid, how enhanced conversions differ from offline conversion imports, what Shopify's checkout provides, and exactly how ROASaurus sends them.

What are enhanced conversions?

A standard Google Ads conversion tag reports that a conversion happened, with a value and an order id. Google then has to connect it to an ad click, usually through the click id from the landing page. When that link is missing, the conversion may not be attributed to your campaign.

Enhanced conversions add a second route. With the conversion, the tag sends customer data such as the email address. The data is hashed with SHA-256, a one-way algorithm, before it is sent. Google uses the hashed data to match your customer to a Google account that was signed in when they engaged with your ads.

Google offers two versions. Enhanced conversions for web, the one this post is about, improves the measurement of sales on your website. Enhanced conversions for leads is for sales that close offline after a lead form on your site, and works together with imported offline conversions.

Standard conversion tag
  • Sends the conversion with value, currency and transaction_id
  • Relies on the click id and Google cookies to find the ad click
  • Sends no customer data
With enhanced conversions
  • Sends the same conversion
  • Adds email, phone and address, hashed with SHA-256
  • Google can also match on signed-in Google accounts
Enhanced conversions do not replace the conversion tag. They add customer data to it.

With auto-tagging on, Google adds a parameter called gclid to the landing page URL when someone clicks your ad. Two more parameters cover clicks that involve an iOS app:

ParameterWhen it is present
gclidSomeone clicks your ad and goes to your website
gbraidSomeone clicks an ad on the web and goes to your iOS app
wbraidSomeone clicks an ad in an iOS app and goes to your website
Definitions from Google's Google Ads API documentation. All three identify the ad click a conversion belongs to.

ROASaurus captures all three on the landing page and stores them with the visitor, so Google clicks appear under Google in its attribution reports. The conversion itself is sent by Google's own tag, which does its own click matching. Enhanced conversions give that tag customer data to match on as well.

How do enhanced conversions differ from offline conversion imports?

Both send first-party data to Google Ads, so they are easy to confuse. They solve different problems.

Enhanced conversions for webOffline conversion import
When it is sentWhen the conversion happensLater, after the sale is known
How it is sentBy the Google tag on your siteAs an upload, for example through the Google Ads API
How the click is foundGoogle's click data plus hashed customer dataA click id (gclid, gbraid or wbraid), ideally with hashed customer data
Typical useSales that complete on your websiteSales that close outside the website, for example after a phone call
In ROASaurusYes, from the Shopify checkoutNo
A webshop purchase completes on the website, so enhanced conversions for web fit it. Offline imports are for sales the tag never sees.

For an offline import through the Google Ads API, each conversion references a conversion action of the upload type and carries the click id saved when the visitor landed, plus customer data where available. That is the right tool when the sale closes by phone or in a store. A Shopify order completes on your website, while the tag is running, so it does not need an upload.

What customer data does Shopify's checkout provide?

The Google tag expects the data in a user_data object with fixed keys. A completed Shopify checkout can fill all of them.

user_data keyTaken from the Shopify checkout
emailThe email address the customer entered
phone_numberThe phone number, if the customer entered one
address.first_name, address.last_nameThe name on the billing address
address.streetThe first line of the billing address
address.city, address.region, address.postal_codeCity, region and postal code of the billing address
address.countryThe country code of the billing address
The keys from Google's setup guide for the Google tag, filled from the completed Shopify checkout.

Google sets a minimum for each conversion: an email address, or a first name, last name, postal code and country. A phone number only counts together with an email address or a full name and address. Google also asks you to leave out a field you do not have instead of sending it empty, and to use the E.164 format for phone numbers, such as +14155550123.

You do not hash these values yourself when you use the Google tag. Google's guide asks for unhashed values in user_data: the tag normalizes and hashes them before it sends them. Pre-hashed values are also possible, but they use different keys.

How ROASaurus sends enhanced conversions from Shopify

In ROASaurus, Google Ads is set up as a pixel, but it is not a server-side connection. It runs inside the ROASaurus custom pixel in Shopify's checkout, which Shopify loads in a sandbox. The Google Ads integration page lists every setting. When an order completes, this happens in the shopper's browser:

gtag('config', 'AW-123456789')The checkout loads the Google tag with enhanced conversions allowed
checkout_completedShopify reports the completed checkout to the pixel
gtag('set', 'user_data')Email, phone and billing address are set as user data
gtag('event', 'conversion')The purchase conversion is sent with the order id as transaction_id
The order of calls in the checkout pixel. Everything runs in the shopper's browser, inside Shopify's checkout.
The purchase conversion ROASaurus sends (example values)
gtag('event', 'conversion', {
  send_to: 'AW-123456789/AbCdEfGhIjK',
  transaction_id: '5512345678901',
  value: 84,
  currency: 'USD',
  new_customer: true,
  items: [
    { id: 'shopify_US_8123456789_44123456789', price: 42, quantity: 2, google_business_vertical: 'retail' }
  ]
});

Each part has a job:

  • transaction_id is the Shopify order id. If the same order is ever reported twice, Google Ads sees two conversions with the same transaction ID for the same conversion action. It treats the second one as a duplicate and does not count it.
  • value is Shopify's checkout total, which includes taxes and duties, multiplied by the Conversion value multiplier if you set one.
  • items use the Merchant Center format by default: shopify_, your store's country code, the product id and the variant id. That way the items can match your Google product feed. You can set your own Item ID template instead.
  • new_customer is true for a customer's first order and false for a returning customer, when Shopify knows it.

Optional conversion labels

Besides the purchase label, you can add a Begin checkout conversion label, which sends a conversion when checkout starts, and a New customer purchase label, which sends a second conversion only for first orders. That second conversion goes to a different conversion action. Google deduplicates transaction IDs per conversion action, so a first order counts once in each of the two actions. Set the new customer action to secondary unless you want to bid on it: secondary actions are reported in All conversions but are not used for bidding.

Reporting margin instead of revenue

The conversion value multiplier changes the value Google receives. Set it to your gross margin rate, and the conversion value becomes an estimate of gross profit instead of revenue. Take an example store with a 40% gross margin rate and one campaign:

Revenue as valueMultiplier 0.4
Revenue from 50 orders$6,000$6,000
Conversion value in Google Ads$6,000$2,400
Ad spend$2,000$2,000
ROAS shown by Google Ads300%120%
Break-even target ROAS250%100%
Example store. With margin values, Google's ROAS works like POAS: above 100%, the orders the ads bring in pay for the ads.

On revenue, break-even ROAS is 1 ÷ 0.40 = 2.5, which Google shows as a target ROAS of 250%. On margin values, break-even is always 100%, which is easier to read across products. A fixed multiplier is still an estimate: it gives every product the same margin. If your margins differ a lot, compare campaigns on POAS from real order costs as well. ROASaurus can also send your store's average contribution margin as the value and, once your Google Ads account is connected, replace it later with each order's real margin through conversion adjustments. The break-even ROAS guide shows how to work out the margin rate to use.

One detail changes the multiplier: Shopify's checkout total includes taxes. Your gross margin rate is based on revenue without tax. If your prices include 20% VAT, a 40% margin on revenue without VAT is 0.40 ÷ 1.20 = about 0.33 of the checkout total, so 0.33 is the multiplier to use.

Limits

  • Shopify only. The conversion fires from Shopify's checkout. On WooCommerce and the other webshops, ROASaurus uses Google click ids for attribution and for lead uploads, but does not send purchase conversions to Google Ads.
  • Browser, not server. If a shopper's browser blocks Google's tag, or the page where Shopify fires the completed checkout event does not load, the conversion is not sent. With Respect visitor consent on, the Google tag loads only for shoppers who allow marketing cookies. See the consent and privacy guide.
  • Spend needs a connected account. Google Ads spend comes in once you connect the Google Ads account under Setup › Ad spend; until then ROAS and profit in ROASaurus leave it out.

How to set up enhanced conversions on Shopify

You need a Google Ads purchase conversion action, the ROASaurus app on your Shopify store and access to Shopify's customer events settings.

  1. Find your conversion ID and label

    In Google Ads, open the tag setup of your purchase conversion action. The event snippet contains a send_to value such as AW-123456789/AbCdEfGhIjK. The number after AW- is the conversion ID, and the part after the slash is the conversion label.

  2. Turn on enhanced conversions in Google Ads

    In Goals, open Settings, expand Enhanced conversions, turn them on and accept the customer data terms. When Google asks for the method, choose the Google tag with a code snippet.

  3. Add the Google Ads pixel in ROASaurus

    Go to Tracking & platforms, click Add pixel on the Google Ads card, and fill in Conversion ID and Purchase conversion label. Add the begin checkout and new customer labels if you use them.

  4. Add the checkout pixel in Shopify

    In Shopify admin › Settings › Customer events, add a custom pixel named ROASaurus, set permission to "Not required" and paste the snippet from your Tracking & platforms page. ROASaurus applies Respect visitor consent itself. The Shopify setup guide shows each step.

  5. Place a test order

    Complete an order in your store and check the conversion request, as described below.

  6. Keep one primary purchase action

    If another conversion action also counts Shopify purchases, for example one created by another app, set it to secondary.

How do you check that enhanced conversions work?

Google describes two checks. The first works right away. Open Chrome DevTools during your test order, go to the Network tab and filter on "google". Find the conversion request and look for a parameter em whose value starts with tv.1~em followed by a hashed string. That is the hashed customer data.

The second check takes time. The Diagnostics report for enhanced conversions in Google Ads becomes available about 72 hours after you set it up. Google says the impact shows in reporting after about 30 days.

Sources

  1. Google Ads Help: About enhanced conversions
  2. Google Ads Help: Set up enhanced conversions for web using the Google tag
  3. Google Ads Help: Use a transaction ID to minimize duplicate conversions
  4. Google Ads API: Manage offline conversions
  5. Google Ads Help: About primary and secondary conversion actions

In ROASaurus

Keep reading

Ad platforms and webshopsCash on delivery conversion tracking and external checkoutsCash on delivery conversion tracking: why pixels miss COD and external checkout orders, when to send the purchase, and how to handle refused orders.Ad platforms and webshopsCCV Shop conversion tracking: a setup guideCCV Shop conversion tracking: send paid orders to Meta and TikTok with a signed webhook, link them to ad clicks, set up, test and handle late payments.Ad platforms and webshopsLightspeed conversion tracking for eCom webshopsLightspeed conversion tracking for eCom (C-Series): send paid orders to Meta and TikTok from the server, link them to ad clicks, set it up and test it.
FAQ

Questions, answered

What are enhanced conversions in Google Ads?

Enhanced conversions add hashed first-party customer data, such as an email address, to a conversion. Google matches it to signed-in Google accounts to improve the accuracy of conversion measurement.

Do I need to hash the data myself?

Not with the Google tag. Google asks for unhashed values in user_data, and the tag normalizes and hashes them with SHA-256 before it sends them.

Are enhanced conversions the same as offline conversion imports?

No. Enhanced conversions for web are sent by the tag when the conversion happens. Offline conversion imports upload conversions later, identified by a click id such as gclid, gbraid or wbraid.

Does ROASaurus send Google Ads conversions server-side?

Purchases fire from the browser inside Shopify's checkout. From the server, once your Google Ads account is connected, ROASaurus corrects their values later through the Google Ads API, uploads CRM lead stages as offline click conversions and sends in-store sales as store sales events.

Can I use ROASaurus for Google Ads conversions on WooCommerce?

Not for purchases. Purchase conversions work on Shopify only, because they fire from the Shopify checkout. On other webshops ROASaurus uses gclid, gbraid and wbraid for attribution and for uploading CRM lead stages as offline conversions.

How long until I see results?

Google says the enhanced conversions Diagnostics report is available about 72 hours after setup, and the impact shows in reporting after about 30 days.

Every sale, traced to the ad that earned it

Server-side tracking, profit and lifetime value in one app. 14-day free trial, no credit card.

Start your free trial →