Clickport
Start free trial

How to Track Form Submissions Without Google Analytics

According to a 2018 survey of 502 U.S. adults by The Manifest, 81% of people have abandoned a form after starting to fill it out. That number is a few years old, but form friction hasn't gotten better since. Your contact forms, newsletter signups, and lead generation forms are leaking potential customers every day. If you're not tracking which forms convert and which don't, you're optimizing blind.

The default answer to "how do I track form submissions?" is Google Analytics 4. But GA4's form tracking is, by consensus among analytics professionals, its weakest and least reliable feature. It misses most modern form submissions, can't tell your contact form apart from your search bar, and requires Google Tag Manager to do anything useful. On top of that, if you have European visitors, consent banners are hiding 50-70% of your form data from you.

I'm David, founder of Clickport Analytics. I've spent two years building analytics tools and working through the technical details of form detection, consent mechanics, and browser event handling. This guide is everything I've learned about form tracking, condensed into something practical. I'll cover what's broken, why it's broken, and what the alternatives look like. I built one of those alternatives, so take my perspective with the appropriate grain of salt. But I've genuinely tried to make this useful regardless of which tool you end up choosing.

Why form submissions are your most important metric

Pageviews tell you that people showed up. Form submissions tell you that people took action. That's the difference between traffic and business results.

Every lead generation form, newsletter signup, contact form, and checkout is a form submission. And the conversion rates vary wildly depending on what you're asking visitors to do.

Average form conversion rates by type
Contest entry
35%
Order / payment
6%
Registration
5%
Contact form
3%
Newsletter
2%
Source: MarketingProfs form conversion benchmarks

These numbers matter because small improvements have outsized effects. Expedia once discovered that a single confusing "Company" field on their checkout form was costing them $12 million per year. Users were entering their bank name instead of skipping the optional field, causing address verification to fail. They removed the field. Revenue went up by $12 million annually.

That's not a story about a billion-dollar company with a massive analytics team. It's a story about paying attention to form data. And yet, companies spend just $1 on conversion optimization for every $92 they spend on acquiring traffic. The traffic is flowing in. Most businesses just aren't measuring where it leaks out.

You can't optimize what you don't track.

What's wrong with GA4 form tracking

GA4 has a built-in feature called Enhanced Measurement that includes "Form interactions" tracking. When you hear that GA4 tracks forms automatically, this is what people are referring to. It fires two events: form_start (when someone clicks into a form field) and form_submit (when a form is submitted).

In theory, this sounds useful. In practice, it is the least accurate Enhanced Measurement feature, and most analytics professionals recommend disabling it entirely.

Here's why.

AJAX forms are invisible. GA4 listens for the browser's native submit event on <form> elements. But most modern websites, especially anything built with React, Vue, Angular, or WordPress form plugins, submit forms via JavaScript (fetch() or XMLHttpRequest) without triggering that native event. The page doesn't reload. GA4 never sees the submission. If your forms show a "thank you" message on the same page instead of redirecting, GA4 is almost certainly missing them.

It can't tell your forms apart. The form_id and form_name parameters come from the HTML id and name attributes on the <form> element. Most forms don't have these attributes set. So GA4 records generic form_submit events with empty identifiers. You see "42 form submissions" in your report but have no idea if they came from your contact form, your newsletter signup, or your site search bar.

Search bars count as form submissions. If your search bar is wrapped in a <form> element (most are), every search query triggers a form_submit event. GA4 has no way to distinguish a search from a real form submission.

Meta Pixel creates phantom submissions. This is a widely documented issue. The Facebook/Meta Pixel creates invisible <form> elements in the DOM, submits tracking data through them, then deletes them. GA4 sees these as real form submissions. One reported case: a site with 22 actual visitors showed 42 form_submit events, almost all from Meta Pixel activity.

Failed submissions count as conversions. GA4 fires form_submit when the browser's submit event fires, not when the submission actually succeeds. If a user clicks Submit but validation fails (required fields blank, invalid email), GA4 still records a conversion.

What actually happened vs. what GA4 reports
Reality
Contact form5
Newsletter signup3
Search bar queries12
Failed validations4
Meta Pixel phantom38
Real submissions8
GA4 Enhanced Measurement
form_submit events54
With form name0
With form ID0
AJAX forms captured0
Data available in24-48h
Accuracy???

The data isn't just incomplete. It's actively misleading. And the recommended "fix" takes you even deeper into complexity.

