Skip to main content
Form conversionsLead form tracking repair

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Get my free conversion tracking audit

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.

Get my free conversion tracking audit

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.

Free · 30 min

Let's get your leads counted at the right moment

Free30 minutesNo obligation