- 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.
- 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
- Sends the same conversion
- Adds email, phone and address, hashed with SHA-256
- Google can also match on signed-in Google accounts
gclid, gbraid and wbraid: how Google links a click
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:
| Parameter | When it is present |
|---|---|
| gclid | Someone clicks your ad and goes to your website |
| gbraid | Someone clicks an ad on the web and goes to your iOS app |
| wbraid | Someone clicks an ad in an iOS app and goes to your website |
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 web | Offline conversion import | |
|---|---|---|
| When it is sent | When the conversion happens | Later, after the sale is known |
| How it is sent | By the Google tag on your site | As an upload, for example through the Google Ads API |
| How the click is found | Google's click data plus hashed customer data | A click id (gclid, gbraid or wbraid), ideally with hashed customer data |
| Typical use | Sales that complete on your website | Sales that close outside the website, for example after a phone call |
| In ROASaurus | Yes, from the Shopify checkout | No |
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 key | Taken from the Shopify checkout |
|---|---|
| The email address the customer entered | |
| phone_number | The phone number, if the customer entered one |
| address.first_name, address.last_name | The name on the billing address |
| address.street | The first line of the billing address |
| address.city, address.region, address.postal_code | City, region and postal code of the billing address |
| address.country | The country code of the billing address |
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 allowedcheckout_completedShopify reports the completed checkout to the pixelgtag('set', 'user_data')Email, phone and billing address are set as user datagtag('event', 'conversion')The purchase conversion is sent with the order id as transaction_idgtag('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 value | Multiplier 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 Ads | 300% | 120% |
| Break-even target ROAS | 250% | 100% |
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.
- Find your conversion ID and label
In Google Ads, open the tag setup of your purchase conversion action. The event snippet contains a
send_tovalue such as AW-123456789/AbCdEfGhIjK. The number after AW- is the conversion ID, and the part after the slash is the conversion label. - 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.
- 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.
- 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.
- Place a test order
Complete an order in your store and check the conversion request, as described below.
- 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
- Google Ads Help: About enhanced conversions
- Google Ads Help: Set up enhanced conversions for web using the Google tag
- Google Ads Help: Use a transaction ID to minimize duplicate conversions
- Google Ads API: Manage offline conversions
- Google Ads Help: About primary and secondary conversion actions
In ROASaurus
- Google Ads integration
- Shopify integration
- Help: set up ROASaurus on Shopify
- ROAS and break-even ROAS calculator