The GTM rabbit hole

When GA4's automatic form tracking fails (which is most of the time), the standard advice is: "Set it up properly with Google Tag Manager."

GTM is a powerful tool. It's also a tool that takes months to learn and requires a level of technical knowledge that most website owners and marketers simply don't have. Here's what the actual setup process looks like for tracking a single form:

Tracking one form with GTM + GA4: the real process
1
Install GTM container snippet on every page of your site
2
Create a new workspace in GTM
3
Determine your form type (native HTML submit? AJAX? Thank-you page redirect?)
4
Create a trigger (Form Submission, Element Visibility, Custom Event, or dataLayer push)
5
For AJAX forms: write custom JavaScript to push events to the dataLayer
6
Create a GA4 Event tag and connect it to your trigger
7
Add custom parameters (form_id, form_name) and create matching custom dimensions in GA4
8
Enter Preview mode, submit a test form, verify in the debug console
9
Publish the container, mark the event as a Key Event in GA4
10
Wait 24-48 hours for data to appear in standard reports
Repeat for every form type on your site. AJAX forms, HubSpot embeds, and Contact Form 7 each need different trigger configurations.

That's the happy path. The reality is often worse.

Contact Form 7 (the most popular WordPress form plugin with 5+ million installs) uses AJAX and dispatches custom DOM events that GTM doesn't recognize. You need to write a custom JavaScript event listener that listens for the wpcf7mailsent event and pushes data to the dataLayer. If you're not a developer, that sentence might as well be in a different language.

HubSpot embedded forms don't work with GTM's standard form triggers because they load inside iframes. Popup forms are even worse.

Elementor forms break GTM's Form Submission trigger when reCAPTCHA v3 is enabled. The only event GTM sees is a generic gtm.click.

For small businesses, freelancers, bloggers, and anyone without a dedicated analytics team, this level of complexity is prohibitive. GA4 and GTM demand a notable level of technical know-how, and the implementation costs can exceed the value of the data you're trying to collect.

Even if you get GTM working perfectly, there's a bigger problem. GA4 uses cookies. Cookies require a consent banner under GDPR. And consent banners are destroying your form tracking data.

When the UK's Information Commissioner's Office (the people who literally enforce privacy law) implemented a proper, GDPR-compliant consent banner on their own website, their tracked traffic dropped by 90.8%. The vast majority of visitors said "no" to cookies and vanished from the data.

Across Europe, research consistently shows that when visitors are given a fair, equally weighted choice, only about 25% accept analytics cookies. The rest reject, close the banner, or ignore it entirely. And in countries like Germany, 42.7% of internet users also run ad blockers that block Google Analytics entirely.

For form tracking specifically, this means you're losing most of your conversion data before GA4 ever sees it.

Your form submissions through GA4's lens (EU visitors)
Real form submissions 100
Blocked by consent rejection -65
Blocked by ad blockers -10
GA4 reports ~25
GA4's Consent Mode can model some missing data, but requires 1,000+ daily consenting users to activate. Most small and mid-sized sites never qualify.

GA4 offers Consent Mode with behavioral modeling to "recover" some of the missing data. But this modeling requires at least 1,000 consenting users per day for 7 consecutive days before it activates. For most websites, that threshold is never met. And even when it works, the recovered data is modeled (estimated), not real. You're making business decisions based on Google's best guess.

For a deeper look at how privacy regulation affects analytics data, see our GDPR compliance overview and our complete privacy-friendly analytics guide.

How cookieless analytics solve the form tracking problem

The reason cookieless analytics tools can track every visitor (including the 70% who reject cookie banners) comes down to how they identify sessions.

Instead of storing a cookie on the visitor's device, these tools create a temporary identifier on the server side. The formula looks something like this:

hash(daily_salt + website_domain + ip_address + user_agent)

The daily salt is a random value that rotates every 24 hours and is deleted immediately after rotation. The raw IP address is never stored. The hash is a one-way function, so it can't be reversed back into the original components. This means the tool can recognize "same visitor" within a single day, but has no way to connect Tuesday's visitor to Wednesday's visitor. It's a deliberate trade-off: you lose multi-day user tracking (no "returning visitors" metric), but you gain complete data coverage and GDPR compliance without consent.

Form tracking coverage: cookie-based vs. cookieless
25%
tracked
GA4 (with consent)
75% of form data missing
100%
tracked
Cookieless analytics
No consent banner needed
Same website, same visitors, same forms. The only difference is how sessions are identified.

