Elementor Forms + Google Ads Conversion Tracking Setup
I see this exact setup broken in about 60% of WordPress accounts I audit. The most common issue? The Enhanced Conversions setup is either missing entirely or sending hashed email data that Google can’t match. When it’s working correctly, you’ll typically see 15-25% more conversion attribution than basic tracking alone.
The second biggest issue is timing — Elementor’s AJAX form submissions can fire tracking before the Enhanced Conversions data is properly captured, leading to conversions that show up in Google Ads but can’t be enhanced with first-party data.
What You’ll Have Working By The End
- Elementor Forms submissions firing as Google Ads conversions within 2-3 seconds
- Enhanced Conversions capturing email and phone data for improved attribution
- Proper conversion counting (one per form submission, not multiple)
- Cross-platform verification showing 5-15% variance between Elementor’s entries and Google Ads
- Debug visibility in both GTM Preview and Google Ads real-time reports
Prerequisites
- Google Ads account with conversion tracking access
- Google Tag Manager container installed on your WordPress site
- Elementor Pro (required for Elementor Forms)
- At least one active Elementor form on your site
- Admin access to your WordPress dashboard
- Enhanced Conversions enabled in your Google Ads account (recommended)
Step 1: Create Your Google Ads Conversion Action
Log into Google Ads and navigate to Goals → Conversions → Create Conversion Action.
Select “Website” and configure:
- Conversion name: “Elementor Form Lead” (or whatever makes sense for your business)
- Category: Choose “Contact” for lead forms
- Value: Set to “Same value for each conversion” if each lead has similar value
- Count: Select “One” — crucial for lead generation
- Attribution model: “Data-driven” (default is fine)
- Conversion window: 30 days click, 1 day view (adjust based on your sales cycle)
Copy your Conversion ID and Conversion Label — you’ll need both for GTM.
If you’re using Enhanced Conversions (which you should), enable it here and select “Automatic enhanced conversions” or “Manual enhanced conversions.” I recommend Manual so you have full control over what data gets sent.
Step 2: Set Up the Data Layer Push
Elementor Forms doesn’t automatically push to the data layer, so we need to add custom JavaScript. Add this code to your theme’s functions.php file or use a plugin like “Insert Headers and Footers”:
<script>
document.addEventListener('DOMContentLoaded', function() {
// Listen for successful Elementor form submissions
jQuery(document).on('submit_success', '.elementor-form', function(event, response) {
// Get form data
var formElement = event.target;
var formData = new FormData(formElement);
// Extract user data for Enhanced Conversions
var email = formData.get('email') || formData.get('form_fields[email]') || '';
var phone = formData.get('phone') || formData.get('form_fields[phone]') || '';
var firstName = formData.get('first_name') || formData.get('name') || '';
var lastName = formData.get('last_name') || '';
// Get form ID from Elementor
var formId = formElement.getAttribute('data-settings') ?
JSON.parse(formElement.getAttribute('data-settings')).form_name || 'unknown' :
'unknown';
// Push to data layer
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'elementor_form_submit',
'form_id': formId,
'user_data': {
'email_address': email,
'phone_number': phone,
'address': {
'first_name': firstName,
'last_name': lastName
}
}
});
// Debug logging
console.log('Elementor form submitted:', {
form_id: formId,
has_email: email !== '',
has_phone: phone !== ''
});
});
});
</script>
This script captures the Elementor form submission event and structures the data in a way that’s perfect for Enhanced Conversions.
Step 3: Create the GTM Trigger
In Google Tag Manager:
- Triggers → New → Custom Event
- Event name:
elementor_form_submit - Use regex matching: Leave unchecked
- Some Custom Events: Check this if you only want specific forms to trigger conversions
- Variable:
{{form_id}} - Operator:
equalsormatches RegEx - Value: Your specific form ID or pattern
- Variable:
If you want all Elementor forms to trigger conversions, leave it as “All Custom Events.”
Step 4: Configure the Google Ads Conversion Tag
Create a new tag in GTM:
- Tags → New → Google Ads Conversion Tracking
- Conversion ID: Enter your Conversion ID from Step 1
- Conversion Label: Enter your Conversion Label from Step 1
- Conversion Value: Set to static value or use
{{some custom variable}}if dynamic - Currency Code: USD (or your currency)
For Enhanced Conversions, enable it and add:
// User Provided Data section
{
"email_address": "{{DLV - user_data.email_address}}",
"phone_number": "{{DLV - user_data.phone_number}}",
"address": {
"first_name": "{{DLV - user_data.address.first_name}}",
"last_name": "{{DLV - user_data.address.last_name}}"
}
}
You’ll need to create Data Layer Variables in GTM for each of these paths:
- Variable Name:
user_data.email_address, Data Layer Variable Name:user_data.email_address - Variable Name:
user_data.phone_number, Data Layer Variable Name:user_data.phone_number - And so on…
Set your trigger to the elementor_form_submit trigger you created in Step 3.
Step 5: Handle the Timing Issue
Elementor’s AJAX submissions can be tricky. Add this enhanced version of the data layer push that ensures proper timing:
<script>
jQuery(document).on('submit_success', '.elementor-form', function(event, response) {
// Wait a brief moment for DOM to settle
setTimeout(function() {
var formElement = event.target;
var formData = new FormData(formElement);
// Your existing data extraction code here...
// Enhanced push with callback
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'elementor_form_submit',
'event_callback': function() {
console.log('Google Ads conversion fired successfully');
},
'event_timeout': 2000,
'form_id': formId,
'user_data': {
'email_address': email,
'phone_number': phone,
'address': {
'first_name': firstName,
'last_name': lastName
}
}
});
}, 100); // 100ms delay ensures form data is captured
});
</script>
Testing & Verification
GTM Preview Mode:
- Enable Preview mode in GTM
- Submit your Elementor form
- Check that
elementor_form_submitevent fires - Verify your Google Ads Conversion tag fires
- Check that Enhanced Conversions data is populated in the tag details
Google Ads Verification:
- Go to Google Ads → Goals → Conversions
- Look for your conversion action in the table
- Check the “Status” column — should show “Recording conversions” within 2-3 hours
- Use Google Ads → Tools → Google Ads Tag Helper Chrome extension on your form page
Enhanced Conversions Check:
- Google Ads → Goals → Conversions → Click your conversion action
- Look for “Enhanced conversions” status
- Should show percentage of conversions enhanced (aim for 70%+)
Cross-Check Numbers:
- Elementor: WordPress Admin → Elementor → Submissions
- Google Ads: Conversions report
- Acceptable variance: 5-15% (Google Ads may show slightly fewer due to attribution windows)
Troubleshooting
Problem: GTM Preview shows the event firing, but no conversion tag → Solution: Check that your trigger conditions exactly match the event name. Case sensitivity matters. Also verify the Google Ads tag has the correct Conversion ID/Label format.
Problem: Conversions showing in Google Ads but Enhanced Conversions at 0% → Solution: The email/phone data isn’t reaching Google properly. Check your Data Layer Variables are pulling from the right paths, and ensure the email field in your Elementor form is actually named “email” (not “email_address” or “user_email”).
Problem: Multiple conversions firing for single form submission → Solution: Elementor sometimes triggers multiple events. Add a flag to prevent duplicate tracking: if (formElement.dataset.tracked) return; formElement.dataset.tracked = 'true'; at the start of your event listener.
Problem: Form submissions not triggering the conversion at all → Solution: The submit_success event might not be firing. Try using elementor/frontend/form/success instead, or check if there are JavaScript errors preventing the event listener from attaching.
Problem: Enhanced Conversions data looks wrong in Google Ads → Solution: Check that you’re not double-hashing email addresses. Google handles the hashing automatically — send plain text email addresses in the user_data object.
Problem: Conversion tracking works in test but not in live traffic → Solution: Ad blockers can interfere. About 15-25% of users block Google Ads tags. Also check if your site has a Content Security Policy that’s blocking GTM’s Google Ads requests.
What To Do Next
Now that your Elementor Forms are tracking properly in Google Ads, consider these next steps:
- Set up Elementor Forms to HubSpot integration to sync your leads with your CRM
- Track the same forms in Meta Ads and LinkedIn Ads for multi-platform attribution
- Implement Google Analytics 4 tracking for deeper funnel analysis
- Ready for a complete tracking audit? Contact me for a free analysis of your current setup — I’ll identify what’s broken and prioritize the fixes that will have the biggest impact on your attribution accuracy.
This guide is part of the Google Ads Conversion Tracking Hub — a complete resource covering Google Ads tracking setup across every major form platform and CRM.