If you’re using Fluent Forms on your website, tracking successful form submissions in Google Tag Manager can be more complicated than expected.
Why?
Because Fluent Forms often submits via AJAX, which means:
- The page does not reload
- Native GTM form triggers may not fire reliably
- Click-based tracking can produce false positives
The best approach is to use Fluent Forms’ built-in JavaScript success event.
In this guide, I’ll show you how to track Fluent Forms submissions properly using a custom event listener and push submission data into the dataLayer.
Why Native GTM Form Triggers Often Fail for Fluent Forms
Standard GTM form submission triggers rely on native browser submit events.
But Fluent Forms typically:
- Uses AJAX submission
- Prevents full-page reload
- Handles success states asynchronously
That means GTM may:
- Miss submissions entirely
- Fire before validation completes
- Track failed submissions incorrectly
To solve this, we listen for Fluent Forms’ own success event instead.
What This Setup Tracks
With the listener below, you can capture:
- Successful Fluent Form submissions only
- Form ID
- All submitted input values
- Structured dataLayer events for analytics/ad platforms
Step 1: Add the Fluent Forms Event Listener
Create a Custom HTML Tag in GTM and add the script below.
Fire it on All Pages or DOM Ready.
<script>
(function ($) {
var fluentForms = $(‘form.frm-fluent-form’);
fluentForms.on(‘fluentform_submission_success’, function () {
var submittedFormId = this.getAttribute(‘data-form_id’);
var formPayload = new FormData(this);
var normalizedInputs = {};
formPayload.forEach(function (fieldValue, fieldName) {
var cleanedFieldName = fieldName
.replace(/]$/g, ”)
.replace(/[\[\]]/g, ‘_’);
normalizedInputs[cleanedFieldName] = fieldValue;
});
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: ‘optizent_fluent_form_submit’,
form_provider: ‘Fluent Forms’,
form_id: submittedFormId,
form_inputs: normalizedInputs
});
});
})(jQuery);
</script>
How This Script Works
Let’s break down what happens behind the scenes.
It Hooks Into Fluent Forms’ Success Event
optizent_fluent_form_submit
This event fires only when the submission succeeds.
That makes it far more reliable than click or submit triggers.
It Captures the Form ID
var formId = this.getAttribute(‘data-form_id’);
Useful when tracking multiple Fluent Forms on the same website.
It Collects All Submitted Inputs
var formData = new FormData(this);
This gathers every submitted field automatically.
It Cleans Nested Field Names
Fluent Forms may output nested field names like:
user[email]
The script converts them into cleaner keys:
user_email
This makes GTM variables easier to configure later.
It Pushes a Structured DataLayer Event
Example output:
{
event: “fluent_form_submit”,
form_id: “3”,
inputs: {
first_name: “John”,
email: “john@example.com”
}
}
Step 2: Create GTM Trigger
Inside GTM:
Trigger Type
Custom Event
Event Name
optizent_fluent_form_submit
Step 3: Create Data Layer Variables
Because the inputs are nested inside inputs, use dot notation.
Examples:
| Variable Name | Data Layer Variable |
| inputs.email | |
| First Name | inputs.first_name |
| Phone | inputs.phone |
Step 4: Send Conversions to Analytics / Ad Platforms
You can now fire:
Analytics Events
- GA4 Lead Event
- Custom Funnel Events
Advertising Conversions
- Google Ads Conversion Tracking
- Meta Lead Event
- TikTok Conversion Events
Why This Method Is Better Than Click Tracking
Many implementations incorrectly track form submissions using:
- Button click triggers
- CSS selector clicks
- Thank-you page assumptions
Those approaches often:
- Track failed submissions
- Miss AJAX completions
- Produce inflated conversion numbers
Using Fluent Forms’ success event avoids those issues.
Ensure the listener loads before form interaction.
Recommended trigger:
- DOM Ready
or - All Pages
Final Thoughts
If you use Fluent Forms, relying on default GTM form triggers can lead to inaccurate tracking.
Using Fluent Forms’ built-in success event gives you a cleaner and more reliable implementation.
This setup helps you:
- Track real successful submissions
- Capture structured lead data
- Improve analytics accuracy
- Send better conversion signals to ad platforms
If you run paid traffic to Fluent Forms lead forms, this is the setup you want.