From a legal perspective, the French data protection authority (CNIL) has explicitly stated that cookieless analytics tools that meet specific criteria can operate without consent. The upcoming EU Digital Omnibus Package, proposed in November 2025, includes a provision for consent-free audience measurement when data is aggregated and non-identifying. The regulatory direction is clearly moving toward recognizing that not all analytics require consent.

Beyond the consent advantage, a growing number of cookieless tools also offer automatic form detection. Instead of requiring you to configure triggers for each form, these tools listen for submit events at the DOM level and capture every form submission on your site with zero setup. The setup for any of these tools is roughly the same: add one script tag and start seeing data.

Setup comparison
GA4 + Google Tag Manager
Install GTM snippet
Create workspace
Identify form type
Configure trigger
Write custom JS (AJAX)
Create GA4 event tag
Add custom dimensions
Test in debug mode
Publish container
Add consent banner
Steps10+
Time to data24-48h
Cookie bannerRequired
Cookieless analytics
Add one script tag
...that's it
Steps1
Time to dataInstant
Cookie bannerNot needed

Several tools in this space handle form tracking well. Plausible tracks form submissions automatically when you enable the setting in your site config, though all forms are grouped under a single goal (you filter by page to distinguish them). Matomo goes deeper with a premium Form Analytics plugin ($229+/year) that tracks field-level interactions, time per field, and drop-off points. Fathom and Simple Analytics support form tracking through custom event code that you add per form.

The tools differ in how much manual work is required and how much detail they capture. We'll compare them in the evaluation section below.

GA4 vs. cookieless: a head-to-head test

Claims about tracking accuracy are easy to make and hard to verify. So here's a concrete test.

On a WordPress test site running Contact Form 7, I submitted the same form 50 times over two days. The site had GA4 (with Enhanced Measurement enabled), Google Tag Manager (with a custom CF7 listener), and a cookieless analytics tool all running simultaneously. The site used a standard GDPR-compliant consent banner with equally weighted Accept/Reject buttons. About 60% of test sessions rejected cookies, reflecting typical EU consent rates.

Contact Form 7 test: 50 submissions over 2 days
GA4 Enhanced Measurement
0 / 50
GTM (custom listener)
19 / 50
Cookieless analytics
50 / 50
Controlled test on a WordPress site with Contact Form 7 and a GDPR-compliant consent banner. ~60% of sessions rejected cookies, matching typical EU consent rates.

GA4 Enhanced Measurement recorded zero submissions. Contact Form 7 uses AJAX, so the native browser submit event never fires. GTM with a properly configured wpcf7mailsent listener did capture submissions, but only from the ~40% of sessions that accepted cookies. The cookieless tool, which doesn't depend on consent, saw all 50.

This isn't unique to Contact Form 7. Any AJAX-based form on a site with a consent banner will produce similar results. The two problems compound: GA4 can't detect the form technically, and even when GTM fixes that, the consent banner blocks most sessions from being tracked.

Form tracking for WordPress sites

WordPress powers over 40% of all websites, and its form plugin ecosystem is a minefield for analytics tracking. Each plugin handles submissions differently, and most of them break GA4's automatic tracking completely.

WordPress form plugin compatibility
GA4 Auto
GTM Manual
Cookieless
Contact Form 7
Custom JS needed
WPForms
Plugin needed
Gravity Forms
Partial *
$259/yr addon
Elementor
Breaks w/ reCAPTCHA
HubSpot embed
iframe issues
JS SDK only **
Ninja Forms
AJAX, custom trigger
GA4 Auto = Enhanced Measurement form tracking. GTM Manual = requires per-plugin trigger config. Cookieless = tools with automatic form detection (Clickport, Plausible with setting enabled).
* Gravity Forms may trigger GA4's form_submit in some configurations, but the official GA4 addon ($259/yr) is recommended for reliable tracking.
** HubSpot forms rendered via their JS SDK work with DOM-level trackers. Old-style iframe embeds require HubSpot's callback API.

The pattern is clear. GA4's Enhanced Measurement fails with most WordPress form plugins because they use AJAX submissions. GTM can work, but each plugin needs a different approach. Contact Form 7 requires a custom JavaScript listener. WPForms needs MonsterInsights ($99/year) or ExactMetrics. Gravity Forms locks analytics behind a $259/year Elite license. Elementor breaks with reCAPTCHA v3. HubSpot embeds don't fire GTM triggers at all because they load inside iframes.

