All guides
Google Ads25 min· Intermediate

Tag up Google Ads from start to finish

End-to-end Google Ads conversion tracking via GTM — Google Tag, purchase conversion, value + transaction_id mapping, Enhanced Conversions (2025 simplified setup), and QA in Tag Assistant + Ads diagnostics.

Before you start — you'll need
  • Google Ads account with admin access
  • GTM container installed on your site
  • GA4 already firing (so you have a dataLayer purchase event)
  • Edit access to the dataLayer (or a dev who can add the purchase push)
By the end you'll have
  • Google Tag firing on All Pages
  • Google Ads purchase conversion firing with revenue + transaction_id
  • Enhanced Conversions enabled with hashed user data
  • Conversion verified in Google Ads → Tag Diagnostics
Step 1

Create the conversion action in Google Ads

In Google Ads go to Goals → Conversions → Summary → New conversion action → Website. Pick Set up with Google Tag Manager. Choose Purchase as the category, set value to Use different values for each conversion, count to Every, click-through window 30d, view-through 1d. Hit Create and continue.

On the next screen Google gives you a Conversion ID (like AW-123456789) and a Conversion Label. Keep that tab open.

Tip: Pick the right category — Google's smart bidding weights categories differently.
Step 2

Add the Google Tag (the GA4 / Ads base) to GTM

In GTM → Tags → New → Google Tag. Tag ID: paste either your GA4 G-XXXXXXXXXX OR your Ads AW-123456789. One Google Tag handles both products — you don't need two.

Trigger: Initialization — All Pages (or All Pages if you don't have it).

Tip: If you already have a Google Tag for GA4, just add the AW- ID to its Configuration settings as a second Tag ID — don't duplicate the tag.
Step 3

Build the Data Layer Variables you'll map

GTM → Variables → New → Data Layer Variable. Create three: dlv - ecommerce.value, dlv - ecommerce.currency, dlv - ecommerce.transaction_id. Set Data Layer Version to Version 2 on each.

// What your site needs to push on the thank-you page:
window.dataLayer.push({ ecommerce: null });  // clear previous
window.dataLayer.push({
  event: "purchase",
  ecommerce: {
    transaction_id: "ORD-12345",
    value: 89.50,
    currency: "GBP",
    items: [
      { item_id: "SKU_001", item_name: "Resistance Bands", price: 29, quantity: 1 },
      { item_id: "SKU_002", item_name: "Yoga Mat", price: 60.50, quantity: 1 }
    ]
  }
});
Tip: Always push({ ecommerce: null }) before the new push — stops items leaking between events.
Step 4

Create the Custom Event trigger

Triggers → New → Custom Event. Event name: purchase. Fires on: All Custom Events. Name it CE – purchase.

Step 5

Build the Google Ads Conversion Tracking tag

Tags → New → Google Ads Conversion Tracking. Paste Conversion ID + Conversion Label from Step 1. Map:

· Conversion Value: {{dlv - ecommerce.value}} · Order ID: {{dlv - ecommerce.transaction_id}} · Currency Code: {{dlv - ecommerce.currency}}

Trigger: CE – purchase. Save.

Tip: Order ID is what dedupes — Google Ads counts each unique transaction_id once.
Step 6

Enable Enhanced Conversions (the simpler May-2025 way)

Open your Google Tag (from Step 2). Scroll to Configuration settings → Include user-provided data from your website. Set Type → New variable → User-provided data. Map at least email from your dataLayer (or use the automatic collection if you don't have a structured push).

Google hashes the data in the browser before sending — you don't (and shouldn't) pre-hash.

Tip: Enhanced Conversions are sitewide on the Google Tag — you no longer need a separate per-conversion EC tag.
Step 7

Preview & verify

Hit Preview. Open your site → add to cart → check out → land on the thank-you page. In the Tag Assistant left rail under the purchase event you should see Google Tag + Google Ads Conversion Tracking fired. Click each → confirm Value, Currency, Order ID populated.

Step 8

Confirm in Google Ads

Within 1–3 hours: Google Ads → Goals → Conversions → your conversion → Status should flip from No recent conversions to Recording conversions. Tag diagnostics shows quality + match rate.

Within 24h, your Enhanced Conversions match rate (under Diagnostics) should climb above 60%. If not, your user-provided data mapping is the problem.

Common pitfalls
  • Hard-coded gtag('event', 'conversion') on the thank-you page AND a GTM tag — instant double-count.
  • Reusing transaction_id in test orders — Google dedupes silently, you'll think tracking is broken.
  • Missing currency code → Google assumes account default, reports in wrong currency.
  • Firing the conversion on a fragile trigger like 'URL contains /thank-you' when refreshes re-fire it.
  • Not marking the GA4 event as a Key event if you wanted to import from GA4 instead.
Official references
Keep going