Gravity Forms + Google Ads Conversion Tracking Setup
I see this exact broken setup in about 35% of WordPress sites I audit. Gravity Forms is firing the submission event, Google Ads shows zero conversions, and you’re left wondering if your campaigns are actually working. The problem isn’t your forms — it’s that Gravity Forms uses AJAX submissions with a specific event (gform_confirmation_loaded) that most people completely miss.
Here’s how to fix it properly with Enhanced Conversions, which I now set up on 100% of client accounts because iOS tracking losses hit form conversions hardest.
What You’ll Have Working By The End
- Gravity Forms submissions automatically tracked as Google Ads conversions
- Enhanced Conversions capturing first-party data (email, phone, name) for better attribution
- Real-time conversion tracking that works even when users block third-party cookies
- A testing workflow to verify everything before you scale ad spend
- Cross-platform number matching between WordPress admin and Google Ads
Prerequisites
- Google Ads account with conversion tracking access
- WordPress admin access with Gravity Forms installed and active
- Google Tag Manager container installed on your WordPress site
- At least one active Gravity Form collecting email addresses
- GTM Publish permissions (not just edit access)
Step 1: Create the Conversion Action in Google Ads
Log into Google Ads and navigate to Goals → Conversions → New conversion action → Website.
Set these specific values:
- Conversion name: “Gravity Forms - [Form Name]” (be specific about which form)
- Category: “Contact” for lead gen forms, “Sign-up” for newsletter forms
- Value: Use “Don’t use a value” unless you assign dollar values to leads
- Count: “One” (crucial for lead gen — you don’t want duplicate counting)
- Attribution model: “Data-driven” if available, otherwise “Last click”
- Conversion window: 30 days (default is fine for most B2B forms)
Click “Create and Continue.” You’ll get a Conversion ID (looks like AW-123456789) and Conversion Label (looks like AbCdEfGhIj_12AbCdEf). Copy both — you need them for GTM.
Step 2: Set Up the Data Layer Push in WordPress
Gravity Forms fires gform_confirmation_loaded when a form submits successfully. You need to catch this event and push form data to the data layer for Enhanced Conversions.
Add this code to your theme’s functions.php or in a custom plugin:
// Track Gravity Forms submissions for Google Ads Enhanced Conversions
add_action('wp_footer', 'gf_google_ads_tracking_script');
function gf_google_ads_tracking_script() {
?>
<script>
jQuery(document).ready(function($) {
$(document).on('gform_confirmation_loaded', function(event, formId) {
// Get form data from the submitted form
var formData = {
'email': '',
'phone': '',
'first_name': '',
'last_name': ''
};
// Extract data from form fields (adjust field IDs based on your form)
var form = $('#gform_' + formId);
// Most common Gravity Forms field mappings
formData.email = form.find('input[type="email"]').val() ||
form.find('input[name*="email"]').val() || '';
formData.phone = form.find('input[type="tel"]').val() ||
form.find('input[name*="phone"]').val() || '';
formData.first_name = form.find('input[name*="first"]').val() ||
form.find('input[name*="fname"]').val() || '';
formData.last_name = form.find('input[name*="last"]').val() ||
form.find('input[name*="lname"]').val() || '';
// Push to data layer for GTM
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'gravity_form_submission',
'form_id': formId,
'user_data': {
'email_address': formData.email,
'phone_number': formData.phone,
'first_name': formData.first_name,
'last_name': formData.last_name
}
});
console.log('Gravity Form submission tracked:', formId, formData);
});
});
</script>
<?php
}
Important: If your Gravity Forms use different field types or you have specific field IDs, you’ll need to adjust the selectors. Check your form HTML or use input_X format where X is the field ID (like input_3 for field ID 3).
Step 3: Create the GTM Trigger
In Google Tag Manager, create a new Custom Event trigger:
- Trigger Type: Custom Event
- Event Name:
gravity_form_submission - Trigger Conditions: Leave as “All Custom Events” or add
Form ID equals [specific form ID]if you want to track only certain forms
Name it “GF Submission - Google Ads” and save.
Step 4: Set Up Data Layer Variables
Create these Data Layer Variables in GTM (Variables → New → Data Layer Variable):
-
Variable Name: “DL - Form ID”
Data Layer Variable Name:form_id -
Variable Name: “DL - User Email”
Data Layer Variable Name:user_data.email_address -
Variable Name: “DL - User Phone”
Data Layer Variable Name:user_data.phone_number -
Variable Name: “DL - User First Name”
Data Layer Variable Name:user_data.first_name -
Variable Name: “DL - User Last Name”
Data Layer Variable Name:user_data.last_name
Step 5: Create the Google Ads Conversion Tag
Create a new Google Ads Conversion Tracking tag in GTM:
Tag Configuration:
- Tag Type: Google Ads Conversion Tracking
- Conversion ID: Your
AW-123456789from Step 1 - Conversion Label: Your conversion label from Step 1
- Conversion Value: Leave blank for lead gen
- Currency: USD (if you’re using values)
Enhanced Conversions Settings (this is crucial):
- Enable Enhanced Conversions: ✅ Checked
- User Data Source: Data Layer
- Email:
{{DL - User Email}} - Phone:
{{DL - User Phone}} - First Name:
{{DL - User First Name}} - Last Name:
{{DL - User Last Name}}
Triggering: Select your “GF Submission - Google Ads” trigger from Step 3.
Name the tag “Google Ads Conv - Gravity Forms” and save.
Step 6: Testing & Verification
Test the Data Layer Push
- Enable GTM Preview mode
- Fill out and submit your Gravity Form
- In the GTM debug panel, look for the
gravity_form_submissionevent - Click on the event and check the Data Layer tab — you should see
user_datawith email, phone, and name fields populated
If you don’t see the event, check your browser console for JavaScript errors. The most common issue is jQuery not being loaded or conflicts with the gform_confirmation_loaded event.
Test the Google Ads Tag
- In GTM preview, after submitting the form, click on the
gravity_form_submissionevent - Look for your Google Ads conversion tag in the “Tags Fired” section
- Click on the tag to see if Enhanced Conversions data is being passed correctly
Verify in Google Ads
- Go to Google Ads → Goals → Conversions
- Find your conversion action and check the “Status” column — it should show “Recording conversions” within 3 hours
- Check the “Enhanced conversions” column — it should show a percentage (usually 60-90% for forms with email collection)
Cross-check the numbers: Compare Gravity Forms entries (WordPress Admin → Forms → Entries) with Google Ads conversion counts. Acceptable variance is 5-15% due to attribution windows and bot filtering.
Troubleshooting
Problem: GTM shows gravity_form_submission event but no form data in user_data
Solution: Your field selectors are wrong. Inspect your form HTML and update the jQuery selectors in the PHP code. Look for actual name attributes or id attributes that match Gravity Forms’ pattern.
Problem: Google Ads shows “Not recording conversions” after 24 hours
Solution: Check your Conversion ID and Label are correct. The most common mistake is copying the wrong label or including extra characters. Also verify your GTM container is published, not just previewed.
Problem: Enhanced Conversions showing 0% match rate
Solution: Your email field is empty or malformed. Check that users are actually entering valid email addresses and that your jQuery selector is finding the email input. Test with a valid email like “test@gmail.com”.
Problem: Double-counting conversions (2x the actual form submissions)
Solution: You probably have both the GTM tag AND the Google Ads global site tag firing. Remove one of them. Also check that your conversion action is set to “One” not “Every” for counting.
Problem: Form submissions work but Google Ads conversions are delayed by hours
Solution: This is normal. Google Ads processes conversions in batches. Enhanced Conversions can take 2-6 hours to show up, especially for new conversion actions. Don’t panic if numbers don’t match immediately.
Problem: AJAX forms not triggering the gform_confirmation_loaded event
Solution: Some Gravity Forms setups disable AJAX. Check your form settings and ensure “Enable AJAX” is checked. If it’s disabled by design, you’ll need to use a different event like form submission success page loads.
What To Do Next
Now that your Gravity Forms are tracking properly in Google Ads, consider these next steps:
- Set up Gravity Forms tracking for Meta Ads to compare performance across platforms
- Configure Gravity Forms to GA4 conversion tracking for a complete analytics view
- Add Gravity Forms to LinkedIn Ads conversion tracking if you’re running B2B campaigns
- Connect your Gravity Forms to HubSpot to close the loop on lead qualification
Ready to audit your entire tracking setup? I’ll review your Google Ads + Gravity Forms integration for free and show you exactly what’s broken. Get your free tracking audit — I usually find 3-5 fixable issues that improve conversion data quality.
This guide is part of the Google Ads Conversion Tracking Hub — covering every major form, CRM, and ecommerce platform integration with Google Ads.