GuideServer-Side~15 min

Google Ads CAPI

Technical guide for media buyers: Server Conversions + Enhanced Conversions. sGTM architecture, deduplication, EU consent, troubleshooting.

Connectors0/2
Google Ads Conversion ID
Google Ads > Conversions. e.g. AW-XXXXXXXXX
Google Ads Conversion Label
Google Ads > Conversions. e.g. AbCdEfGhIj

1Role / Purpose

Google Ads Enhanced Conversions is the server-side destination for Google Ads conversions. It occupies a specific place in the stack:

Shopify Store
  ↓
GTM Web (DataLayer + Consent Mode v2)
  ↓
GA4 (technical transport)
  ↓
sGTM (Server-Side GTM)
  ↓
┌─────────────────────────────────────┐
│  GADS – Conv – purchase (sGTM tag)  │  ← This guide
│  Enhanced Conversions enabled        │
│  Automatic SHA-256 hashing           │
└─────────────────────────────────────┘
  ↓
Google Ads Conversions API

This setup delivers:

  • 100% server-side Google Ads tracking
  • Strict GDPR compliance (EU consent mandatory)
  • Better resilience against adblockers
  • Improved attribution through Enhanced Conversions
  • Deterministic deduplication

The system rests on a single source of conversions: the GTM Web DataLayer, carried through GA4 to the sGTM, then routed to Google Ads.

2Overall Architecture

Full data flow

Cookiebot (EU CMP)
      ↓
GTM Web (Consent Mode v2 + DataLayer)
      ↓
GA4 (technical transport only)
      ↓
Server-Side GTM (sGTM)
      ↓
Addingwell Google Ads template
      ↓
Google Ads Conversions API

sGTM routing

The sGTM container receives the GA4 events and routes them to each destination. Google Ads is one of them:

sGTM (server)
→ GA4 Client (receives the request)
  ├── GA4 Server tag → Google Analytics 4
  ├── META – CAPI – All Events → Meta (Full CAPI)
  ├── GADS – Conv – purchase → Google Ads Enhanced Conversions  ← This guide
  └── (coming soon) TikTok Events API, Snap CAPI

Core principles

  • No Google Ads tag directly in the theme
  • No duplicate client + server conversion
  • One purchase source only: the GTM Web dataLayer
  • Consent required before anything is sent
  • GA4 used as technical transport
  • The Remarketing tag stays client-side for audiences

Single source of conversions

Every conversion comes exclusively from:

GTM Web → dataLayer purchase → GA4 event → sGTM

Nothing may be sent directly from:

  • A browser-side Google Ads tag
  • The Shopify theme
  • An external app

3Enhanced Conversions in Detail

Enhanced Conversions architecture

Enhanced Conversions (EC) is enabled by default on the sGTM tag GADS – Conv – purchase. User data is hashed server-side automatically by Addingwell, with no manual step.

Parameter
Value
Mode
Server-side (sGTM)
Enhanced Conversions
Enabled (hashed first-party data)
Deduplication
transaction_id = conversion_id
Attribution cookies
gclid, wbraid, gbraid (1P cookies, cookie restore)
Consent transport
Consent Mode v2 signals forwarded to the server

Data sent (first-party)

The following is collected after consent and hashed SHA-256 server-side before reaching Google:

  • Email (SHA-256 hash)
  • Phone (SHA-256 hash)
  • Optionally first / last name (SHA-256 hash)
  • Address (SHA-256 hash)

How EC improves matching

Google uses this hashed data to match the conversion back to the original Google Ads click, even when the gclid cookie is missing or expired. The match rate rises significantly, which means better attribution and more efficient bidding.

Without EC:
Google Ads click → gclid cookie → purchase → Match (if cookie present)

With EC:
Google Ads click → gclid cookie → purchase → Match via gclid
                                           → Match via email (hash)
                                           → Match via phone (hash)
                                           → Match via address (hash)

= Higher match rate, even without a cookie

Server-side hashing

Data security

PII is hashed server-side only (sGTM). No PII travels in clear text through browser requests. Hashing is automatic through the Addingwell template.

Rules that matter

  • Data collected only after consent (ad_storage + ad_user_data)
  • Hashed SHA-256 before it reaches Google
  • Never sent in clear text
  • Hashing happens in the sGTM, not on the client

4Events & Parameters

Primary conversion

User actionGA4Google Ads
PurchasepurchaseConversion Action

Parameters forwarded

  • transaction_id
  • value
  • currency
  • items (when needed)
  • gclid / wbraid / gbraid
  • hashed user_data (Enhanced Conversions)

5Deduplication Logic

Global unique identifier

transaction_id = conversion_id

The same identifier is used for:

  • GA4 purchase
  • Google Ads conversion
  • sGTM logs

Rules

  • One purchase in the dataLayer, and only one
  • No second client-side Google Ads send
  • No double mapping in the sGTM
  • No conversion imported in parallel

6Google Attribution Identifiers

gclid

  • Google Ads URL parameter
  • Persisted as a first-party cookie (_gcl_aw)
  • Takes priority for attribution
  • Addingwell cookie restore rewrites it first-party

