Measuring Forms with GTM: Why a Click Trigger Is Not Enough and How to Capture Successful Submissions Correctly
A click on a button is not a submitted form. A click trigger measures an attempt, not a successful conversion.
Short Answer
A click on a button is not a submitted form. A click trigger measures an attempt, not a successful conversion. Proper form tracking should capture the moment when the backend or form system confirms a successful submission and a lead is created.
Why a Click Trigger Distorts Performance
A user clicks "Submit", but the form has an empty phone field. The click trigger has already fired. The user clicks twice because the button does not respond. You have two conversions. A bot clicks the button. You have another conversion. But the sales team did not receive any relevant lead.
A click trigger is useful for measuring interactions, such as clicking a phone number or downloading a file. For forms, it is an emergency workaround, not quality conversion measurement. If you optimize Google Ads or Meta Ads based on it, you train the algorithm on the wrong signal.
Better Tracking Options
The first option is a thank-you page. After successful submission, the user is taken to a unique thank-you page that triggers generate_lead. This works well if the page cannot be visited without submitting the form and refreshes do not create duplicate conversions.
The second option is the GTM Form Submission trigger with Check Validation. It can work for classic HTML forms, but often fails with AJAX forms, React components, external widgets or forms with a customized submit event. The third and cleanest option is a custom dataLayer event after a successful backend response.
Recommended Custom Event
After the lead is created successfully, send an event to the dataLayer with lead_id, form_id, lead_type and optional value. This separates the attempt from the result. The event can trigger GA4 generate_lead, a Google Ads conversion, Meta Lead and server events.
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'form_submit_success',
lead_id: 'lead_789',
form_id: 'kontakt_b2b',
lead_type: 'consultation',
value: 1500,
currency: 'CZK'
});Which Parameters to Send
form_id says which form was submitted. lead_type helps distinguish business value. lead_id is used for deduplication and CRM connection. value can be the estimated value of the lead. Do not send readable email or phone to GA4 or the dataLayer unless it is a controlled, legally covered implementation for a specific purpose.
If you have multiple forms, do not use one universal event without parameters. An enterprise cooperation inquiry and a newsletter signup do not have the same value. If you send them as one conversion, the ad system cannot distinguish quality.
Testing Process
In GTM Preview, submit a valid form and verify that form_submit_success arrives only after success. Verify an invalid submission: the event must not be created. Verify double-clicking. Verify refreshing the thank-you page. Verify CRM: lead_id in the dataLayer must match the lead in the system. Verify Google Ads and Meta: conversions must not be sent twice.
FAQ
Frequently Asked Questions
Next Article
PPC phone call tracking
How to Measure Phone Calls from PPC Campaigns Without Distorting Results
A click on a phone number is not the same as a call. Quality call tracking distinguishes tel: clicks, started calls, call length, traffic source and ideally call quality.
Looking for someone who can take this off your plate?
We will fix form tracking so campaigns optimize for real leads, not button clicks.