Count the form leads you can actually call back
Google Ads says 60 form conversions; your inbox holds 14 real inquiries and a pile of gibberish. Tags that fire on a button or a thank-you page count double clicks, reloads and bots, while a quote form embedded from your CRM may not count at all. Fixed means one conversion per lead your server accepted, with the ad click saved on the CRM record.
Free30 minutesNo obligation
Form tracking · what breaks
What your form numbers are hiding
- 01
Clicks and reloads counted as leads
A tag on the submit button or thank-you URL counts failed submits, double clicks and refreshes, so cost per lead looks cheaper than it is.
- 02
The quote form lives on someone else's domain
A form embedded from your CRM or scheduler runs in a frame your tags cannot read. You see zero conversions while the inbox fills, or a page-view stand-in that bidding treats as a lead.
- 03
Bots and fake names trained as wins
A standard conversion tag never checks whether the name and number are real, so it counts bot submits too. Smart Bidding then hunts for more visitors like the bot.
- 04
Every CRM record says "website"
The click ID never reaches the lead, so nobody knows which campaign produced the customer who signed. Budget follows form volume, not revenue.
Form tracking · the fix
What fixed looks like — Form tracking
One conversion per accepted lead
Fired from the server's success response, with the lead ID as Google's transaction ID and Meta's event ID. Google Ads rejects a repeat with the same ID, and Meta keeps one copy when browser and server both report the lead.
Junk kept away from bidding
Checked before anything is sent, rejects counted on their own line, and leads your team later marks as junk retracted in Google Ads inside its adjustment window.
Each lead tied to its click and outcome
Click IDs on the CRM record, so qualified, booked and won leads go back to Google and Meta with a value.
Form tracking · architecture
How a form submit gets counted, by method
The right method depends on where the form actually runs. Most sites need two or three together.
- 1
M1: Your own form, confirmed by your backend
Fires from the success response or the dataLayer push your plugin makes after the server accepts the entry, never from the button.
- 2
M2: The embed vendor's documented callback
A page cannot read inside another origin's frame, so we use only signals the vendor publishes, such as Typeform's onSubmit, which returns a response ID. Message origins are checked.
- 3
M3: Cross-domain hand-off
If the form sits on the vendor's domain and the vendor lets you add your own Google tag there, the same tag ID on both sites carries the visitor across in the _gl link parameter.
- 4
M4: Server relay or webhook
A webhook from the form tool or CRM pushes the lead to Google and Meta from a server, sharing the lead ID with any browser event so the pair counts once.
- 5
M6: CRM outcomes back to the platforms
Enhanced conversions for leads matches hashed email or phone from the form to later CRM uploads; a stored gclid adds a second key.
- 6
M8: Export reconciliation
No callback and no API means counting from the vendor's lead export on a schedule.
Form tracking · diagnose
Our order of checks on a broken form
Over-counting hides under-counting, so duplicates come first.
- 01
Count conversions from one test lead
Per platform and conversion action, over 24 hours.
- 02
Find what triggers each tag
Button, thank-you URL or a real success signal.
- 03
Check counting and Primary actions
Lead actions on Every, or a tag and a GA4 import both Primary.
- 04
Open the CRM record the test created
No click ID means no outcome can be sent back.
- 05
Audit the last 20 leads
Count fakes, then check which fired a conversion.
Form tracking · prove
The checks you get signed off — Form tracking
Run on your live form with test data you approve, never a preview.
Source of truth
Leads accepted by your form backend, joined to the CRM records they created, with lead ID, click ID and current stage
- One test lead from a tagged URL registers once in Google Ads and once in Meta, with the same event ID on the browser and server copies.
- A failed validation, a double click and a thank-you reload each add nothing.
- A submit that fails the junk screen is logged as rejected and sends no conversion.
- Click ID and UTMs appear on the matching CRM record.
- A lead moved to qualified reaches both platforms as its own conversion.
- Every lead your backend accepted in a finished date range lined up against platform conversions, with each gap given a reason.
- Rerun after 30 days, plus any time the form, its plugin or the site theme is updated.
Form tracking · free audit
What we check in the free audit
- Count conversions from one test lead
- Find what triggers each tag
- Check counting and Primary actions
- Open the CRM record the test created
- Audit the last 20 leads
Checked against
Leads accepted by your form backend, joined to the CRM records they created, with lead ID, click ID and current stage
Free30 minutesNo obligation
Form tracking · when not to buy
When form tracking is not your problem
We would rather point you elsewhere.
- Most new customers phone you: start with call tracking, since forms are the minority.
- Your leads come from Meta Instant Forms, Local Services Ads or a marketplace: there is no website form to fix, and visibility ends at that platform's lead report.
- You get a handful of form leads a month: asking each one is cheaper and accurate enough.
- One native integration already reports one conversion per lead and matches your CRM: leave it alone.
Form tracking · what we deliver
The rungs of the lead we instrument — Form tracking
Form started (interest)
A secondary signal for diagnosis, never a Primary conversion that bidding chases.
Lead accepted (enquiry)
The conversion itself, sent only once your backend returns success and a lead ID, both from the browser and from a server container you own on a subdomain of your site.
Junk screen (before the enquiry counts)
A reCAPTCHA score verified on your server, phone and email format checks, and a repeat-contact check.
Source on the record
Google and Meta click IDs plus UTM tags, read from the landing URL, kept for the visit and passed into hidden fields so the CRM saves them beside the contact.
Qualified and booked
CRM stage changes sent as offline conversions to Google Ads and Conversions API events to Meta, matched on click ID or hashed contact data.
Won, paid and corrected
Job value from the CRM, with spam and duplicates found later retracted instead of left in the count.
Written guarantee
95%+ tracking accuracy
Measured against Leads accepted by your form backend, joined to the CRM records they created, with lead ID, click ID and current stage. Miss it and we keep working at no cost.
Pricing
Pick the package that fits your ad spend
Browser-side starter
$400One-time fee · lifetime ownership
Repairs and verifies the browser-side setup you already have, on a live conversion. Honest about its ceiling on this platform.
- Root cause fixed, not worked around
- Verified on a live conversion
- Reconciled against your own records
- Written handover
1st-party server-side
Recommended$800One-time fee · most popular
Money events sent from your own records through a first-party container on your subdomain, so the browser can no longer lose them.
- First-party server container on your own subdomain
- Money events from your records, not the browser
- Deduplicated on a shared event ID at every destination
- First-party cookies beyond Safari's 7-day cap
- 95%+ accuracy and 8+ Meta EMQ, guaranteed in writing
Full 1st-party stack
$1,800One-time fee · lifetime ownership
Every paid channel server-side plus the offline loop, with monitoring so the next break surfaces in days.
- Everything in 1st-party server-side
- Pinterest, Snapchat, Reddit and LinkedIn CAPI
- CRM and offline conversion loop
- Refunds and cancellations corrected wherever each platform allows it
- Monitoring on every destination
FAQ
Form tracking questions, answered
Usually duplicates: a thank-you page firing on every reload, lead actions counting Every instead of One, or two Primary actions on the same form. Google recommends One for leads, and a lead ID sent as the transaction ID removes repeats.
Often, through whatever that vendor documents: a submit callback, a webhook or a redirect. Nothing on your page can read inside its frame. If it offers none, we reconcile from its lead export, and conversions arrive late.
No. Low-scoring submits still reach your team; they are flagged and kept out of the conversion count until someone confirms them. The threshold is set from your own traffic.
Website form leads matchable to an ad click by click ID or hashed contact data, reconciled against leads your backend accepted. Not Instant Forms, Local Services Ads, marketplaces or AI receptionist summaries, which don't expose the record we would need.
No. Its policy forbids names, emails and phone numbers, including in URLs. Analytics gets IDs and categories; email and phone go hashed to Google Ads and Meta where consent allows. Health and legal intake details never enter any event.
Not through its Conversion Leads goal, which Meta lists as compatible only with Instant Forms and suited to advertisers with at least 200 leads a month. Website leads and later CRM stages are sent through the Conversions API as their own events, so Meta still receives the qualified signal from your CRM.
Free · 30 min
See what your forms really report
Free30 minutesNo obligation
