Skip to content

How Do You Track Form Submissions in GA4 (and Trust the Number)?

GA4's built-in form tracking guesses, and it often guesses wrong. Here are four ways to track form submissions properly, how to mark them as key events, and how to test them before you trust the report.

Premier Logic8 min read
A clean flat illustration of a web contact form with a green check mark flowing into a simple analytics bar chart, navy and soft teal palette, no text.

Seen a GA4 form count that looked wrong? This guide is for you.

The short answer: the most reliable way to track form submissions in GA4 is to send a custom event only when the form actually succeeds, either from your site's code or through Google Tag Manager, then mark that event as a key event. A thank-you page works well too if your form redirects to one. GA4's automatic "form interactions" setting is the least reliable option, so treat it as a rough signal, not your lead count.

Below are the four methods, from easiest to most accurate, plus how to name, test and sanity check what you set up. Accurate form tracking is also the first thing to fix when you suspect your website isn't getting leads, because you can't fix a number you can't see.

Why not just use GA4's built-in form tracking?

GA4 has a switch under Enhanced Measurement called "Form interactions." Turn it on and GA4 tries to detect form_start and form_submit events by itself. It sounds perfect. In practice it is a guess.

The problem is that GA4 is watching the browser for something that looks like a submit, not checking whether your form actually sent a lead. A visitor can click submit, hit a validation error and leave, and GA4 may still count it. Forms that submit in the background without reloading the page, or that live inside an embedded widget, can be missed entirely. Analytics consultant Himanshu Sharma at Optimize Smart puts it bluntly: GA4 can track form submissions "even when a user does not submit the form." He reports seeing thousands of daily "submissions" on his own site, which was not possible, and recommends Tag Manager instead.

There is a second trap. If you leave Enhanced Measurement on and also add your own form tracking, you can count the same lead twice. Analytify's troubleshooting guide lists duplicate submissions from running both methods at once as a common cause of inflated numbers, and advises one tracking method per form.

Our rule of thumb: if you set up any of the methods below, turn off Form interactions in Enhanced Measurement for that property.

Method 1: Track the thank-you page

If your form sends people to a confirmation page after a successful submit (say /thank-you), you already have the most dependable signal you can get without code. Nobody lands there unless the form went through.

To set it up in GA4:

  1. Go to Admin, then Events, then Create event.
  2. Name the new event something like generate_lead.
  3. Add the condition event_name equals page_view and page_location contains /thank-you.
  4. Save, then mark generate_lead as a key event (more on that below).

Keep the thank-you page out of your menu and add a noindex tag so nobody lands there from search. If you have several forms, add a query parameter (like ?form=quote) so you can tell them apart.

This method breaks down when your form shows a success message on the same page instead of redirecting. That is common with modern form plugins and custom builds. For those, use method 2 or 3.

Method 2: Use a Google Tag Manager form submission trigger

Google Tag Manager has a built-in "Form Submission" trigger. It listens for the browser's standard submit event and can fire a GA4 event tag when it hears one.

The setup:

  1. In GTM, create a trigger of type Form Submission.
  2. Tick Check Validation, so the trigger only fires when the browser accepts the form. TripleDart's walkthrough explains this setting stops GTM from logging submissions when the form hits an error.
  3. Limit it to the right page or form ID so you do not count newsletter boxes as leads.
  4. Create a GA4 Event tag (for example generate_lead) fired by that trigger.

This is better than Enhanced Measurement because you control which forms count. It still has a weakness: many forms do not use the browser's standard submit at all. They send data with JavaScript and show a success message. GTM may not hear those, or may hear the click even if your server rejected the entry. If you test and the trigger never fires, or fires on failed attempts, move to method 3.

Method 3: Push a custom event when the form succeeds

This is the most accurate method, and it is what we set up for clients by default. The idea is simple: your form code already knows when a submission succeeded, because it got a "success" response back from the server. At that exact moment, it tells GA4.

If you use Tag Manager, the developer adds one line to the success handler:

window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ event: 'generate_lead', form_name: 'quote_request' });

Then in GTM you create a Custom Event trigger for generate_lead and a GA4 Event tag that sends it, passing form_name along as a parameter.

If you load GA4 directly with gtag.js and no Tag Manager, it is one line instead:

gtag('event', 'generate_lead', { form_name: 'quote_request' });

Most form tools expose a success callback you can hook into, so you rarely need to touch the form itself.

