Home › GA4

How to Track Form Submissions in GA4 with Google Tag Manager (10 Steps)

By ·

Quick answer: To track form submissions in GA4, create a GA4 Event tag in Google Tag Manager named generate_lead, fire it with the trigger that matches how your form behaves (Form Submission, thank-you page or dataLayer event), test that it fires on success only, publish, and mark the event as a key event in GA4.

Form leads are the number one conversion for service businesses, yet they are the most common tag to break. Follow these 10 steps in order. Total time: about 45 minutes.

In this guide: Choose your method | 10 steps | Common problems | FAQ

First: choose the right method for your form

Submit your own form and watch what happens. The result tells you which trigger to use.

What happens after submitBest triggerStep
Redirects to a unique thank-you pagePage View on that page pathStep 4
Standard form, browser submits itForm SubmissionStep 3
Message appears on the same page (AJAX)Element Visibility or dataLayer eventStep 5
You have a developerCustom Event from dataLayerStep 5

The 10-step setup

Step 1: Check how your form behaves after submit

Fill in and submit the form once. Note whether the browser goes to a new thank-you URL, reloads the same page, or shows a success message without reloading. Use the table above to pick your method.

Step 2: Create the GA4 event tag

  1. In Google Tag Manager open Tags > New and choose Google Analytics: GA4 Event.
  2. Select your Google tag or enter your Measurement ID (it starts with G-).
  3. Set the event name to generate_lead, a GA4 recommended event.
  4. Leave the trigger empty for now and save. You will attach it in Step 3, 4 or 5.

Step 3: Method A - Form Submission trigger

  1. Go to Variables > Built-in variables > Configure and enable all Form variables.
  2. Create a trigger of type Form Submission.
  3. Tick Check validation. This stops the trigger firing when the browser blocks a submit because of errors.
  4. Under "Enable this trigger when", use a broad condition such as Page Path contains /.
  5. Open Preview, submit the form, and look for a Form Submit event. If it never appears, this method will not work for your form, so use Step 4 or 5.
  6. To limit the trigger to one form, find a unique value such as Form ID in the event's Variables tab, then change the trigger to Some Forms with that condition.
  7. Attach the trigger to your generate_lead tag.

Step 4: Method B - Thank-you page trigger

  1. Confirm the success URL is unique and people cannot reach it without submitting the form.
  2. Create a Page View trigger and choose Some Page Views.
  3. Set Page Path equals your exact path (for example /thank-you). Avoid broad matches such as "contains thank".
  4. Name it clearly, for example "PV - Form Success", and attach it to the generate_lead tag.

Step 5: Method C - dataLayer or element visibility

Best option (needs a developer): ask your developer to push an event such as formSubmission only after a successful submit, then:

  1. Create a Custom Event trigger with the exact same event name.
  2. Create Data Layer Variables for any values sent, such as form type.
  3. Attach the trigger to the generate_lead tag.

No developer, success message on the same page: right-click the message, choose Inspect, and find a unique ID or class. Create an Element Visibility trigger using that ID or CSS selector (class selectors start with a dot), and tick Observe DOM changes.

Step 6: Test success and failure in Preview

  1. Submit the form correctly. The generate_lead tag must show under Tags Fired.
  2. Submit again with a required field empty. The tag must not fire.

If the tag fires on errors, the trigger is too broad. Turn on Check validation or switch to a method that only fires after success.

Step 7: Add a form_id parameter

If you run several forms, open the tag, add an event parameter named form_id with the value {{Form ID}} (or your own variable), and save. To report on it in GA4, register it under Admin > Custom definitions as an event-scoped custom dimension. Allow up to 48 hours for it to populate.

Step 8: Publish the container

In GTM click Submit, give the version a clear name (for example "Add form lead tracking"), and click Publish. Preview mode changes are not live until you do this.

Step 9: Mark generate_lead as a key event

In GA4 mark generate_lead as a key event under the Events section. If it has not appeared in the list yet, add the exact event name manually. You need Marketer access or higher. Key events are not retroactive, so only submissions after you mark it are counted.

Step 10: Verify in DebugView and reports

Open Admin > Data display > DebugView and submit the form with Preview on. The event should appear within minutes. Standard reports can take 24 to 48 hours. If the event is missing there, see the checklist in my post GA4 Events Not Showing in Reports? 11-Step Fix.

Common problems and fixes

ProblemFix
No Form Submit event in PreviewForm is not a standard submit. Use Step 4 or 5.
Tag fires on errorsTurn on Check validation, or use a success-only trigger.
Several forms trigger the same tagLimit by Form ID and send a form_id parameter.
Tag fires twiceSet the tag to fire once per page.
Variable shows undefinedCheck spelling and enable the built-in Form variables.
Element Visibility never firesCheck the selector and tick Observe DOM changes. Forms in iframes need extra setup.

Frequently asked questions

What is the best way to track form submissions in GA4?

If the form redirects to a unique thank-you page, a page view trigger is the most reliable. Otherwise try the built-in Form Submission trigger, and use a dataLayer event pushed by a developer when neither works.

Why is my GTM Form Submission trigger not firing?

Many forms do not use a standard browser submit, for example AJAX forms. If no Form Submit event appears in Preview mode, use a thank-you page, an element visibility trigger or a dataLayer event instead.

Which event name should I use for form submissions in GA4?

generate_lead is a GA4 recommended event and a good default for lead forms. Use a custom name only if you have a clear reason, and keep it under 40 characters.

Why does my form tag fire even when the form has errors?

The trigger is too broad. Turn on Check validation in the Form Submission trigger, or switch to a thank-you page or dataLayer trigger that only fires after success.

How do I track multiple forms separately?

Find a unique identifier such as Form ID, limit the trigger to that form, and send it as a form_id parameter on the GA4 tag. Register the parameter as a custom dimension to report on it.

Final thoughts

Match the trigger to how your form behaves, test both success and failure, then publish and mark the key event. Once leads flow into GA4, you can import the key event into Google Ads as a conversion for bidding.

Using a specific form plugin or builder? Tell me which one in the comments and I will cover it step by step.

GA
Gaurav Arora, Digital Media Lead. 10+ years running paid media and tracking for brands in the USA, UK and Canada.