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.
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.
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:
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.
The consent problem: losing half your form data
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.
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.
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.
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.
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.
* 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.
- Meta Conversions API (CAPI): Your server sends form conversion events directly to Meta's Graph API. No GA4 involved at any step. Meta even offers a no-code CAPI Gateway for simpler setups.
- Google Ads Enhanced Conversions: Uses the Google Ads conversion tag (a small snippet, separate from GA4) plus a server-side API for hashed user data. The Google Ads API documentation shows this working without GA4.
- TikTok Events API: A standalone server-to-server integration with its own pixel ID and access tokens.
- LinkedIn Conversions API: Direct REST endpoints with OAuth authentication. No dependency on any analytics tool.
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.
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.

Comments
Loading comments...
Leave a comment