Because the event fires only on a confirmed success, validation errors, spam blocks and server failures never get counted. That is the number you want in front of you when you decide whether your SEO is producing leads.

How do you mark it as a key event and name it?

GA4 renamed "conversions" to "key events" in 2024. A key event is simply an event you have told GA4 matters. It then shows up in your acquisition reports, so you can see which channels and pages produce leads.

Go to Admin, then Events (or Key events), find your event in the list and toggle "Mark as key event." If the event is new it may take up to a day to appear in the list. You can also create the key event in advance by typing the exact event name.

If you run Google Ads, import that same key event as your Ads conversion so both tools agree.

Naming your form events

Pick names you will still understand in a year, and keep them consistent.

  • Use GA4's recommended name generate_lead for forms that produce a sales lead. It tells anyone reading the property what the event means.
  • Add a parameter like form_name (quote_request, contact, careers) rather than inventing a new event per form. One key event, many forms, easy to break down.
  • Use lowercase and underscores. GA4 event names are case sensitive, so Form_Submit and form_submit are two different events.
  • Keep non-lead forms separate. A newsletter signup or job application should not be counted as a sales lead.

If you want form_name to appear in standard reports, register it as a custom dimension under Admin, then Custom definitions.

How do you test it with DebugView?

Never trust a new event until you have watched it fire with your own eyes, on the live site.

  1. In GTM, click Preview and open your site. If you use gtag only, install the Google Analytics debugger extension or add debug_mode: true temporarily.
  2. In GA4, open Admin, then DebugView.
  3. Submit the form once with valid details. You should see generate_lead appear in the timeline within seconds, with your form_name parameter attached.
  4. Now submit it with a missing required field. Nothing should fire. If something does, your tracking is counting failures.
  5. Check the event in GTM's Tag Assistant too. It shows which trigger fired the tag, which helps when two triggers compete for the same form.
  6. Publish your GTM container. Preview mode alone does not make it live.

A week later, compare GA4's generate_lead count to your inbox or CRM for the same dates.

Once the event is reliable, you can turn it into a rate. Here is how to measure website conversion rate.

Why is GA4 showing fewer leads than my inbox?

Even perfect tracking will undercount. Some visitors use ad blockers or privacy browsers that stop Google Analytics from loading at all. Others decline your cookie banner, and with Consent Mode active, GA4 either receives no event or receives a cookieless signal it models later. Your form still sends the email. GA4 just never hears about it.

So expect your CRM to show more leads than GA4. A steady gap is normal. A gap that suddenly widens usually means something broke, like a plugin update that changed the success message. That is why we treat the CRM as the source of truth for lead counts and GA4 as the source of truth for where those leads came from. Once your form events are trustworthy, you can connect them to revenue, which we cover in how to measure SEO ROI.

If you use our free SEO reporting dashboard, it counts your GA4 key events per row, so a clean generate_lead event shows up next to your traffic without extra work.

Quick answers

Is form_submit in GA4 accurate?

Not reliably. The automatic form_submit from Enhanced Measurement can fire on attempts that failed and miss forms that submit without a page reload. Use a thank-you page or a custom success event instead, and turn the automatic one off.

Where do I see form submissions in GA4?

Go to Reports, then Engagement, then Events, and click your event name. Once it is a key event, you can also see it by channel in the Traffic acquisition report.

Can I track form submissions in GA4 without Google Tag Manager?

Yes. Use the thank-you page method, which needs only GA4's Create event screen, or call gtag('event', 'generate_lead') from your form's success code.

Why do I see more form submissions in GA4 than actual leads?

Usually double counting. Enhanced Measurement and a GTM trigger are both firing, or your trigger counts failed attempts and spam. Pick one method per form and test a failed submit in DebugView.

How long until a new event shows in GA4 reports?

DebugView shows it within seconds. Standard reports can take 24 to 48 hours to process new events, so do not panic if day one looks empty.

Next step

If your GA4 numbers and your inbox never agree, we can fix the tracking and the site in one pass, since development and SEO sit under one roof here and nobody gets to blame the other side. Book a free call and we will send you a written recommendation within a few days.

Keep reading
Free call

Let's talk about your business.

A free 30-minute call about your goals. No pitch, no quote. We work for mutual success: tell us as much as you can about where the business should go, and you'll leave with a written recommendation whether or not we end up working together.