Set up conversion tracking by first deciding exactly what counts: a confirmed form submission, not a click on the submit button. Find how your form, booking, or checkout tool signals success, since every tool does it differently, and fire on that signal. A submit-click trigger counts failed validations and bots, and a thank-you page needs a guard against refreshes. Before adding anything, ask whether a server or native integration is already sending conversions, because a second sender is how double counting starts. Start with the free path: a browser tag in GTM with Enhanced Conversions or advanced matching turned on. Expect browser-side tracking to miss 10–30% of conversions to ad blockers, cookie limits, and cross-device journeys. You're done only when a test conversion has arrived in the destination platform.
How the Conversion Tracking skill works
- 1
Split lead gen from ecommerce
The agent first works out which kind of conversion it's dealing with. Lead gen (forms, bookings, chats, calls) usually has no backend record, so success has to be detected in the page, and that's where most silent errors happen. Ecommerce has an order record, so the hard parts move to value accuracy, item data, deduplication between pixel and server events, and refunds.
- 2
Pin the three facts from evidence
It answers three questions: what counts as a conversion, where it needs to land, and what tool runs the moment. It looks before asking, reading the context file, fetching the page for existing tags and the GTM container, and searching the codebase. It always asks whether anything already sends conversions server-side or through a native integration, since those leave no trace in the page.
- 3
Find the tool's real success signal
Using a per-tool catalog, it identifies how the form, booking, or checkout confirms success: a jQuery event for Gravity Forms with AJAX, a DOM event for Contact Form 7, a postMessage from a Calendly or Typeform iframe. For custom forms it reads the submit handler. It pushes back on anti-patterns like button clicks or pricing-page views set as Primary conversions.
- 4
Choose the delivery path
It checks for a native integration first, such as Shopify's Google and Meta channels, and names the gaps it leaves. Browser-side tags in GTM are free and complete for many setups, especially with Enhanced Conversions or advanced matching on. When ad blockers or missing conversions matter, it lays out the server-side spectrum, from your own API calls to server-side GTM to managed tools, free and native options first.
- 5
Build, then verify arrival
For covered lead-gen tools it generates a GTM import file that bundles the detection listener, trigger, Conversion Linker, and conversion tag, merged into the existing container. Consent requirements stay intact. Then it verifies: the dataLayer event appears once, the tag fires in Preview, and you get a named platform check with an expected result. It closes with a status, never an unearned "done."
- 6
Audit by symptom, without guessing
For broken tracking it routes on your symptom, from "spend but zero conversions" (walk the click ID chain) to "way too many conversions" (duplicate senders or Every vs. One counting). Each finding is marked observed, reported, or inferred. It reports the cause and the exact change it would make, then stops and asks. "I couldn't find the cause" is an allowed answer; an invented one isn't.
When to use it
Your agent reaches for this skill when you ask for things like:
What's inside
The playbook covers
Reference library — 9 deep-dives
See it in action
WordPress site, Gravity Forms contact form, we have Google Tag Manager already. I want form submissions showing up as conversions in Google Ads. Where do I start?
Gravity Forms signals success differently depending on settings, so check one thing first: is the form embedded with AJAX on? AJAX on: Gravity fires the jQuery event gform_confirmation_loaded on success. It's jQuery-triggered, so a plain addEventListener won't catch it. The detection listener handles that and pushes gravity_form_submitted to the dataLayer. AJAX off, text confirmation: the page reloads to the same URL with no event, so the only hook is the confirmation message (.gform_confirmation_message) via Element Visibility. Redirect confirmation: a thank-you page trigger works, with a guard against refreshes and direct visits. Don't fire on the submit button. That counts failed validations and bots.
1. Google Ads: Goals > Conversions > Summary > + Create conversion action > Website. Add it manually (skip "Automatically without code"). Category: Submit lead form. Counting: One. Status will show Unverified. That's normal. 2. Open the action > Tag setup > Use Google Tag Manager. Send me the Conversion ID and Conversion label. 3. I'll build one GTM import file with the Gravity detection tag, a trigger on gravity_form_submitted, a Conversion Linker, and the Google Ads conversion tag. 4. GTM: Admin > Import Container > Merge > Rename conflicting. Expect about 3 tags and 1 trigger added, no deletions. 5. Preview, submit one test entry (I'll ask before we submit on the live site), confirm the event fires once and the conversion tag fires on it, then publish.
Before importing: is anything already sending this form to Google Ads, such as an existing AW- tag or a GA4 key event imported as Primary? Two senders double count. After: confirm auto-tagging is on, expect Unverified for up to 48 hours, then test through a real ad click. A bare test proves the tag fires, not attribution. Next free step: turn on Enhanced Conversions so the lead's hashed email travels with it.
More things to ask
Real requests the skill is tested against:
Our site is on Webflow and we use an embedded Typeform for enquiries. We don't have Tag Manager and honestly don't want it. I need these going to Meta ads.
I'm a plumber. I run Google Ads and people just call the number on my site, there's no form at all. My ads guy says I can't track that. Can I?
B2B SaaS, spending on Google Ads. The signup completes in our Next.js backend after email verification. No form tool. How do these become conversions?
We're a React single page app. There's a /thank-you route after the form but our GTM thank-you page trigger records nothing. Ads shows zero.
Our Shopify store's Google Ads conversions dropped to zero in the last week of August 2026 and nothing was changed on our side. What happened?
FAQ
How do I track form submissions as conversions in Google Ads?
Create a Website conversion action manually in Google Ads (Submit lead form, counting set to One) and copy its Conversion ID and label. In GTM, add a trigger on your form tool's real success signal, not the submit click, plus a Conversion Linker and the Google Ads conversion tag. Test in Preview, publish, confirm auto-tagging is on, and expect the status to read Unverified for up to 48 hours before it records conversions.
Why does Google Ads show zero conversions when I'm getting leads?
Suspect the click ID chain first. The gclid has to survive from the ad click to the conversion: auto-tagging must be on, the Conversion Linker must run, redirects mustn't strip URL parameters, and consent settings decide whether tags fire at all. Then check that the tag fires on confirmed success. AJAX forms that never change the URL silently break thank-you page triggers, a very common failure.
Why don't GA4 and Google Ads conversion numbers match?
Usually nothing is broken. A 10–30% gap between GA4 and Google Ads is normal, because they count, attribute, and date conversions differently. Investigate only if the gap is above roughly 40%, the direction flips, a stable gap suddenly changes, or a platform reads exactly zero. Before comparing, line up the conversion action, date basis, time zone, attribution window, and campaign scope, and ignore the last three days, which keep filling in.
Why am I getting double-counted conversions?
Common causes: two senders for the same action, such as a Meta pixel and a server event without shared event IDs, or a Google Ads tag and a GA4 key event import both set to Primary. Lead forms set to count Every conversion instead of One, thank-you pages that count refreshes, and detection code installed twice (once in the site head, once in GTM) do it too. Keep one Primary action per real-world conversion.
Do I need server-side tracking?
Not always. Browser-side tags are free and complete for many setups, though they typically miss 10–30% of conversions to ad blockers, Safari cookie limits, and cross-device journeys. Turn on the free fixes first: Enhanced Conversions for Google, advanced matching for Meta. Server-side matters more when blockers or missing conversions affect bidding. It ranges from native integrations and your own API calls to server-side GTM and managed tools, with real cost differences.
Can an AI agent set up conversion tracking for me?
It can do most of it. The agent can inspect your page and GTM container, identify your form tool's success signal, generate a GTM import file, and confirm the event and tag fire. It usually can't log into your ad account, so it gives you named checks, like where to look in Meta Test Events and what should appear. It won't submit a live test conversion or publish a container without your explicit yes.
Related skills
Use it in your agent
Conversion Tracking is a plain SKILL.md folder, so the same skill loads in any agent that reads the skills format. Setup guides:
Build a tool for this workflow?
Marketers run this skill mid-task — the exact moment your tool matters. Partner tiers put your tool inside the skill their agent runs.
See partner tiers