Your Google Ads dashboard says zero conversions for the morning. Your WordPress inbox already has twenty named leads from the same campaign. The form uses AJAX. The visitor never lands on a thank-you page. The Ads tag that was supposed to fire on that page never gets a chance.
That gap is real. It is also easy to mix up with a different job. Missing Ads conversions is not the same problem as a blank source on the named form row. This post keeps those two paths apart. It explains what AJAX changes on submit, what free LeadSource 1.0.8 still stamps on a native form, and what LeadSource does not do for Google Ads tags or Smart Bidding.
Ads says zero. Your inbox says twenty
Ads counts a conversion when its tag or import path records an event. Your form plugin counts a lead when someone submits a name and email. Those are two different systems.
AJAX makes the mismatch loud. The visitor stays on the same URL. A success message appears in place. No full navigation to /thank-you/. If your Google Ads conversion was built as a thank-you page load, that load never happens. Ads stays quiet. The lead still arrives in Contact Form 7, Gravity Forms, WPForms, or another hooked builder.
People then search for ajax wordpress form google ads conversion not firing and assume the form plugin lost the click. Often the form entry is fine. The thank-you page tag is what missed.
The other failure mode is a named row with no gclid. That is a capture and session problem, not an Ads tag problem. Keep those two jobs separate before you change tags, GTM, or plugins.
What AJAX changes on submit (no thank-you page load)
A classic form POST reloads the browser into a new document. Many Ads setups hang a conversion on that destination URL. The page view is the signal.
AJAX submit sends the fields in the background. WordPress still processes the entry through the form plugin. The visitor’s address bar often stays put. Scripts that wait for a thank-you page view do not run. Google Tag Manager containers that only fire on that path stay idle.
That does not mean the form failed. It means the browser never opened the document your conversion relied on. Gravity Forms threads and other AJAX conversion threads keep hitting the same pattern. The lead is in the database. The Ads pixel path never saw a matching page view.
If you push a custom dataLayer event on AJAX success, GTM can still see it. If you only listen for a thank-you page, AJAX will keep missing it.
What free LeadSource 1.0.8 still stamps on a native AJAX form
The free LeadSource plugin hooks the form plugin on the WordPress side. Native hooks in 1.0.8 are Contact Form 7, WPForms, Gravity Forms, Ninja Forms, Formidable Forms, Fluent Forms, Elementor Pro Forms, Everest Forms, and Forminator. You do not add shortcodes or maintain hidden UTM fields for those builders.
Capture runs in the visitor’s browser on your pages. A small vanilla script reads the URL on load and stores traffic source data in a first-party session cookie. On a successful native submit, the form hook attaches that session data to a LeadSource row. AJAX or full page reload does not change that path when the native hook still runs. The stamp is on the named entry, not on a Google Ads tag.
What it stores when the tags are present includes utm_source, utm_medium, utm_campaign, utm_term, utm_content, and the click IDs named in today’s readme (gclid, fbclid, msclkid, li_fat_id, ttclid). The listing does not name gbraid or wbraid. Landing page is the first page of the session. Attribution is same session only. The cookie ends when the browser closes. It is not first-plus-last touch and not a 90 day window.
If the visitor still has the tagged session open and submits a hooked AJAX form, free LeadSource can keep gclid on that named row even when no thank-you page loads. That helps campaign-level named leads in WordPress. It is not the same as telling Ads the conversion fired.
More on storing gclid is in GCLID Tracking in WordPress. Mapping those values onto a CRM contact after a native fill is in How Do I Get WordPress Form UTM and GCLID Data onto a CRM Contact. The native overview is in How to Track Lead Sources in WordPress Forms.
Cross-origin iframe embeds are a different wall. LeadSource does not claim to stamp those SaaS submits. That case is covered in Why Embedded Forms and iFrames Lose UTM and Click IDs.
What LeadSource does not do (no Ads tag, no Smart Bidding feed)
LeadSource does not fire the Google Ads conversion tag. It does not replace Google Tag Manager. It does not push a dataLayer conversion for you. Installing it alone does not repair Smart Bidding when Ads never sees a conversion event.
Free LeadSource stores gclid on the named row when the tagged visit is still the open session. It does not upload offline conversions into Google Ads. There is no offline upload button in free or Pro. Feeding stored click IDs back into Ads is a separate import or API job you run outside this plugin.
Do not expect LeadSource to fix a thank-you page tag that never loads. Do not expect it to invent wbraid or gbraid. Do not treat a stamped WordPress row as proof that Ads recorded a conversion.
LeadSource Pro adds lead journeys, per-source email routing, scheduled reports, and white label. Reach for Pro when journey depth or routing is the job. Pro is not required for a basic named-row stamp, and it still does not fire Ads tags.
Four common fixes (redirect, GTM visibility, dataLayer event, offline upload later)
When the job is “make Ads see the conversion,” people usually pick one of four paths. These are Ads and tag options. They are not LeadSource features.
- Redirect after submit. Send the visitor to a real thank-you URL and keep the page-load conversion on that URL. Many form plugins can redirect even when the fill used AJAX. Test that the destination actually loads after success.
- GTM visibility or DOM trigger. Fire when the success message becomes visible on the same page. This fits AJAX flows that never leave the form URL. Confirm the trigger only fires once per real submit.
- dataLayer event on AJAX success. Push a custom event from the form’s success callback and let GTM listen for that event. This is the pattern many Gravity Forms AJAX threads end up on. Keep the event name stable and test in GTM preview.
- Offline upload later. Export or sync named leads that already hold gclid and import conversions into Google Ads on a schedule. That path is outside free LeadSource. There is no plugin button that does the upload for you.
Pick the fix that matches how your form finishes. Do not stack all four. Keep LeadSource for which campaign produced the person, and still use one of the four when Ads must count the event.
How this differs from the conversions-mismatch post
Why Google Ads Conversions Don’t Match WordPress Form Leads is about the two numbers. Ads conversions versus named form leads, and why those counts will not line up even on a healthy site.
This post is narrower. It starts from an AJAX submit that skips the thank-you page, so the Ads tag path goes quiet while the inbox still fills. The conversions-mismatch article explains the broader bookkeeping gap. This one focuses on the AJAX thank-you miss and on what still gets stamped on the WordPress row.
Read the mismatch post when you need the full reconciliation. Stay here when the symptom is ajax wordpress form google ads conversion not firing after an in-place success message.
Short checklist
- Confirm the form uses AJAX and whether a thank-you page actually loads after submit.
- If Ads was counting a thank-you page view, move to a redirect, a visibility trigger, or a dataLayer success event.
- If the named WordPress row is blank for source, install LeadSource, confirm the form is in the 1.0.8 native list, and test a tagged visit that stays in one browser session.
- Expect gclid on the LeadSource row when the session is still open. Do not expect LeadSource to fire the Ads tag.
- Do not claim a 90 day cookie, first-plus-last touch, gbraid, or wbraid to explain a quiet Ads column.
- Keep offline Ads import as a later, separate job. There is no LeadSource upload button for it.
- Soft-check Pro only if you need journeys or per-source routing, not for the basic stamp.
Ads at zero with an inbox full of AJAX leads usually means the thank-you tag never saw a page. Fix the Ads event path for counting. Keep free LeadSource on the native form when you still need the named row to show which Google Ads click produced that person.

Leave a Reply