Free GTM form listeners
Free, open-source Google Tag Manager listeners for Jotform, Gravity Forms, Elementor Pro, Contact Form 7, WPForms, GoHighLevel, Unbounce, SwipePages, Kartra and Squarespace, plus one Universal tag that covers nine of them. They fire on the confirmation a visitor actually sees, report failed submits, and hand clean email and phone data to Google Ads Enhanced Conversions and Meta CAPI.
11 listeners
MIT licensed
Source on GitHub
Updated October 2026
How every listener works
1. Watch for the real confirmation
Success class, confirmation render, verified iframe message or a referrer only the platform can set.
2. Capture and normalize the lead
Email, phone in E.164 and name, with optional SHA-256 hashing. Removed automatically when PII consent is denied.
3. Push one event with an ID
One success per lead, deduplicated for 5 minutes, with an event ID for Meta CAPI and the detection method for reporting.
Why these are different
A typical listener recipe is a few lines that push one event when the platform says so. That is enough for a GA4 count. It breaks when the form redirects, and it gives Google Ads and Meta nothing to match a lead on.
Capability
Typical listener recipe
IyrexMedia listeners
Success detection
The platform’s JS event, or a button click
The confirmation the visitor sees, with the detection method recorded on every event
Redirect and thank-you forms
Often unsupported, or left to a page-view trigger
Thank-you recall, a pagehide fallback and, for Jotform, a verified submit referrer
Enhanced Conversions data
None, or raw values read from fixed field IDs
Email, phone and name classified and normalized, with optional SHA-256
Meta CAPI deduplication
Not included
ec_event_id on every event plus a 5-minute dedupe ledger
Consent
Not included
Consent Mode v2, OneTrust and Cookiebot detected. PII removed when consent is denied
Failed submissions
Rarely tracked
Failure events that only count after real input, so empty clicks are ignored
Debugging
GTM Preview only
A status() console API and an initialization heartbeat
Hashing, CAPI event IDs and dedupe are built into every listener, including the Universal v3.3.0 tag.
The library
Every listener is one GTM Custom HTML tag. Filter by platform type, open the one you need, then download the tag or read the source on GitHub.
New: Contact Form 7, WPForms and Squarespace listeners, and Universal v3.3.0 now covers nine platforms. Sign up for update alerts below to hear when a listener changes.
Install in about 10 minutes
1
Grab the GTM tag from the listener page, or copy it from the GitHub repository.
2
Create a Custom HTML tag, paste the file in and trigger it on All Pages.
3
Add a Custom Event trigger for the listener’s success event and attach your GA4, Google Ads and Meta tags.
4
Submit a real test, confirm one success event, then retire the old click or thank-you trigger.
Questions
Still stuck after reading the listener page? Book an audit and we will check the setup with you.
A small script that runs in a Google Tag Manager Custom HTML tag, watches for a specific interaction (here, a successful form submission) and pushes an event into the dataLayer. GTM triggers then use that event to fire GA4, Google Ads, Meta or server-side tags.
Most modern form plugins submit with AJAX, iframes or JavaScript, so the built-in trigger often never sees the submit, or fires before validation has passed. A listener reads the platform’s own success signal instead.
Yes for most platforms. The listeners store the form data at submit and recall it on a same-domain thank-you page, and the Jotform listener checks that the visitor arrived from Jotform’s submit server. Each listener page lists exactly which redirect paths it covers.
Yes. The listeners capture email, phone and name, normalize them and can add SHA-256 hashes. Each event also carries ec_event_id, which you send as the event ID on both the browser and server Meta events so a lead is counted once. Keep raw PII out of GA4.
They detect Google Consent Mode v2, OneTrust and Cookiebot. With analytics consent denied nothing fires, and with PII consent denied events fire without contact data. Other consent tools can be connected with one function. If no consent tool is found they assume full consent, so check that matches your own requirements.
Both run the same v3 core, so hashing, dedupe and event IDs are the same. Use a single-platform listener when a site runs one form platform, because it is roughly half the size. Use the Universal tag when one site mixes Gravity Forms, Elementor Pro, Contact Form 7, WPForms, GoHighLevel, Unbounce, SwipePages, Kartra or Squarespace and you want one install. Never run both for the same platform on one page.
Yes. Every listener is MIT licensed, so you can use and modify it on your own and client sites. Keep the license notice in the file.
Each single-platform tag is a single script of roughly 38 to 47 KB uncompressed, and the Universal tag is about 83 KB. They run once per page, make no external requests and have no dependencies. Load only what the site needs.
Update alerts
Form platforms change their markup without notice. Leave your email and we will tell you when a listener changes or a platform update affects tracking.
We install the listener, connect GA4, Google Ads Enhanced Conversions and Meta CAPI, and check the numbers against your CRM so every lead is counted once.