If you run Google Ads and cannot say which keyword produced last month's best customer, the problem is almost always conversion tracking. Not the bidding strategy, not the ad copy. The account is being optimised toward whatever was easiest to track when it was set up, which is often a page view or a button click.
This guide is the setup I use on every client account. It uses Google Tag Manager, works for lead generation and ecommerce, and ends with Enhanced Conversions and a testing routine so you know it is right before the budget depends on it.
Step 1: Decide What a Conversion Is
Before touching any tool, write down the actions that mean money to the business and rank them.
| Business type | Primary conversion | Secondary conversions |
|---|---|---|
| Lead generation | Qualified form submission, booked call | Phone click, brochure download |
| Ecommerce | Purchase with value | Add to cart, begin checkout |
| SaaS | Trial start or paid signup | Pricing page view, demo request |
| Local service | Call over 60 seconds, booking | Direction click, contact page view |
Everything primary should be something you would pay for. Everything else is secondary. This decision drives Smart Bidding, so make it deliberately.
Step 2: Create the Conversion Action in Google Ads
In Google Ads, go to Goals, then Conversions, then Summary, then New conversion action, then Website. Enter your domain, then choose to add a conversion action manually instead of accepting the auto-created suggestions.
For each action set:
- Goal and category. Purchase, Submit lead form, Book appointment, Phone call lead and so on. The category affects reporting groups, not bidding.
- Name. Specific and permanent. "Purchase" or "Quote Form Qualified", not "Conversion 3".
- Value. Use the same value for each conversion for leads, with a realistic number, or use different values for each conversion for purchases, where the value comes from the tag.
- Count. One for leads. Every for purchases.
- Click-through window. 30 days is a sensible default. Shorter for emergency services, up to 90 days for long sales cycles.
- Attribution model. Data-driven.
After saving, choose Use Google Tag Manager and copy the Conversion ID and Conversion Label.
Step 3: The Conversion Linker
In Tag Manager, create a tag of type Conversion Linker and fire it on All Pages. It reads the click identifier from the ad URL and stores it in a first-party cookie, so conversions can be attributed even when third-party cookies are blocked. If your conversion happens on another domain, such as a booking platform, enable linking across domains and list both domains.
Skipping this tag is the most common cause of conversions that fire but never attribute.
Step 4: Build the Trigger
The trigger must fire once, only when the action has genuinely happened.
- Form submissions. Use the form plugin's success event pushed to the dataLayer. The tool guides on this site cover Elementor, Gravity Forms, WPForms, Fluent Forms, HubSpot, JotForm, Typeform and Tally. Avoid GTM's generic form trigger and avoid button clicks.
- Thank-you pages. A Page View trigger on the thank-you path works when the page can only be reached after a submission. Add noindex and keep it out of navigation.
- Purchases. A Custom Event trigger on the
purchasedataLayer event that carries transaction ID, value, currency and items. - Phone calls. A Click, Just Links trigger where Click URL starts with
tel:. For calls from the ad, use call assets with call reporting instead. - Bookings. A Custom Event trigger pushed by a listener for the booking widget's confirmation message. See the Calendly and Acuity guides.
Step 5: The Conversion Tag
Create a Google Ads Conversion Tracking tag. Enter the Conversion ID and Label. For purchases, map:
- Conversion Value to a Data Layer Variable for
ecommerce.value - Transaction ID to
ecommerce.transaction_id - Currency Code to
ecommerce.currency
The transaction ID is what stops a refreshed thank-you page from counting twice. Google Ads deduplicates conversions with the same transaction ID within the same conversion action.
Fire the tag on the trigger from Step 4.
Step 6: Enhanced Conversions
Enhanced Conversions send a hashed email, phone number or address with the conversion. Google matches it to signed-in users and recovers conversions that cookies miss, which matters most on Safari, iOS and under consent banners.
- In the conversion action settings in Google Ads, turn on Enhanced conversions and choose Google Tag Manager.
- In GTM, push the customer's email and phone to the dataLayer at the moment of conversion. Form listeners and purchase dataLayers can include them.
- Create a User-Provided Data variable and map email and phone to the Data Layer Variables.
- In the conversion tag, enable Include user-provided data from your website and select the variable.
The hashing happens in the browser. Google never receives readable contact details.
Step 7: Test in Preview Before Publishing
- Open GTM Preview and load the site.
- Confirm the Conversion Linker fired on the first page view.
- Complete the conversion action with test data.
- Confirm the conversion tag fired exactly once, and inspect its values: label, value, transaction ID, currency and user-provided data.
- Use a tag debugger such as the Insighter Debugger Chrome extension to see the request leave the browser and confirm the parameters.
- Try to break it. Refresh the thank-you page, submit an invalid form, click the button without completing. Nothing extra should fire.
- Publish the container.
Step 8: Verify in Google Ads
After 24 to 48 hours, open the conversion action and check Diagnostics. You want to see Recording conversions, no tag issues, and, if you set up Enhanced Conversions, a healthy match rate. Compare the first week of conversions against your real leads or orders. The numbers should move together.
Common Problems and Fixes
- No conversions recording. Missing Conversion Linker, trigger not firing, or a redirect that leaves the page before the tag completes. Check Preview.
- Duplicates. No transaction ID on purchases, two tags for the same action, or a GA4 import running alongside a native tag. Keep one source per action.
- Wrong values. Hardcoded value instead of a variable, or the variable mapped to a formatted string like "$1,234.00". Values must be plain numbers.
- Conversions attributed to Direct in GA4 but fine in Ads. Normal. The platforms attribute differently.
- Everything is a primary conversion. Smart Bidding optimises for the cheapest one. Demote the micro conversions.
Going Further
Once the basics are reliable, three upgrades deliver the most:
- Offline conversion import. Upload qualified leads, booked jobs or closed deals from your CRM with the click ID or hashed email, so the account learns from outcomes rather than form fills.
- Server-side tagging. Route conversions through a server-side GTM container to reduce losses from ad blockers and browser restrictions.
- Consent Mode v2. Required for EU and UK traffic, and it lets Google model the conversions you cannot observe. There is a separate guide on this site for it.
Get the foundation right first. An account with one accurate primary conversion beats an account with ten approximate ones.
