AJAX forms don't trigger form submission tags
Contact Form 7, WPForms, Gravity Forms and Elementor forms often submit in the background and show a message on the same page. GTM's generic form trigger then fires on failed attempts or not at all.
This is for service businesses with a WordPress site, where a lead is a form fill, a phone call, a WhatsApp message or a booked appointment. Most WordPress forms submit without leaving the page, so standard form triggers and thank-you page rules often miss leads or count spam and failed submissions. I track each lead action properly and send it to GA4, Google Ads and Meta with the data needed for enhanced conversions.
Proper WordPress lead tracking means listening for your form plugin's own success event (or a thank-you page that can't be reached directly), tracking call, WhatsApp and booking actions separately, loading tags through one Google Tag Manager container, and sending hashed email or phone with Google Ads conversions so enhanced conversions for leads work.
The events I set up on WordPress, and where each one is sent.
Contact Form 7, WPForms, Gravity Forms and Elementor forms often submit in the background and show a message on the same page. GTM's generic form trigger then fires on failed attempts or not at all.
Redirecting to a thank-you page works until it's bookmarked, refreshed, indexed by Google or linked in a menu. Each visit counts as a lead, so conversion numbers creep up with no real enquiries behind them.
For many local businesses most leads come by phone or WhatsApp. Floating chat buttons from plugins and tel: links in headers are often not tracked, or are tracked as one lumped 'click' event.
Calendly and similar schedulers load inside an iframe, so GTM on your page can't see the booking unless it listens for the messages the embed sends back.
Site Kit, a header-scripts plugin, the theme and a page builder can each add Google tags. That leads to double-counted page views and conversions and makes debugging slow.
| Event | When it fires | Sent to |
|---|---|---|
generate_lead / Lead | Form plugin reports a successful submission | GA4, Google Ads, Meta Pixel + CAPI |
phone_click | Visitor taps a tel: link | GA4, Google Ads (secondary or primary) |
whatsapp_click | WhatsApp button or wa.me link clicked | GA4, Google Ads, Meta |
booking_complete / Schedule | Calendly embed confirms a scheduled meeting | GA4, Google Ads, Meta |
email_click | mailto: link clicked | GA4 |
form_start | Visitor first interacts with a lead form | GA4 |
qualified_lead (offline) | Lead marked qualified or won in your CRM | Google Ads offline conversions |
I map every way a visitor can contact you, find which form and chat plugins you use, and check which tags are already on the site and what they count.
We agree which actions count as primary conversions for bidding and which are secondary signals, so Google Ads optimises for enquiries you actually want.
I set up GTM listeners for your form plugin, calls, WhatsApp and bookings, then wire up GA4, Google Ads with enhanced conversions, and Meta.
I submit each form, including failed and spam-like attempts, tap call and WhatsApp buttons on mobile, and book a test meeting to confirm each counts once.
If you want bidding based on lead quality, I set up GCLID capture and an offline conversion import from your CRM.
Every popular form plugin announces a successful submission in its own way. Contact Form 7 fires a browser event when the message is sent, Gravity Forms and WPForms have their own confirmation hooks for AJAX forms, and Elementor forms trigger a success event in the page. Listening for those means a lead is counted only when the plugin itself says the submission worked.
If you prefer a thank-you page, that's fine, but it needs protecting: a noindex tag, no menu links, and ideally a check that the visitor actually came from the form. Otherwise the page view count, not the lead count, drives your conversions.
Tracking a tap on a phone number tells you someone tried to call, not that they spoke to you. If calls matter, Google Ads call conversions from website use a forwarding number and can count only calls above a minimum length. For WhatsApp, a click is usually the best signal available, so I track it separately from forms and keep it out of primary bidding unless you're happy with that.
For Calendly embeds, the embed sends a message to the parent page when a meeting is scheduled. GTM listens for that and fires a booking conversion only when the booking is confirmed, not when the calendar is opened.
When someone submits a form, GTM can read the email or phone they entered and send it, hashed, with the Google Ads conversion. That helps Google match the lead to an ad click when cookies are missing. It also prepares the ground for importing later outcomes, like qualified leads or closed deals, so your campaigns optimise for real customers rather than any form fill.
An event-driven GA4 and GTM measurement system for a multi-country digital agency, tracking every lead action and syncing conversions to Google Ads and Looker Studio.
Read case studyEnd-to-end GA4, GTM and Google Ads tracking for a premium Bengaluru restaurant, measuring calls, reservation intent and menu views as real conversions.
Read case studyListen for Contact Form 7's success event in Google Tag Manager rather than using a generic form trigger or click trigger. That event fires only after the message is sent, so failed validation and errors aren't counted. Then send a generate_lead event to GA4 with the form name as a parameter.
Either works if done properly. Tracking the plugin's success event avoids inflated counts from people revisiting the page. A thank-you page is easier to use as a goal in some tools but should be noindexed and not linked anywhere else.
Yes. Clicks on tel: and WhatsApp links can be sent as conversions through GTM. Because a click isn't a confirmed conversation, I often set them as secondary actions, and use Google's call conversions from website when real call tracking is needed.
Calendly's embed sends messages to your page when a visitor books. A GTM listener catches the scheduled-meeting message and fires a conversion. This works for inline and popup embeds; a link that opens Calendly in a new tab needs Calendly's own redirect or integration options instead.
No, but a lightweight plugin or a theme setting is the easiest way to add the GTM snippet. The important part is having one container and removing other plugins that add Google tags separately, such as duplicate Site Kit or header-script tags.
It's a Google Ads feature that sends hashed email or phone with your lead conversions. It improves matching to ad clicks and lets you upload later outcomes from your CRM, such as qualified leads, using the same customer data.

Step-by-step GTM setups for tracking WhatsApp clicks, phone taps and form submissions in GA4, with event names, triggers and a testing checklist.

How enhanced conversions use hashed email and phone data to recover conversions Google Ads would otherwise miss, with setup steps for GTM and leads.
How to capture GCLID, store it in your CRM and send qualified leads and closed sales back to Google Ads so Smart Bidding optimises for real revenue.
Get a free audit of your tracking and ad account. Usually replies within 1–2 hours.