wbraid / gbraid

  • Used in iOS / privacy environments
  • gbraid: cross-device attribution (app→web)
  • wbraid: web-to-app attribution, iOS 14.5+
  • Forwarded when present

Attribution cookies (first-party)

Attribution cookies are persisted first-party by Addingwell (cookie restore), surviving Safari ITP and browser purges:

CookieParameterUsage
_gcl_awgclidClick ID: Google Ads conversion attribution
_gcl_gbgbraidClick ID: cross-device attribution (app→web)
_gcl_gwwbraidClick ID: web-to-app attribution, iOS 14.5+

Forwarding to the server

  1. 1Read in GTM Web
  2. 2Injected into the GA4 event
  3. 3Forwarded to the sGTM through the first-party transport
  4. 4Injected into the Addingwell Google Ads template

7Configuration

Required credentials

ParameterSourceLocation
Conversion IDGoogle Ads > Conversions > SettingsGTM Server variable
Conversion LabelGoogle Ads > Conversions > SettingsGTM Server variable

sGTM tag

The GADS – Conv – purchase tag is configured in the sGTM container through the Addingwell template. Enhanced Conversions is on by default.

Enhanced Conversions in Google Ads

  1. 1Go to Google Ads > Conversions > Settings
  2. 2Enable "Enhanced Conversions"
  3. 3Pick "Google Tag Manager" as the method
  4. 4Check that diagnostics confirm the data is arriving

Remarketing tag

The Remarketing tag stays client-side in GTM Web for Google Ads audiences. Only the purchase conversion goes through the sGTM.

Consent is handled exclusively through:

Cookiebot + GTM Consent Mode v2

Signals Google Ads requires

SignalRequiredCookiebot category
ad_storageYesMarketing
ad_user_dataYesMarketing

Without analytics / marketing consent

  • No conversion sent
  • No gclid forwarded
  • No user data sent
  • Enhanced Conversions do not work without consent

9Verification

Where to check

  1. 1Google Ads > Conversions > Diagnostics: check that Enhanced Conversions are being received
  2. 2Google Ads Tag Assistant: validate the conversion tag and EC
  3. 3sGTM Preview — confirm the GADS – Conv – purchase tag fires
  4. 4DevTools > Application > Cookies: check that the gclid, wbraid and gbraid cookies are present

Phase 3: Google Ads checklist

Google Ads-specific verification, lifted from the full QA process:

Google Ads Enhanced Conversions0/4

10Reading the Google Ads Metrics

Why conversions sometimes differ from clicks

Expected causes:

  • Consent declined
  • Multi-device users
  • Cookie blocking
  • Attribution delays
  • Modelled conversions

Why GA4 ≠ Google Ads

GA4

Based on analytics sessions

Google Ads

Based on ad clicks

The two use different logic. A gap between them is normal.

11Metrics You Can Optimise On

The KPIs worth watching:

  • Cost per Conversion
  • ROAS
  • Conversion Value
  • Post-consent conversion rate
  • Server-side conversion volume

12Responsibilities Matrix

Tracking Team
  • dataLayer purchase
  • gclid / wbraid persistence
  • Consent enforcement
  • Deduplication
  • sGTM integrity
GAds Team
  • Conversion Action setup
  • Bidding strategy
  • Performance analysis
  • Reading attribution
Shared responsibility
  • Investigating cross-platform gaps
  • Validating volumes
  • Cross-system debugging

13Troubleshooting

Conversions dropping

Check:

  1. 1Consent active (ad_storage + ad_user_data)
  2. 2GA4 purchase present in sGTM Preview
  3. 3sGTM reception — GADS – Conv – purchase tag fired
  4. 4Forwarded to Google Ads: conversion visible in Diagnostics
Weak attribution

Check:

  • gclid present in the landing URL
  • First-party _gcl_aw cookie active (check DevTools > Cookies)
  • Conversion window configured in Google Ads
  • Enhanced Conversions active and data received
  • Addingwell cookie restore working
Duplicate conversions

Possible causes:

  • Duplicate purchase in the dataLayer
  • Conversion imported in parallel (offline import)
  • No stable transaction_id
  • Browser-side Google Ads tag still active alongside the server one
Enhanced Conversions not received

Check:

  1. 1Check EC is enabled under Google Ads > Conversions > Settings
  2. 2Check user data is present in the DataLayer (email, phone)
  3. 3Check in sGTM Preview that the hashed data is forwarded
  4. 4Wait 48-72h — EC diagnostics can take time to update
Attribution cookies missing (gclid, wbraid, gbraid)

Check:

  • Cookie restore disabled in Addingwell
  • sGTM custom domain not configured (the cookies are written by the first-party sGTM domain)
  • Check in DevTools > Application > Cookies that _gcl_aw, _gcl_gb and _gcl_gw are present
  • Enable Cookie Restore under Addingwell > Settings

14Checklist

Weekly media-buyer checklist

Every week, check:

Weekly monitoring0/5

Check the layer you just set up

Scan the store: 41 checks read what it now sends to GA4, Meta and Google Ads.