SEM
Set up Google Ads enhanced conversions
I set up Google Ads enhanced conversions when a store still fires a purchase tag but Google Ads cannot join that order back to the click. Cookies drop, consent is denied, and Smart Bidding trains on a hole. I am a Gold Coast web developer with 18 years on storefronts. Paid search only works if the landing page, the feed and the conversion tags tell the same story. In 2026 that story has to include hashed first-party data, not only a pixel that hopes the browser still has a cookie.
This note is a production setup. If you already send a purchase conversion to Google Ads, you still need this layer. The conversion action can look healthy while match rate sits in the mud. Collect the identifiers checkout already has, hash them, send them with the conversion, and keep Consent Mode honest.
Why Google Ads enhanced conversions matter in 2026
Google Ads enhanced conversions matter in 2026 because third-party cookies no longer carry a purchase back to the ad that earned it. Google's own enhanced conversions help describes the idea in one line: you send hashed first-party data (email, phone, address) with the conversion so Google can match against signed-in accounts. That match is how you recover cross-device orders, Safari users, and people who cleared storage before they paid.
I still see accounts that treat this as optional polish. It is not. Smart Bidding needs conversions it can trust. If the only signal is a browser cookie that never survived checkout, the algorithm bids on a sample. Remarketing lists shrink. Brand Search looks like it "still works" because last click is easy, while Shopping and Performance Max look like they fell off a cliff. The store did not stop selling. Measurement stopped seeing the sale.
Consent made this worse, not better. If ad_user_data never goes to granted, hashed identifiers are not supposed to ship. A CMP banner that looks finished can still leave Google Ads with cookieless pings and no match. I cover that pairing in Consent Mode v2 for paid media tracking. Enhanced conversions without consent signals is a setup that fails quietly.
How Google Ads enhanced conversions actually work
Google Ads enhanced conversions work by taking identifiers the customer already typed at checkout, hashing them with SHA-256, and attaching them to the conversion you already fire. Google then tries to match those hashes to Google accounts. You do not send a raw email to Google Ads. The Google tag or Tag Manager hashes in the browser, or your server hashes before the Measurement Protocol or enhanced conversions for leads payload leaves the origin.
There are two flavours you will actually ship.
Enhanced conversions for web sit on the same conversion action as your page-load or event snippet. You enable the setting in Google Ads, then provide user data through the Google tag, through GTM's user-provided data variable, or through CSS selectors that scrape the thank-you page. Selectors are the last resort. They break the moment a theme moves a field. A dataLayer push with email, phone_number and address parts is the production path.
Enhanced conversions for leads are for forms where the sale happens later: quote, demo, wholesale application. You hash at submit, then you import the offline conversion with a GCLID or with the same hashed identifiers when the CRM marks the deal won. Stores that only sell on the site can ignore leads. Stores with a trade desk cannot.
The identifier quality decides match rate. A guest checkout that never asked for email will not match. A checkout that asks for email then stores it only in the order admin, never on the thank-you dataLayer, will not match. Phone numbers need the country code. Address needs at least country and postcode to be useful. First name and last name help. Fake test orders with test@test.com pollute diagnostics and teach you nothing.
I wire this next to GA4 ecommerce events that match real revenue. The purchase event and the Ads conversion should share the same transaction ID, value, currency and items. If GA4 says $180 and Ads says $180 on a different order number, you will double-count when you import. One source of truth for the order, two destinations.
On Shopify the thank-you page is not always yours. Checkout extensibility and additional scripts have different lives. The reliable pattern is a web pixel or a server event that already knows the order email, not a CSS selector hunting for a span. On WooCommerce the order-received page still exists, but block checkout can change the DOM. On Magento the success page is usually a custom template. In every case I would rather read the order object than scrape HTML.
Production checklist for hashed first-party data
A store is ready for enhanced conversions when the conversion action, the tag and the consent update all agree.
- Confirm the conversion action in Google Ads is the one Smart Bidding actually uses. Primary conversions only. Secondary page views do not need hashing.
- Turn on enhanced conversions for that action. Google Ads will show a tag method: Google tag, GTM, or Google tag with GTM. Pick the one you already load. Do not add a second gtag.js.
- Decide the data source. Preferred: dataLayer or server order payload. Acceptable: GTM user-provided data from a dataLayer variable. Avoid: CSS selectors on a theme you do not control.
- Map email, phone and address fields to the names Google expects. Empty fields are fine. Wrong fields (order ID in the email slot) are not.
- Hashing stays automatic in GTM and gtag. If you hash yourself on the server, hash UTF-8 trimmed lowercase email, then SHA-256. Do not double-hash.
- Fire the conversion once per order. Deduplicate with the transaction ID. A thank-you reload must not send a second conversion.
- Set Consent Mode defaults before the Google tag. On grant, update
ad_storageandad_user_datatogether. Enhanced conversions needad_user_datagranted to send user data. - Exclude your own IPs and staging hosts. Hashed staff emails in diagnostics look like a match-rate problem.
- Place a test order with a Gmail address you own. Watch Tag Assistant for
user_dataon the conversion, then wait for the Google Ads diagnostics card. - Compare seven days of Ads conversions to gateway orders, not to GA4 last-click. They will never match one-to-one. You want the same direction and a stable gap.
Old accounts often have three conversion actions for purchase, two of them still primary. Hashing the wrong one is a wasted week.
What breaks when the hash never matches
The hash never matches when the data never existed, arrived late, or arrived without consent.
CSS selectors are the classic break. A developer points GTM at #customer-email. The theme ships a new checkout. The selector still "works" in preview because the old class is on a hidden newsletter field. Google hashes the newsletter address, not the buyer. Match rate looks random.
Duplicate tags are the next break. Theme pixel plus GTM plus an app that injects gtag. Each fires a conversion. Enhanced conversions cannot save you from double counting. You will see conversions above orders and CPA that looks heroic until finance asks why revenue in Ads is 140 percent of the gateway.
Consent timing is the silent break. Default denied is correct. If the CMP updates consent after the purchase event, user data is stripped. Advanced Consent Mode still sends a cookieless ping, so the conversion exists as modelled, but you get no match. People then say "enhanced conversions did nothing." It never got the email.
Value and currency mismatches look like a hashing problem and are not. If the tag sends value in dollars and the account is in AUD, or shipping is included in one system and excluded in the other, diagnostics will not mention hashing. Check the conversion payload first.
Server-side tagging introduces a different break. You forward the event, but you forget to include user_data in the event that leaves sGTM. The browser had the email. The server hit did not. I would rather send a slightly later server purchase with full user data than an instant browser event with none.
Test data in production is a match-rate killer. Placeholders, plus-addressing that is not a real inbox, and orders placed by the founder's personal Gmail on every deploy all skew the card. Use a dedicated test property or a filter.
How to measure match rate and recovered conversions
You measure enhanced conversions in Google Ads, not in GA4. Open the conversion action. The diagnostics card reports whether user-provided data is present and a qualitative match rate. Google does not promise a public percentage that you can put in a board pack. Treat "good" as "data is present on most converting sessions and the action is eligible." Treat "needs attention" as a code bug until proven otherwise.
Then compare three numbers for the same date range, conversion lag included:
- Gateway orders and revenue (truth).
- Google Ads conversions and conversion value for the primary purchase action.
- GA4
purchaseevent count and revenue.
Ads will usually sit between GA4 and the gateway once modelling and view-through are in play. If Ads is far above the gateway, you have duplicates or a thank-you fire on non-purchase pages. If Ads is far below, you have consent loss, a blocked tag, or a conversion action that is not receiving the new tag.
Give it two weeks after a clean launch before you judge Smart Bidding. Bidding models need volume. A boutique Shopify store with 20 orders a week will not show a miracle on day three. A Magento catalogue with daily volume will show whether the gap closed sooner.
I do not invent lift numbers for my own work. On Their Nibs the published story is the storefront rebuild: 31 percent more conversions, 48 percent more orders. That was merchandising and journey, not a pixel change. On retail conversion at scale year-on-year sales rose $2.5 million over three years across three Magento stores. Measurement was part of that work. It was never a substitute for the offer.
Related work on this site
The Magento retail work is where I learned to treat gateway revenue as the referee. The retail conversion at scale case is operations, merchandising and measurement on three stores, not a tag tutorial. The Their Nibs Shopify rebuild is the other end: a fashion storefront where purchase journey and theme quality moved conversion. Enhanced conversions sit under both. If the page cannot sell, hashing will not save the account. If the page can sell and Ads cannot see it, you will turn off the campaigns that were working.
FAQ
Do I need Google Ads enhanced conversions if I already have a purchase pixel?
Yes. The purchase pixel tells Google that a conversion happened in that browser. Google Ads enhanced conversions add hashed first-party identifiers so Google can match the person when the cookie is gone. You keep the pixel. You add the hash. They are not substitutes.
Can Google Ads enhanced conversions replace Consent Mode?
No. Consent Mode decides whether ads storage and user data are allowed. Google Ads enhanced conversions only send user data when ad_user_data is granted. Turning on hashing while leaving consent at default denied forever means you never send the identifiers. Set both.
Should Google Ads enhanced conversions be tagged with CSS selectors?
Only if you cannot reach the order object. Selectors break on theme updates. A dataLayer event with email and phone, or a server event from the order API, is the setup I will defend in six months. Selectors are a stopgap on a thank-you page you do not own yet.
How long until Google Ads enhanced conversions show a match rate?
Diagnostics can take a few days to populate after the first valid conversions. Match rate is not a live debug tool. Use Tag Assistant to confirm user_data on the hit the same day, then read the Google Ads card after you have a week of real orders, not test clicks.
Keep reading
Contact if you want this kind of work on a live store.