How to Track Fluent Forms Submissions with Google Tag Manager

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 NameData Layer Variable
Emailinputs.email
First Nameinputs.first_name
Phoneinputs.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.