Get your Form conversions tracking to 95%+ accuracy guaranteed in writing.
The form works. The lead is sitting in your inbox and your CRM. And your ad platforms recorded nothing, so your cost per lead reads as infinity and the campaign looks dead. Modern forms almost never fire the events that tag managers are listening for. I fix the trigger at the real moment of success, then send the outcome — not just the submission — back to the platforms.
Free30 minutesNo obligation
Form conversions · what breaks
Why the trigger never fires — Form conversions
- 01
The form never fires a native submit event
React, Vue and virtually every modern form call preventDefault and post over AJAX. Google Tag Manager's built-in Form Submission trigger is listening for a browser event that no longer happens on your site.
- 02
The form is rendered inside a third-party iframe
HubSpot, Typeform, Calendly and Jotform draw their forms cross-origin. Your container can't see the click, the fields or the confirmation — you need the vendor's own postMessage event or callback, and each one is different.
- 03
The trigger fires on button click, before validation runs
The opposite failure, and just as common. Every abandoned form with a typo in the email address counts as a lead, so cost per conversion looks great in the platform and terrible in the CRM.
- 04
A form fill isn't the conversion you actually sell
Platforms buy more of whatever you report. Send raw submissions and you'll get more submissions — including bots and tire-kickers — instead of the qualified conversations your sales team can do something with.
Form conversions · the fix
What changes once leads fire at the real moment — Form conversions
The conversion fires on confirmation, not on click
The event is tied to the vendor's actual success callback or a server-side confirmation, so a validation failure or a rejected submission never counts as a lead.
Embedded and iframe forms report like native ones
Each vendor's message API is wired up individually, so a Calendly booking and a HubSpot submission both land in your dataLayer with a consistent shape.
Spam and failed submissions stop inflating your lead count
Bot filtering and validation gates sit before the conversion fires, so the number in the platform is closer to the number your team can actually call.
Platforms optimize toward qualified leads, not form fills
Once CRM stage flows back as an offline conversion, bidding starts chasing the leads that turned into meetings instead of whoever fills in forms most readily.
Form conversions · normal or broken
Under-reported is normal. Zero is not.
Lead tracking fails in two opposite directions: counting nothing, and counting everything including clicks that never became a lead. Both look like a tracking problem. Only one of them is.
Normal, not a fault
The platform reports fewer leads than your CRM received
Organic, referral and direct leads were never the ad platform's to claim. A gap between total CRM records and platform-attributed leads is the expected shape of a working setup.
The lead is dated to the click, not to the submission
A form filled Thursday from Monday's click reports on Monday in Google Ads. Daily lead counts that don't line up with your inbox are a dating convention, not a lost conversion.
GTM's Form Submission trigger does nothing on your form
Nothing is broken in GTM or in your form. The built-in trigger listens for the browser's native submit event, and AJAX forms and JavaScript frameworks simply don't emit one. It needs a different listener, not a fix.
Your lead count dropped after moving to confirmation
You stopped counting failed validations, double-clicks and abandoned attempts. The smaller number is the accurate one, and it's the number the platform should be optimizing against.
Actually broken
Zero conversions recorded while leads keep arriving
Cost per lead reads as infinity and the campaign looks dead. Nothing is being sent at all — this isn't an attribution difference, it's a missing signal, and the platform is optimizing blind.
Leads count on some page templates and not others
One template carries the trigger and another doesn't, usually after a page rebuild or a new landing page builder. Inventory by form, not by site, or you'll keep finding new holes.
The platform's lead count exceeds your CRM record count
The trigger is on the button, not on success. Every failed validation, every impatient double-click and every bot counts as a lead, and the platform is buying more of exactly that traffic.
Embedded HubSpot, Typeform or Calendly forms never register
The submit happens inside an iframe your container can't see into, so no DOM-based trigger will ever catch it. These need the vendor's own callback or postMessage event, not a cleverer CSS selector.
Form conversions · diagnose
Find out whether you're counting nothing or counting everything — Form conversions
Every step here runs on your own site with GTM Preview and your browser's dev tools, and the last two are the ones people skip.
- 01
Submit your own form with GTM Preview open
Watch the event stream as you submit. Is there a gtm.formSubmit, a custom dataLayer event, or nothing at all? That single observation splits the problem in half before you touch any settings.
- 02
Watch the network tab through the submit
If the form posts over fetch or XHR and the URL never changes, there's no page view and no native submit to hang a trigger on. That's the AJAX case, and it's the most common one by far.
- 03
Check whether the form lives in an iframe
Right-click a field and inspect it. If the markup sits inside an iframe from a vendor domain, your container cannot see the submit, and the fix has to come from the vendor's own callback.
- 04
Submit with a deliberately invalid email
If a conversion fires anyway, your trigger is on the button click, not on success. This is the test that explains an inflated lead count in thirty seconds.
- 05
Compare a week of form fills to CRM records
Platform lead conversions beside CRM records created for the same seven days. Higher means you're counting clicks; far lower or zero means the event isn't reaching the platform at all.
- 06
Look for the gclid on a recent CRM record
Open a lead created in the last few days and check for a stored click ID field. If it isn't there, Enhanced Conversions for Leads and offline conversion import can't work later, whatever else you fix.
Form conversions · prove
Verified against the CRM, not against the inbox — Form conversions
For lead gen the website is never the source of truth. I match platform lead events to records that actually exist in your CRM, then check the stages you actually sell.
Source of truth
Your CRM record count — and for the closed loop, the qualified and closed-won stages
- Export every CRM record created in a closed seven-day window with its ID, timestamp and source.
- Put each platform's lead conversion count for the same window beside that CRM total.
- Match on the CRM record ID we use as the event_id, so both misses and extras are identifiable by row.
- Submit one live test per form template and confirm exactly one event, fired after validation passed.
- Confirm new records carry the stored gclid or click ID so offline uploads can attribute them later.
- Sign-off is 95%+ of CRM records matched to a lead event, verified against your own CRM export.
Form conversions · free audit
What we check in the free audit
- Submit your own form with GTM Preview open
- Watch the network tab through the submit
- Check whether the form lives in an iframe
- Submit with a deliberately invalid email
- Compare a week of form fills to CRM records
- Look for the gclid on a recent CRM record
Checked against
Your CRM record count — and for the closed loop, the qualified and closed-won stages
Free30 minutesNo obligation
Form conversions · when not to buy
When your form tracking is fine and I'd say so
This work earns its cost through lead volume and ad spend. Without both, there's nothing here worth buying.
- Your form redirects to a real thank-you page and a page-view trigger already fires there. That works, it's free, and you don't need me.
- You get a handful of leads a month. Platform optimization can't learn from that volume, so better data won't change delivery.
- You aren't running paid traffic to the form. Track it in analytics for your own reporting and spend the budget elsewhere.
- Your CRM already stores the gclid and you're uploading closed-won offline. The loop is closed; at most you need an audit.
Form conversions · what we deliver
What a lead-form tracking rebuild includes
A form-by-form inventory with the real success signal named
Every form on the site listed with its technology, its true confirmation event, and whether the current trigger is firing early, late or not at all.
Vendor-native listeners for embedded and iframe forms
HubSpot's onFormSubmitted callback, Calendly's event messages, Gravity Forms' confirmation hook — each wired to the vendor's documented success signal rather than guessed at.
A clean dataLayer push at confirmation, with form identity
One consistent event carrying form ID, form name, page and lead type, so you can tell a demo request from a newsletter signup in every downstream report.
Server-side lead events with hashed email and phone
The lead event leaves your server container with normalized, SHA-256 hashed identifiers, so ad blockers and browser restrictions can't remove it from the record.
Enhanced Conversions for Leads wired to the stored gclid
The click ID captured at landing and stored with the lead record, so when the deal progresses you can upload the outcome against the click that created it.
CRM stage upload: qualified and closed sent back
Marketing-qualified, sales-qualified and closed-won returned as offline conversions with values, so the algorithms learn what a good lead looks like.
Written guarantee
95%+ tracking accuracy
Measured against Your CRM record count — and for the closed loop, the qualified and closed-won stages. Miss it and we keep working at no cost.
FAQ
Form conversions questions, answered
If your form is a plain HTML form that redirects to a thank-you page, absolutely — a page-view trigger on the thank-you URL takes ten minutes and works fine. That's a genuinely easy fix and you shouldn't pay anyone for it. Where it gets hard is AJAX forms with inline confirmations and anything inside a third-party iframe, because you need each vendor's specific event API and there's no generic trigger that covers them. And closing the loop with CRM outcomes is a different job again — that's an integration, not a tag.
If you get a handful of leads a month, aren't running paid traffic to the form, or your form already fires a clean conversion on a real thank-you page, don't buy this. The value here comes from volume and from spend — you need enough leads for the platform's optimization to learn from, and enough budget that teaching it the wrong thing is expensive. Below that, a working thank-you page trigger is genuinely enough.
Almost always a front-end change. Someone rebuilt the page in a JavaScript framework, or the form plugin updated to submit over AJAX. Both stop the native submit event that GTM listens for, and nothing in your container changed — which is why the failure is so confusing. The fix is to listen for the framework's or plugin's own success event instead.
Two reasons. Ad blockers and browser restrictions remove a meaningful share of browser-side lead events, especially on B2B traffic where technical audiences block more aggressively. And the server is where you know whether the submission succeeded — validation passed, the record was actually created, the email wasn't a bot. A browser can only tell you a button was pressed.
Up to a point. I put the conversion behind validation and behind your existing bot protection, so obvious junk doesn't fire an event. What I can't do is decide which humans are worth talking to — that's what the CRM stage upload is for. Once qualified and closed flow back as offline conversions, the platform learns to avoid the sources that produce garbage, which works better than any filter.
For lead gen it means starting with your CRM rather than your website. We define the business conversion — usually a qualified opportunity, not a form fill — name the CRM as the source of truth, map the lifecycle from click to closed, and only then decide what to fire and when. Most broken lead tracking isn't a broken tag; it's tracking the wrong moment very reliably.
The tracking is live in two to four days. The optimization response takes longer, because Google and Meta need enough conversions in the new definition to re-learn — typically a few weeks depending on your volume, and longer if your qualified-lead count is small. I won't quote you an improvement figure. What I'll commit to is that the data going in is verified against your CRM records.
More on Form conversions
- GuideForm Conversions Not Firing? The Lead-Gen Tracking Debug Guide
- GuideGTM Tag Not Firing? The 12 Real Reasons (In the Order to Check Them)
- GuideMeta Pixel Firing Twice: Find the Duplicate and Kill It
- Enhanced ConversionsEnhanced Conversions enrich the conversions that already fire. First we make sur…
- Meta CAPIA one-click CAPI integration sends thin events. That's why your Event Match Qual…
- LinkedIn CAPILinkedIn tracking that reports pipeline, not form fills
Free · 30 min
Let's get your leads counted at the right moment
Free30 minutesNo obligation
