Your contact form is probably the most valuable interaction on your site — and the one most likely to be tracked badly or not at all. The good news: you can track form submissions in GA4 without writing a single line of code. The catch is that the easiest method is also the least reliable, so picking the right approach for your specific form matters more than the setup itself.
This guide is for marketers and SMB owners who already have basic GA4 setup running and want accurate lead data without hiring a developer. We cover four no-code methods, when each one works and when it quietly fails, how to turn a tracked submission into a key event, and the pitfalls — double counting, inflated numbers, embedded forms — that wreck most setups.
Quick Answer: Which No-Code Method to Use
If your form redirects to a thank-you page, track visits to that page — it is the most reliable no-code method. If it does not redirect, use Google Tag Manager: the built-in Form Submission trigger for standard HTML forms, or an Element Visibility trigger on the success message for AJAX forms. GA4’s built-in Enhanced Measurement can track forms with zero setup, but it is notoriously unreliable and often inflates numbers, so treat it as a quick test rather than a final solution. Whatever you pick, verify it in DebugView and mark it as a key event.
The 4 No-Code Methods
Method 1 — Enhanced Measurement (zero setup, big catch)
GA4 can track forms automatically with no tools at all. Go to Admin → Data Streams → your web stream → Enhanced Measurement, open the settings, and toggle on “Form interactions.” GA4 then attempts to fire form_start and form_submit events on its own.
The honest reality: this is widely regarded as one of GA4’s least reliable features. It only catches standard HTML <form> elements with native submit behaviour, so it misses most modern AJAX and JavaScript forms — and when it does fire, it frequently over-counts, with some sites reporting thousands of phantom submissions a day. Use it for a five-minute sanity check, but do not build your reporting on it. The reason it over-counts is that GA4 also fires form_submit on interactions that are not real submissions — clicking inside a multi-step form, or scripts that re-trigger the event — so a single visitor can generate several. On a busy site that noise compounds fast, which is why most analysts disable it the moment they set up something better.
Method 2 — Thank-you page (the most reliable)
If submitting your form sends users to a dedicated confirmation page, that redirect is the cleanest signal you have. In GTM, create a trigger of type Page View with the condition Page Path equals /thank-you/, then attach a GA4 Event tag named something like generate_lead. When the thank-you page loads, the event fires.
This method needs no understanding of how the form submits, works across every form type, and is the most trustworthy of the four. Its one weakness: anyone reaching that URL directly — via a bookmark, email link, or internal link — counts as a conversion. Make the thank-you page unreachable except by submitting, and the data stays clean. It is the ideal pairing for a lead magnet funnel where the confirmation page already exists. To verify, open GTM Preview, submit the form, and confirm the tag fires on the thank-you URL — then check GA4 Realtime to see the event land within seconds.
Method 3 — GTM Form Submission trigger
For standard forms that do not redirect, GTM has a built-in listener. First enable the Form built-in variables (Variables → Configure → tick the Form group). Then create a trigger of type Form Submission, leave “Check Validation” on so it only fires on successful submits, and target a specific form by Form ID if you have several. Attach your GA4 Event tag and you are done — no code.
The limitation is real: this listener was designed for old-school forms that POST and reload, so it does not reliably detect AJAX submissions where the page never navigates. If Preview mode shows no gtm.formSubmit event when you submit, your form is almost certainly AJAX — move to Method 4. When it does work, this method is genuinely set-and-forget, and it captures useful context like the form ID and page automatically.
Method 4 — Element Visibility for AJAX forms
Most modern forms submit in the background and show an inline “Thanks, we got your message” without reloading. The no-code trick is to track when that success message appears. In GTM, create an Element Visibility trigger, point it at the confirmation element with a CSS selector (for example .form-success), enable “Observe DOM changes,” and fire your GA4 Event tag on it. The message only appears on a genuine submission, so it is a clean signal.
Many WordPress form plugins make this even easier by pushing their own data-layer event on submit, which a GTM Custom Event trigger can catch directly. If your plugin offers a native GA4 or data-layer integration, that is usually the most robust no-code route of all — let the plugin do the listening for you. The only setup work left is catching the plugin’s event in GTM and naming it consistently, so your reports stay tidy when you add more forms later.
The Four Methods Compared
| Method | Needs GTM? | Works on AJAX forms? | Reliability |
|---|---|---|---|
| Enhanced Measurement | No | Rarely | Low (often inflated) |
| Thank-you page | Yes | Yes (if it redirects) | Highest |
| Form Submission trigger | Yes | No | Good (standard forms) |
| Element Visibility | Yes | Yes | Good (needs a CSS selector) |
Turn the Event Into a Key Event
Tracking the event is only half the job — to use it as a conversion, you must promote it. In GA4 go to Admin → Events, find your form event (e.g. generate_lead), and toggle “Mark as key event.” Note the terminology: Google renamed “conversions” to “key events” in March 2024, though they still appear as conversions when imported into Google Ads — the function is identical, only the label changed.
For sharper reporting, add a value parameter to the tag so a quote request can be worth more than a newsletter signup — say 100 versus 10 — which feeds straight into ROI calculations. Pair this with consistent campaign tagging from your UTM parameters so you can see which channels actually drive leads, not just traffic.
Common Pitfalls That Wreck Your Data
Form tracking fails quietly more often than loudly. These are the issues that make your numbers wrong while everything looks fine.
- Double counting: running Enhanced Measurement form tracking and a custom GTM setup at once fires two events per submission. If you build custom tracking, turn off the Form interactions toggle.
- Inflated thank-you pages: direct visits, bookmarks, and email links to the confirmation URL all count as conversions. Block direct access to that page.
- Embedded third-party forms: HubSpot and Typeform sit in cross-origin iframes that standard triggers cannot read. HubSpot fires a global JavaScript event GTM can catch; Typeform can redirect to a thank-you page on your domain.
- Bots and spam: automated submissions inflate counts, the same way they distort sessions — filter aggressively and sanity-check against reality.
- Consent gaps: if your cookie banner blocks GA4 before consent, submissions go untracked. Align tracking with your cookie consent setup.
The single best habit is to cross-check monthly. Compare GA4’s form event count against the records in your inbox or CRM — if GA4 shows double, you have a duplication problem; if it shows far fewer, tracking is missing submissions. This is the same discipline that keeps your GA4 ecommerce events honest.
Which Method Should You Use?
- Use the thank-you page method if your form redirects — it is the most reliable and the least fragile.
- Use the GTM Form Submission trigger if you have standard HTML forms that POST and reload.
- Use Element Visibility if your forms are AJAX and show an inline success message.
- Use your form plugin’s native integration if it offers one — it is often the most robust no-code option.
- Use Enhanced Measurement only as a quick test, never as your final, reported source of truth.
For most SMBs the practical answer is a thank-you page where possible and Element Visibility everywhere else. Once leads are tracked accurately, the natural next step is routing them onward — for example to send leads to your CRM the moment a form is submitted.
Conclusion
You do not need a developer to track form submissions in GA4 — you need the right method for how your form behaves. Thank-you page tracking is the most reliable, Element Visibility covers AJAX forms, the GTM Form Submission trigger handles standard ones, and Enhanced Measurement is a quick test at best. Whichever you choose, verify it in DebugView, mark it as a key event, watch for double counting, and cross-check against your CRM every month. Get this one interaction right and the rest of your funnel reporting finally tells the truth.
FAQ
Can I track form submissions in GA4 without Google Tag Manager?
Yes, using Enhanced Measurement’s Form interactions toggle, which needs no GTM at all. The trade-off is reliability — it only catches standard HTML forms and often over-counts. For accurate data without GTM, the alternative is a form plugin with a native GA4 integration.
Why is GA4 not tracking my form submissions?
The most common reason is an AJAX form that does not trigger a standard browser submit, so Enhanced Measurement and the GTM Form Submission trigger both miss it. Use an Element Visibility trigger on the success message instead, and confirm in GTM Preview that an event actually fires on submit.
Why does GA4 show more form submissions than I received?
Usually double counting — Enhanced Measurement form tracking running alongside a custom GTM setup, both firing on one submission. Disable the Form interactions toggle if you built your own tracking. Inflated thank-you pages from direct visits and bot spam are the other common causes.
How do I mark a form submission as a conversion?
In GA4, go to Admin → Events, find your form event, and toggle “Mark as key event.” Google renamed conversions to key events in 2024, but they still import into Google Ads as conversions. The event must have fired at least once before it appears in the list.
Can I track HubSpot or Typeform forms in GA4?
Yes, but not with standard triggers, because they load in cross-origin iframes. HubSpot fires a global JavaScript event that GTM can listen for with a Custom Event trigger. Typeform can redirect to a thank-you page on your own domain, which GA4 then tracks as a page view.
Is Enhanced Measurement form tracking accurate?
Not reliably. It works for basic HTML forms on simple sites but misses AJAX and JavaScript forms and frequently inflates submission counts. For trustworthy data, use a thank-you page or a GTM trigger instead, and disable Enhanced Measurement form tracking to avoid duplicates.