← All Guides

Elementor Form Tracking with Google Tag Manager: Send Submissions to GA4, Google Ads and Meta

The reliable way to track Elementor Pro form submissions with Google Tag Manager. Capture the success event, push it to the dataLayer, and fire GA4, Google Ads and Meta conversions only when the form actually submits.

Atiqul Islam
Written by Atiqul Islam

Tracking & analytics specialist. 278+ GTM, GA4 and server-side tracking projects for clients in the US, UK and Australia.

Rather not do this yourself? I set this up for clients every week. Free 15-minute audit, no obligation.

Book a Free Audit

Elementor Pro's Form widget is on a large share of small business websites, and most of them track it wrong. The usual mistakes are firing on the button click, using GTM's generic form trigger, or counting visits to a thank-you page that anyone can open directly.

Elementor fires a JavaScript event called submit_success once the server has accepted a submission. Listening for that event is the clean way to track it. This guide shows how to capture it in Google Tag Manager and send it to GA4, Google Ads and Meta.

How Elementor Form Submission Works

When a visitor submits an Elementor form, the widget sends the data to WordPress by AJAX. If validation passes and the server returns success, Elementor triggers a jQuery event named submit_success on the form element and shows the success message or redirects, depending on your settings.

Because the page does not reload, nothing in GTM fires by default. We need to listen for that event and push it to the dataLayer.

Step 1: Add the Listener in GTM

Create a Custom HTML tag named Listener - Elementor Form Success with this code and fire it on All Pages:

<script>
(function () {
  if (!window.jQuery) { return; }
  jQuery(document).on('submit_success', function (event) {
    var form = event.target;
    var formName = form.getAttribute('name') || '';
    var formIdField = form.querySelector('input[name="form_id"]');
    var formId = formIdField ? formIdField.value : '';
    var emailField = form.querySelector('input[type="email"]');
    var phoneField = form.querySelector('input[type="tel"]');

    window.dataLayer = window.dataLayer || [];
    window.dataLayer.push({
      event: 'form_submit_success',
      form_tool: 'elementor',
      form_name: formName,
      form_id: formId,
      user_email: emailField ? emailField.value.trim().toLowerCase() : undefined,
      user_phone: phoneField ? phoneField.value.trim() : undefined
    });
  });
})();
</script>

The email and phone values are pushed so they can be used for Google Ads Enhanced Conversions and Meta Advanced Matching. They are hashed before leaving the browser by those tags. If you do not want them in the dataLayer at all, remove those two lines.

Step 2: Create the Variables

Create Data Layer Variables for form_name, form_id, user_email and user_phone.

Step 3: Create the Trigger

Create a Custom Event trigger named CE - form_submit_success with the event name form_submit_success. If you only want a specific form, add a condition where form_name equals your form's name as set in the Elementor widget.

Step 4: GA4 Event

Create a GA4 Event tag with event name generate_lead and parameters form_name and form_id. Fire it on the trigger. In GA4, mark generate_lead as a key event.

Step 5: Google Ads Conversion

Create a Google Ads Conversion Tracking tag with your conversion ID and label and fire it on the same trigger. Make sure a Conversion Linker tag is firing on All Pages.

For Enhanced Conversions, create a User-Provided Data variable with the email and phone variables, then enable "Include user-provided data from your website" in the conversion tag and select it. Turn on Enhanced Conversions in the conversion action settings in Google Ads.

Step 6: Meta Lead Event

If you run Meta ads, fire a Meta Pixel Lead event on the same trigger with the email and phone passed as advanced matching parameters. If you use the Conversions API through server-side GTM, send the same event with a shared event ID for deduplication.

Step 7: Test

  1. Open GTM Preview and submit the form with real-looking test data.
  2. In the Preview panel, confirm that form_submit_success appears in the event list and that form_name and form_id are populated.
  3. Confirm the GA4, Google Ads and Meta tags fired once each.
  4. Use a tag debugger such as the Insighter Debugger extension to check the outgoing requests, including the hashed user data on the Google Ads request.
  5. Submit an invalid form, for example with an empty required field. Nothing should fire.

Troubleshooting

Why This Beats the Alternatives

A thank-you page can be opened directly and counts repeat visits. The generic GTM form trigger counts failed submissions. The button click counts people who never submitted. The submit_success event fires once, only after the server has accepted the lead. That is the number you want in GA4 and Google Ads.

Frequently Asked Questions

Why not use GTM's built-in Form Submission trigger?

Elementor forms submit with AJAX and the built-in trigger fires before validation. It counts failed submissions, spam and empty forms. The submit_success event only fires after the server accepts the submission.

Does this work with the free version of Elementor?

The Form widget is part of Elementor Pro. If you use a third-party form plugin inside a free Elementor page, follow the guide for that plugin instead.

Can I track different Elementor forms as different conversions?

Yes. The listener captures the form name and form ID. Add a trigger condition on form_name so each form fires its own GA4 event or Google Ads conversion.

I added the code and nothing fires. What now?

Check that jQuery is loaded on the page, that the Custom HTML tag fires on All Pages before the form is submitted, and that the form has no redirect set to an external page that loads before the event. Also check the browser console for JavaScript errors from other plugins.

Should I also use Elementor's thank-you page redirect?

Only if you want a thank-you page for the user. For tracking, the event method is better because it fires once and cannot be triggered by someone visiting the thank-you URL directly.

Want This Done Right the First Time?

Book a free 15-minute audit call. I'll review your setup, show you what is broken, and tell you exactly what it takes to fix it.

Chat Now