Three ways, three different promises
The built-in Tag Manager form submission trigger fires when a form is sent. Google documents two options that change what that means. Check Validation, when on, fires only if the form is successfully sent; when off, it fires on any attempt, successful or not. Wait for Tags holds the submission until dependent tags finish or a timeout passes, because otherwise slow tags may not fire before the next page loads.
A custom event is the second route. When a form's default submit has been overridden, Google suggests pushing an event to the data layer at the moment of success and firing a Custom Event trigger with the same name. The third is GA4 enhanced measurement, which can report form_start and form_submit. Google's pages do not say how enhanced measurement or the form trigger treat forms that send in the background, so assume nothing and test each form.
- Turn Check Validation on so failed attempts are not counted.
- Prefer an explicit success event if the form is submitted by script.
What to send and what to leave out
Send a form name or ID and the page, not the contents. Google's enhanced measurement page says you are responsible for making sure no personal information is collected, and form parameters appear in reports only if you create custom dimensions for them. A name or email in an event parameter is a fault whether or not it shows in a report.
If you use a Custom Event trigger, name the event precisely. Google warns that a wildcard regex of dot-star makes a Custom Event trigger fire on every detected event, including ones Tag Manager and the Google tag emit.
- Use a closed list of event names, one per form.
- Check every parameter in DebugView before accepting.
A three-case test for each form
For each form, run three cases in Tag Manager preview and DebugView. A valid submission should produce exactly one event. A submission with a deliberate validation error should produce none. A double click on the send button, if the form allows it, should produce one event for each submission the form actually accepted: count the submissions in your test inbox or form record and compare. Record the result of each case.
Use a test recipient so that test submissions do not reach real people, and label test entries so they can be filtered in the form's own records.
- Test with an obviously fake name and a test mailbox.
- Keep a screenshot of DebugView for each case.
What does not fit, and how the paid outcome is accepted
This does not make a form deliver its email, route it into a CRM or count leads from ad platforms. If submissions never arrive, repair the form first.
The fixed outcome Track one form's submissions covers one form on one site at £245, an untested proposal, with payment only after sign-off. Acceptance: a valid test submission produces one event with the agreed name in DebugView; a deliberate validation error produces none; a double click produces one event for each submission the form accepted; and the parameters contain no field contents. Send the form address and the event name you want; no submitted data.
Sources and limits
- Tag Manager Help: Form submission trigger Checked 2026-10-11.
- Wait for Tags holds the submission until dependent tags finish or the timeout passes; without it, slow tags may not fire before the next page loads.
- Check Validation makes the trigger fire only when the form is successfully sent; without it the trigger fires on any submission attempt.
- Built-in variables include Form Element, Form Classes, Form ID, Form Target, Form URL and Form Text.
- The page does not describe how submissions are detected or how AJAX forms behave.
- Tag Manager Help: Custom event trigger Checked 2026-10-11.
- When the submit event has been overridden, a dataLayer.push with an event name and a Custom Event trigger with the same name can fire the tag.
- A regex wildcard of .* makes a Custom Event trigger fire on all detected events and Google recommends a more restricted pattern.
- Google Analytics Help: Enhanced measurement events Checked 2026-10-11.
- form_start fires on first interaction with a form in a session and form_submit fires when a visitor submits a form.
- Form parameters appear in reports only if custom dimensions are created for them.
- The page says nothing about dynamic or AJAX form behaviour; you are responsible for avoiding personal data.