How to Set Up GA4 Form Submission Tracking (GTM Method)

Google Analytics 4 does not track contact form submissions automatically. When someone fills out your lead form and clicks Submit, GA4 does not record that conversion unless you configure it to. For a lead generation site, this is a significant gap: your GA4 reports will show traffic and sessions, but nothing about which of those sessions turned into a real lead.

This guide walks through how to set up GA4 form submission tracking using Google Tag Manager, the approach that works for most lead generation sites and gives you clean, reliable conversion data.

Why This Matters for Lead Generation

If your goal is generating leads, and for most B2B and service businesses it is, then your GA4 setup needs to tell you which traffic sources, campaigns, and pages are producing form submissions. Without this, you are flying blind. You can see that Google Ads drove 200 sessions last month, but you cannot tell whether those sessions produced 1 lead or 40.

Form submission data is the bridge between traffic and revenue. It is what connects the campaign to the outcome.

The Two Approaches

There are two main ways to track form submissions in GA4. The right one for your site depends on your setup.

Enhanced Measurement (automatic): GA4 has a built-in enhanced measurement feature that attempts to track form submissions automatically using a generic form_submit event. This works on some sites and not others, depending on how the form is built. It fires when the browser detects a native HTML form submission, which many modern JavaScript-based contact forms do not produce. If your site uses a form plugin like Gravity Forms, WPForms, or a similar tool, enhanced measurement often does not fire reliably.

GTM with a custom trigger (reliable): The more dependable approach is to configure a Google Tag Manager trigger that fires on a confirmation signal from the form itself: a thank-you page load, a confirmation message appearing in the DOM, or a custom data layer event pushed by the form plugin. This gives you explicit control over when the event fires and what data it sends to GA4.

Step-by-Step: GTM Form Submission Tracking

This setup assumes you have Google Tag Manager installed on your site and a GA4 property connected to it via a Google Tag (formerly GA4 Configuration tag).

Option A: Track a thank-you page URL

If your form redirects to a /thank-you or /confirmation page after submission, this is the simplest approach.

  1. In GTM, create a new trigger. Type: Page View. Fire on: Some Page Views. Condition: Page URL contains /thank-you (or whatever your confirmation URL is).
  2. Create a new tag. Type: GA4 Event. Configuration tag: your existing Google Tag. Event name: generate_lead (or form_submit, or whatever name you want to see in GA4 reports). Trigger: the page view trigger you just created.
  3. Preview in GTM, navigate to your form, submit it, and confirm the tag fires on the confirmation page.
  4. Publish the workspace.
  5. In GA4, go to Configure > Events to verify the event is appearing. Then mark it as a conversion under Configure > Conversions.

Option B: Track a confirmation message

If your form shows a confirmation message on the same page (no redirect), you need a different trigger. In GTM, use an Element Visibility trigger: set it to fire when an element containing your confirmation message becomes visible. For example, if the confirmation text is inside a div with class “form-success-message”, create an Element Visibility trigger for that CSS selector.

The same tag setup from Option A applies: GA4 Event tag, generate_lead event name, triggered by the visibility trigger.

Naming Your Events Consistently

GA4 event names become the labels you work with in reports, audiences, and conversion tracking. Use a consistent naming convention. Common choices for form submissions:

  • generate_lead is a GA4 recommended event name and is worth using because it integrates cleanly with Google Ads conversion importing.
  • form_submit is descriptive if you have multiple form types and want to differentiate by form name in the parameters.

Add a form_name parameter to help differentiate submissions from different forms. For example: Contact Form, Request a Quote, Schedule a Call. This lets you segment which form types are converting better in your reports.

Verifying the Setup

Before considering the setup complete, verify it in two ways.

First, use GTM Preview mode. Load your site in Preview, submit a test form, and confirm the GA4 Event tag fires. Check the tag details to see the exact parameters being sent.

Second, use GA4 DebugView. In GA4, go to Configure > DebugView. With GTM Preview active, submit the form. You should see the generate_lead event appear in DebugView in real time. If it appears, the connection is working.

Also run a negative test: load a page that does NOT have the form, and confirm the tag does not fire unexpectedly. If you used a thank-you page trigger, navigate to other pages and verify no generate_lead events appear.

Connecting to Google Ads

Once form submissions are tracked as conversions in GA4, you can import them into Google Ads for use in bidding. In Google Ads, go to Tools > Conversions > Import, and select your GA4 property. Choose the generate_lead conversion and import it.

This is where the real value shows up: Smart Bidding in Google Ads will optimize for leads rather than clicks, and you will have consistent conversion data across both platforms.

The Lead-Level Gap

GA4 form submission tracking tells you how many conversions came from each source and campaign. It does not tell you which specific leads came from which campaigns. If you want to see the source on each individual lead record inside your CRM, you need something additional: capturing UTM parameters on the form itself and storing them with the lead record.

This is what Sales Provenance does on WordPress sites: every form submission captures the first-touch UTM source, medium, and campaign along with the converting session source, and writes them to the lead record. Combined with GA4 aggregate data, it gives you both the channel-level view (Google Ads drove 22 leads last month) and the lead-level view (this specific contact came from that specific campaign).

GA4 form tracking is the right starting point. Lead-level attribution is what closes the loop between traffic, conversions, and the CRM records your sales team actually works with.

EH
Eagan Heath

Agency owner who built Sales Provenance to solve this for his own clients’ WordPress sites, then made it available to other agencies.

Reading about attribution is the slow way to learn it.

Install the plugin on one client site and watch a closed deal trace itself back to a keyword.

Start tracking to the sale