A cookieless analytics tool with automatic form detection intercepts submission events at the DOM level, regardless of which plugin generated the form or how it handles the submission internally. No per-plugin configuration, no addons, no JavaScript surgery.

What about ad platform attribution?

The biggest objection I hear to dropping GA4 is: "My ad platforms need GA4 for conversion tracking." This is a misconception. Every major ad platform now has its own server-side conversion API that works completely independently of Google Analytics.

Analytics and ad attribution: separate concerns
Measurement
Your analytics tool
Tracks all visitors and form submissions. Provides conversion rates, source attribution, and engagement data.
Attribution
Server-side conversion APIs
Sends conversion events to ad platforms: Meta CAPI, Google Ads API, TikTok Events API, LinkedIn CAPI.
GA4 was never the pipeline to your ad platforms. Each platform has its own independent conversion API.

The architecture is straightforward. When a form conversion happens, your server captures the relevant click IDs (gclid for Google, fbclid for Meta, ttclid for TikTok) from the visitor's URL parameters, then sends the conversion event plus hashed user data to each platform's API. Tools like Stape and Conversion Bridge can automate this forwarding for WordPress sites.

Think of it this way: GA4 was never the pipeline to your ad platforms. It was one middleman. Server-side APIs let you send conversion data directly, which is actually more reliable than routing everything through a browser-based analytics tool that's blocked by consent banners and ad blockers.

How to evaluate form tracking tools

If you're evaluating alternatives to Google Analytics for form tracking, these are the criteria that matter:

Automatic detection. Does the tool track form submissions out of the box, or do you need to configure triggers for each form? Automatic detection means any new form you add to your site is tracked immediately without touching your analytics setup.

Form identification. Can the tool tell you which specific form was submitted? Seeing "47 form submissions" without knowing which form they came from is almost useless.

AJAX/SPA support. Does it work with modern JavaScript forms that don't reload the page? This rules out GA4's Enhanced Measurement immediately.

No cookies, no consent banner. Does the tool require a cookie consent banner? If yes, you're losing 50-70% of your EU form data before it's even collected.

Real-time data. Can you see form submissions as they happen? GA4's standard reports have a 24-48 hour delay.

Source attribution. Can you see which traffic source, campaign, or referrer drove each form submission? This is essential for measuring marketing ROI.

Goal and conversion rate tracking. Can you set up specific forms as conversion goals with automatic rate calculation?

I've done my best to verify each cell in this table against current documentation. If you spot an inaccuracy, I'd genuinely like to know.

Form tracking tool comparison
Clickport
Plausible
Fathom
Matomo
Auto-detect
Custom code
With plugin
Form ID
Via page filter
Via event name
With plugin
AJAX support
No cookies
With config
Real-time
Source attribution
Goal tracking
Custom events
Field analytics
With plugin
Matomo's Form Analytics ($229+/yr) auto-detects forms and adds field-level tracking with drop-off reports. Matomo uses cookies by default but can be configured cookieless. Fathom requires manual fathom.trackEvent() code per form. Plausible groups all submissions under one goal; filter by page URL to distinguish forms. If you need field-level data (time per field, drop-off points), Matomo's premium plugin is the strongest option.

All four tools are solid privacy-focused alternatives to Google Analytics. The main differentiators for form tracking specifically are automatic detection (so you don't miss forms you forgot to configure), form identification (so you know which form each submission came from), and whether you need field-level analytics (where Matomo's premium plugin is uniquely strong).

Getting started

Whatever tool you choose, the important thing is to start tracking your forms with data you can actually trust. Any of the tools compared above will give you better form data than GA4 with a consent banner.

If you want to try Clickport specifically, add one script tag to your site:

<script defer data-domain="yoursite.com"
  src="https://clickport.io/tracker.js"></script>

Every form submission on your site is tracked automatically from that moment. The tracker listens for submit events on all <form> elements, captures the form's ID or name attribute, handles AJAX submissions, and sends a lightweight event to your dashboard. You can then create goals for specific forms (e.g., "Form submission where page URL contains /contact"), set up custom events for advanced use cases, and see conversion rates broken down by traffic source, country, or device.

Start your free 30-day trial. No credit card required. Add the script, submit a test form, and see the data appear in real time within minutes.

David Karpik

David Karpik

Founder of Clickport Analytics
Building privacy-focused analytics for website owners who respect their visitors.

Comments

Loading comments...

Leave a comment