Elementor Forms conversion tracking: 3 ways to do it
Learn three different ways to set up conversion tracking for Elementor Forms, and how to work out which one is right for you.
Are you spending on ads, or putting real effort into SEO, to bring people to your website, but you have no clear idea which of those channels and campaigns actually turn into leads? If that sounds familiar, you are not alone.
When you cannot see which campaigns are producing real leads, rather than just clicks and page visits, it is easy to keep pouring budget into things that are not delivering.
The fix is proper conversion tracking, so a conversion gets recorded every time someone submits one of your Elementor forms.
The tricky part is that there is more than one way to do it, and the right one depends on your goal. If all you want is to see submissions in Google Analytics, there is a quick, mostly free route. But if you want those same conversions flowing into Google Ads, Meta Ads, and similar platforms, you need something sturdier, and that is exactly where a lot of DIY setups quietly fall apart.
In this article we will show you three different ways to set up conversion tracking for Elementor Forms and help you work out which one fits your situation. We build form conversion tracking for a living, and Elementor has a couple of genuine quirks of its own, so we will flag the gotchas along the way so you know what to watch for.
Method 1: Use the MonsterInsights Forms addon
Good for: Sending form submission events to Google Analytics 4.
If your goal is simply to see Elementor form submissions as events in GA4, this is all you need. Google Analytics does not need to know who submitted the form. It just needs to know that a conversion happened.
Elementor Pro's Form widget has plenty of built-in actions for after a submission (redirect, send an email, post to a webhook, add a row to Google Sheets, and more), but a native, built-in Google Analytics action is not one of them. The closest thing to a plug-and-play path to GA4 is the MonsterInsights Forms addon, which plugs into Elementor forms and tracks submissions with no code and no Google Tag Manager required.
The catch is that the Forms addon needs a MonsterInsights Pro license or higher, so this option is off the table if you are only running the free version.
Step 1: Connect MonsterInsights to your GA4 property
Install and activate MonsterInsights, then follow its setup wizard to connect your Google account and choose the GA4 property you want your data to land in.
![]()
Step 2: Install the Forms addon
Go to Insights, then Addons, find Forms in the list, and select Download and Activate. Once the addon is active, it starts tracking submissions from every compatible form on your site (Elementor included).
Step 3: Test it, then mark it as a Key Event in GA4
Submit a quick test entry, then open the Realtime report in GA4 and look for the generate_lead event in the recent events list. That is the event MonsterInsights fires whenever a form is submitted. Once you can see it coming through, go to Admin, then Events (or Key Events) in GA4, find generate_lead, and mark it as a Key Event. That tells GA4 to treat it as a conversion, so it shows up properly in your acquisition and funnel reports rather than sitting there as a plain event.
![]()
Pros and cons
Pros:
- No code and no Google Tag Manager. The whole thing is set up inside WordPress and GA4.
- It is maintained by MonsterInsights, so it is far less likely to break the way a hand-rolled script can when Elementor ships an update.
- No personal data is sent to Google Analytics, so it is a clean, privacy-friendly setup.
Cons:
- It needs a MonsterInsights Pro license, so it is not actually free. If you do not already have MonsterInsights, that is an extra cost on top of Elementor Pro.
- The
generate_leadevent does not tell you which form was submitted, so there's no way to tell how many times your Request A Quote form was submitted versus your Newsletter Signup form. It's just lumps all form submissions together into one total. - It also sends the same
generate_leadevent when other forms on your site are submitted as well, including ones not built with Elementor Forms. And again there's no way to tell between them, so your conversion counts can end up looking much larger than they really are (because it's also counting when someone submits the job application form on your site, for example). - It only sends to Google Analytics. It does not push conversions to Google Ads, Meta, or anywhere else. Getting a conversion from Google Analytics into Google Ads is technically possible, but it is a poor substitute for a real Google Ads conversion, because Ads needs far more matching data than Analytics collects (more on that below).
Method 2: Use Google Tag Manager
Good for: Sending Enhanced Conversions to Google Ads.
If you using Google Ads to generate leads, simply counting form submissions like in Method 1 is not enough. Google Ads wants to match every conversion back to the specific person who clicked your ad, and it can only do that when you send information about the lead, like their name, email, and phone number, along with the conversion. This is known as Enhanced Conversions.
So for Google Ads, it is not enough to just say "a conversion happened". You need to capture the visitor's name, email, and phone when they submit the form, hash it with SHA-256 (Google Ads requires it), and send it over.
One way to do this is with Google Tag Manager, and here are the steps.
Step 1: Set up a Custom HTML tag and add form listening code
In GTM, create a new Custom HTML tag, paste in the snippet below, and set it to fire on the All Pages trigger.
The above code does a bunch of things:
- Detects the real success signal. Elementor Pro fires its own event called
submit_successonce a submission passes server-side validation, so the above code listens for that. Unlike other form tools, there is no need for a fallback native submit listener because Elementor Pro forms submit exclusively through Elementor's own AJAX pipeline, so there is no separate page-reload path to catch. - Reads the field values live. Elementor keeps the field values sitting in the form on the page when
submit_successfires (it does not clear them first), so the code reads them straight off the form at that exact point. - Extracts the name, email and phone. For each field in your form, it looks at the input type (like an
emailortelinput), the browser's autocomplete hint, the field's own visible label, and the field's internal key, and runs a scoring system to figure out which field contains the name, email and phone. It then extracts those from the form and stores them in the visitor's browser. - Drops sensitive fields. Password fields, card number and CVC fields, one-time codes, and anything whose type, autocomplete hint, label, or placeholder looks sensitive get skipped entirely before the value is touched.
- Sends the data once, and only on success. It pushes one
elementor_form_submittedevent to the dataLayer with the email, first name, last name, and phone it found, along with a best-effort form ID. A short dedupe window prevents it from firing twice if the success event fires more than once for the same submission.
The design of this snippet gets around two things that often trip people up on Elementor specifically.
Catch 1: Elementor's field keys are meaningless, and sometimes actively misleading. Elementor names its fields using bracket notation like form_fields[field_1], which makes it difficult to tell which field contains the information that needs to be sent to Google Ads (like the lead's name, email & phone). So the above code looks at the input type (like an email or tel input), the browser's autocomplete hint, the field's own visible label, and the field's internal key, and runs a scoring system to figure out which field is which. This makes it much more accurate at identifying the correct fields and extracting the data.
Catch 2: a combined "Name" field needs to be split. Elementor Forms doesn't provide a standardised name field, so a single field asking for a visitor's full name has to be identified from its visible label, then split into a first and last name on the first space. Otherwise, the name data can't be extracted and sent to ad platforms in the form they expect. The code above handles that automatically.
As you might be able to tell, this isn't just some snippet of code we put together for this article. The snippet is ported directly from the same detection module Converly uses in our own conversion tracking product. It's been tested extensively on real Elementor Forms using specific scenarios (i.e. entering an invalid email address, having incorrectly named fields in the form, etc). You can paste it in with confidence.
Step 2: Create Data Layer Variables for the captured data
To make sense of this step, it helps to know what the "dataLayer" is, because the rest of the steps rely on it.
Think of the dataLayer as a messenger between your website and Google Tag Manager. Your website can send messages to it (a form was just submitted, and here is the lead's email, name, and phone) and GTM sits there reading every message that comes through.
That is exactly what the code in Step 1 does. When a form is submitted, it drops a note onto the dataLayer called elementor_form_submitted, carrying the four values it captured (email, first_name, last_name, and phone).
But GTM will not automatically pull those individual values out for you. You have to tell it which ones you want, and that is what a Data Layer Variable does.
Navigate to the Variables section of Google Tag Manager, select New under User-Defined Variables, choose Data Layer Variable as the type, and give it a name. Repeat for each of the four values.
![]()
Variable 1:
- Name: Email
- Variable Type: Data Layer Variable
- Data Layer Variable Name: email
Variable 2:
- Name: First Name
- Variable Type: Data Layer Variable
- Data Layer Variable Name: first_name
Variable 3:
- Name: Last Name
- Variable Type: Data Layer Variable
- Data Layer Variable Name: last_name
Variable 4:
- Name: Phone
- Variable Type: Data Layer Variable
- Data Layer Variable Name: phone
Step 3: Create a Custom Event trigger
With the code and the variables in place, the next steps is to tell GTM to actually watch for the message and treat it as the cue to fire your conversion. That cue is called a Trigger.
Navigate to the Triggers section, click New, choose the Custom Event type, and set the event name to elementor_form_submitted. It has to match what the code pushes exactly.
![]()
Step 4: Turn on Enhanced Conversions in Google Ads
Head to your Google Ads account, go to Goals, then Conversions, then Settings, and turn on Enhanced Conversions.

When it asks how you want to implement it, choose Google Tag Manager. This gives Google Ads permission to receive and use the lead data you are about to send.
Step 5: Create your Google Ads conversion tag and map the data
Back in GTM, go to Tags, select New, choose Google Ads User Provided Data Event as the tag type, and map the four Variables from Step 2 to the fields it asks for (Email, Phone, First Name, Last Name).

Then set it to fire on the Custom Event trigger from Step 3.
![]()
Publish your GTM container, submit a test entry in GTM Preview mode, and confirm the elementor_form_submitted event arrives with the email, name, and phone filled in. Then keep an eye on the Enhanced Conversions diagnostics on the conversion action in Google Ads over the next day or two, which will tell you whether the data is being received and matched.
Pros and cons
Pros:
- It is free, and uses GTM, which you may already have installed on your site.
- It captures email, name, and phone, which is what Google Ads Enhanced Conversions needs to start matching conversions back to clicks.
- The capture code fires only on Elementor's confirmed
submit_successevent, so a rejected submission never gets counted. - Field identification does not just trust the field name, which matters on Elementor because its field keys are meaningless bracket notation.
Cons:
- There are a lot of moving parts. Between the GTM tag, the custom code, the trigger, four variables, the Google Ads settings, and the conversion tag, there is plenty to misconfigure, and getting just one thing wrong means the whole things falls over.
- You own and maintain it. An Elementor update, a theme change, or an unusual form layout can break the capture, and you won't get a nice little error message telling you what's wrong either; it just won't work, and you'll have no idea why.
- Sensitive data is a risk if you go off script or have some atypical field setup in your form. If a password or credit card field accidentally gets sent to the DataLayer, every other script on the page can read it (this is exactly why our snippet reads only email, name, and phone).
- It still runs in the visitor's browser, so if they are using an ad blockers and or a privacy-focused browser like Safari then it isn't going to work very well.
- Even done perfectly, it misses the data Google values most. It only captures what is in the form, not the click identifiers Google & Meta need (like the Google click ID, the Facebook Click ID, the Meta cookie IDs, the IP address, or the user agent). This is a limitation of Google Tag Manager itself, as a page cannot even read its own visitor's IP address without calling out to a server to ask for it. These are exactly the signals that lift Enhanced Conversions match quality, and a dataLayer setup cannot easily assemble or deliver them.
Method 3: Use Converly
Best for: Sending proper, server-side conversions to Google Ads, Meta Ads, LinkedIn Ads, GA4, and more, without having to do complicated configuration in Google Tag Manager.
If Method 2 sounded like a lot of set up for a limited result, that is because it is. Converly exists to solve exactly that problem. It is a dedicated conversion-tracking tool built to send accurate, server-side conversions to Google Ads, Meta Ads, LinkedIn Ads, etc. whenever someone submits an Elementor form on your site (without any of the complicated GTM configuration above).
Setup is a visual flow rather than custom code and 10 moving parts. You simply pick your trigger (an Elementor form submission), add one or more actions (a Google Ads conversion, a Meta conversion, a GA4 event, and so on), and that's it.
![]()
Once that flow is live, Converly gives you a small snippet to add to your site and then it takes care of the rest. It watches for the exact same submit_success signal Elementor fires on a real, successful submission, pulls out the lead's name, email, and phone, and sends everything to Converly's servers, which then pass it on to Google Ads, Meta Ads, and wherever else you have connected. Because that last step happens server-side rather than in the visitor's browser, ad blockers and privacy browsers like Safari have nothing to intercept.
The bigger upgrade over Method 2 is what else gets captured along the way. On top of the name, email, and phone, Converly also grabs the Google and Meta click IDs (GCLID and fbclid), Meta's own browser cookies, the visitor's IP address, and their user agent, and passes all of it through with every conversion. Those are the exact signals Google and Meta weight most heavily when matching a conversion back to a click, and having all of them present is usually the difference between a low Meta Event Match Quality score (around 3) and a high one (9 or 10).
You also get a full Conversion Log, so you can look up any lead who came through an Elementor form and see exactly what was captured, what was sent onward, and whether each destination accepted it.

There is also a real support team behind it if something needs troubleshooting, which is more than can be said for a GTM setup you built yourself.
Pros and cons
Pros:
- No code to write or maintain. You add a single snippet of code to your website, then build your Conversion Flow in a simple drag and drop builder.
- Handles Elementor's gotchas automatically (like the meaningless field names mentioned earlier).
- Captures the click IDs, cookies, IP, user agent, and more and send them along with each conversion. This boosts your match rate and gives the ad platforms much better data to optimise your ad campaigns on.
- Sends conversions server-side, so ad blockers and privacy browsers do not stop your conversions from reaching the ad platforms.
- Supports conditional logic, so you can send specific conversions when certain forms are completed on your site (e.g. only send a conversion when the Quote Request form is submitted, and not the newsletter signup form, for example).
- Lets you log in to Google Ads, Meta Ads, and so on (within the platform) and just pick the conversion you want to fire. No digging around for account IDs, conversion IDs, and the like.
- Gives you a full conversion log where you can see every lead that submitted your Elementor form, what data was captured, whether it was successfully sent to your ad platforms, and more.
- You get support from a team of experts who will happily help you get set up and troubleshoot any issues (you have no chance of getting help from Google if you use GTM).
Cons:
- It is a paid tool after the free trial. Plans start at $19 per month (but you would probably make that back in both the time saved setting up conversion tracking manually, plus the reduced cost per lead you will get when you have proper conversion tracking working in Google Ads, Meta Ads, and so on).
What not to do
So far we have covered the three best approaches for conversion tracking in Elementor Forms and outlined when each one is best. It is also worth knowing which approaches to avoid though, because some of the most common ways people try to track Elementor conversions will produce bad data. Here are the ones to stay away from.
Tracking thank you page visits
This is the most common DIY approach, and it is the one we would steer you away from most. The idea is to send people to a dedicated "thank you" page after they submit, then count visits to that page as conversions. It sounds clean, but there are plenty of ways it can go wrong.
It fires for people who never submitted anything. A thank you page is just a URL, and a URL can be reached without ever completing a form. People bookmark it, land on it from their browser history or autocomplete, get sent the link by someone else, or find it in Google if it ever gets indexed. Your own team will land on it when testing as well. Every one of those gets counted as a conversion, even though there was never a genuine form submission.
It can double-count real submissions. Refresh the thank you page and you get a second conversion. Hit the back button and return, or revisit it later from history, and you get more. It's possible for a single lead to get counted as a conversion multiple times, which inflates your numbers and means Google and Meta are optimising your ads against incorrect data.
You would get terrible match rates. Google Ads, Meta Ads, LinkedIn Ads, etc all want you to send them user data (like name, email, phone, etc) so they can use ti to match the conversion back to the original ad click. But if you're tracking a thank you page visit, none of the data is available, so any conversions you do send wouldn't really do anything.
It can also miss conversions. By default, Elementor shows its success message inline rather than redirecting anywhere, so you would need to configure a redirect action just to make this approach possible, and if the redirect doesn't work (maybe because the visitor is on a slow internet connection and never makes it to the thank you page, no conversion is recorded either.
The root problem is that a thank you page visit is a proxy for a conversion, not the conversion itself. The three methods above all fire on Elementor's actual confirmed submission, so they stay tied to what really happened.
Relying on the default form submit event in Google Tag Manager
When people set up tracking in Google Tag Manager, the obvious first move is GTM's built-in Form Submission trigger, which listens for the browser's native form submit event. This doesn't work with Elementor Forms though.
As mentioned earlier, Elementor forms submit exclusively via AJAX, so the browser submit event that GTM is waiting for never arrives. The frustrating part is that it fails silently. The trigger looks correctly set up, GTM saves without complaint, and you walk away thinking conversion tracking is live while your reports sit at zero.
Use Elementor's own success event instead, the way Method 2 and Method 3 (Converly) both do.
Using GA4's automatic form tracking (Enhanced Measurement)
GA4 has a built-in Enhanced Measurement feature that claims to track form submissions automatically with no setup.
Unfortunately it has the same problem as the Form Submission trigger in Google Tag Manager above. Its form detection relies on the standard HTML form submission event being sent through the browser, and Elementor forms do not use that, so the event never fires and nothing gets tracked.
If you want submissions recorded as conversions in GA4, use Method 1 or Method 3 above.
Firing the conversion on the submit button click
Some Elementor conversion tracking setups we have seen fire the conversion when someone clicks the submit button, usually with a click trigger in GTM on the button. The trouble is that a click is not a submission. The visitor might have left a required field blank, entered an email in the wrong format, or tripped the form's spam validation. Every one of those clicks gets counted as a conversion (and then when they fix the error and click submit again it gets counted as a second conversion).
Always fire on the confirmed submission, never on the click.
So which method should I use?
Here is the quick version:
- If you only need conversions in Google Analytics and do not mind paying for a MonsterInsights Pro license, Method 1 is the simplest, no-code option.
- If you are running Google Ads, Meta Ads, LinkedIn Ads, and the like, and you want the best possible conversion tracking system with the easiest possible setup, use a tool like Converly.
- If you only need to send conversions to Google Ads, do not mind some fiddly configuration, and would rather not pay for a tool, then Method 2 (Enhanced Conversions through Google Tag Manager) is probably your best bet. Just note that it only sends name, email, and phone, and does not send the other signals Google and Meta use for matching, like the GCLID, FBCLID, IP address, and user agent. It's a bit of a second-rate setup.
Wrap up
At this point in time, setting up conversion tracking is no longer optional if you are spending money on Google Ads, Meta Ads, or similar platforms. Accurate conversion data is what those platforms use to decide who to show your ads to next, so bad or missing data has a direct, negative impact on your results.
The numbers back this up too. Google's own figures show that the average business gets a 19% increase in conversions from proper, server-side conversion tracking. Meta says it's a 23% increase in conversions on their platform.
A tool like Converly gets you proper server-side conversion tracking without the GTM juggling act. You simply pick a trigger (an Elementor form being submitted), pick where the conversion should go, and you are set.
Best of all, it is free to try, and most people have it running in under 10 minutes. Start your 14-day free trial today.
About the author

Aaron is the founder of Converly. With over 15 years of experience in digital marketing and SaaS, he's passionate about helping businesses track and optimise their ad conversions.
