Fluent Forms has become a popular Gravity Forms alternative, and it behaves well for tracking: every submission goes through AJAX and the plugin fires a fluentform_submission_success event with the form configuration attached. This guide shows how to capture that event in Google Tag Manager and send it to GA4, Google Ads and Meta.
How Fluent Forms Confirms a Submission
On success, Fluent Forms triggers a jQuery event on the document named fluentform_submission_success. The event data includes the form element and a config object containing the form ID. The form stays on the page until the confirmation message replaces it, so field values are still readable at that moment.
Step 1: The Listener Tag
Create a Custom HTML tag named Listener - Fluent Forms Success on All Pages:
<script>
(function () {
if (!window.jQuery) { return; }
jQuery(document).on('fluentform_submission_success', function (event, data) {
var form = data && data.form && data.form[0] ? data.form[0] : null;
var formId = data && data.config && data.config.id ? String(data.config.id) : '';
var email = form ? form.querySelector('input[type="email"]') : null;
var phone = form ? form.querySelector('input[type="tel"]') : null;
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'form_submit_success',
form_tool: 'fluent_forms',
form_id: formId,
user_email: email && email.value ? email.value.trim().toLowerCase() : undefined,
user_phone: phone && phone.value ? phone.value.trim() : undefined
});
});
})();
</script>
If a form has no email field of type email, for example a plain text field used for email, change the selector to match the field's name attribute.
Step 2: Variables and Trigger
Data Layer Variables: form_id, user_email, user_phone. Custom Event trigger: form_submit_success. To track one form only, add a condition on form_id matching the ID in the Fluent Forms admin list.
Step 3: Tags
- GA4 Event named
generate_leadwithform_idandform_tool. Mark it as a key event. - Google Ads Conversion Tracking with your ID and label, Conversion Linker on All Pages, and a User-Provided Data variable attached for Enhanced Conversions.
- Meta Lead with advanced matching, deduplicated against the Conversions API if you run server-side.
Step 4: Test
- GTM Preview, submit the form. Confirm
form_submit_successwith the correctform_id. - Confirm one fire each for GA4, Google Ads and Meta.
- Check the Google Ads request in a tag debugger such as the Insighter Debugger extension for the label and hashed user data.
- Submit a form that fails validation. Nothing should fire.
Troubleshooting
- Nothing fires: confirm the listener ran on page load. If the form loads in a popup, the document-level listener still catches it.
- form_id empty: the config object is missing in a very old version. Fall back to reading
data-form_idfrom the form element. - Payment forms count as leads: add a condition to exclude payment form IDs from the lead trigger and give them their own purchase tags.
Summary
Fluent Forms is one of the easier plugins to track correctly. One listener, one dataLayer event, three tags, and you have accurate leads in GA4, Google Ads and Meta with Enhanced Conversions attached.
