Short answer: GA4 lead generation tracking works best with one recommended event, generate_lead, fired only after a lead is confirmed (form success, not button click), carrying non-personal parameters such as lead_source, form_name, value and currency. Track call taps and WhatsApp taps as separate events, mark generate_lead as a key event, and send later CRM stages (qualify_lead, close_convert_lead) through the Measurement Protocol. Test everything in DebugView before importing anything into Google Ads.
Need this done for you? GrowthSparx offers a fixed-scope lead tracking and attribution setup: GA4, Google Ads, Meta, WhatsApp, calls and CRM wired into one dashboard, usually live in 2–3 weeks.
Benchmark reference: the public 2025–2026 numbers behind this guide (Meta and Google CPC/CPM in India, CPL ranges by industry, landing-page conversion, real estate funnel rates, WhatsApp API pricing) are collected and graded in our India lead generation benchmarks 2026 report.
What lead events should GA4 track?
Write the event plan before opening Tag Manager. Google publishes a set of recommended lead events (Google Analytics Help): generate_lead ("submits a form online or submits information offline"), working_lead (contacted by a representative), qualify_lead (fits the criteria to become qualified), disqualify_lead, close_convert_lead (became a customer) and close_unconvert_lead. Use these names rather than inventing your own; they come with defined parameters and keep reports consistent across properties.
The plan we start most Indian lead-gen sites with:
| Event | Fires when | Key parameters | Key event? | Sent from |
|---|---|---|---|---|
form_start (enhanced measurement) | First interaction with a form in a session | form_id, form_name | No | Automatic |
generate_lead | Form submission confirmed by the server | lead_source, form_name, value, currency | Yes (primary) | GTM / data layer |
click_to_call | Tap on a tel: link | cta_location | Yes (secondary) | GTM |
whatsapp_click | Tap on a wa.me link | wa_location, wa_ref | Yes (secondary) | GTM |
book_appointment | Calendar/booking confirmed | booking_type | Yes | Booking tool callback |
qualify_lead | CRM stage = Qualified | value, currency, lead_source | Yes | Measurement Protocol |
close_convert_lead | CRM stage = Won | value, currency | Yes | Measurement Protocol |
disqualify_lead | CRM stage = Rejected | disqualified_lead_reason | No | Measurement Protocol |
Two rules behind this plan. First, separate intent (a tap) from a lead (contact details received) from an outcome (sales accepted it). Merging them into one "conversion" is why many GA4 properties report far more leads than the CRM receives. Second, nothing personal goes into GA4: Google's policy forbids passing data it could recognise as personally identifiable, including "email addresses, personal mobile numbers" (PII guidance).
How do you set up generate_lead correctly?
Fire on confirmed success, not on the submit click. A submit-button click fires even when validation fails, the phone number is nine digits, or the server times out. The most reliable trigger is a data layer push your developer adds to the form's success handler:
window.dataLayer = window.dataLayer || [];dataLayer.push({event: 'generate_lead',lead_source: 'website_form',form_name: 'site_visit_request',project: 'sector-150-3bhk',value: 1500,currency: 'INR'});
If you cannot edit the site code (a page builder or WordPress plugin), the fallbacks in order of reliability are: a thank-you page URL, a success-message element visibility trigger, then GTM's Form Submission trigger with Check Validation on. Our form tracking guide for GA4 and GTM walks through each trigger type.
Parameters. Google's event reference lists currency, value and lead_source for generate_lead; currency is required whenever value is set, in three-letter ISO format (INR). Add your own parameters only if you will report on them, and register each as an event-scoped custom dimension in Admin, or it will not appear in standard reports.
Value. A lead value lets GA4 and Google Ads compare channels by value, not count. Worked example (illustrative): if 10% of form leads become qualified, and a qualified lead is worth ₹15,000 to you, a form lead is worth 0.10 × ₹15,000 = ₹1,500. That is the 1500 in the code above. Recalculate quarterly from your CRM.
How do you configure it in Google Tag Manager?
- Variables: create Data Layer Variables for
lead_source,form_name,valueandcurrency. - Trigger: Custom Event, event name
generate_lead. - Tag: Google Analytics: GA4 Event, your measurement ID (or the Google tag), event name
generate_lead, event parameters mapped to the variables above. - Consent: if you run a consent banner, confirm the tag respects analytics consent settings.
- Preview: submit a real test lead in Tag Assistant; check one
generate_leadwith all parameters. - Publish with a version name such as "GA4 lead events v1 – generate_lead, call, WhatsApp".
Do not also create generate_lead from the GA4 interface with "Create event" based on form_submit. Two sources of the same event is the commonest cause of doubled lead counts; see fixing duplicate conversions in GA4 and Google Ads.
How do you track call and WhatsApp leads in GA4?
Calls. Create a Click – Just Links trigger where Click URL starts with tel:, and a GA4 Event tag click_to_call with a cta_location parameter from a data attribute on each button. This counts taps, not connected calls. For answered calls, call duration and the caller's source, you need a call-tracking number service; see call tracking for Indian businesses.
WhatsApp. Same pattern, with Click URL matching wa.me or api.whatsapp.com, event whatsapp_click. Enhanced measurement already logs these as an outbound click with link_url and outbound parameters (enhanced measurement events), but a dedicated event is easier to report and mark as a key event. Connecting the tap to the chat and the CRM lead is a separate problem, solved with a reference code in the prefilled message; the full method is in WhatsApp lead tracking with GA4 and CRM.
Keep taps as secondary key events. Some taps never become a conversation (the dialler or app opens and the visitor changes their mind), so counting them as leads overstates performance; measure your own tap-to-conversation rate before deciding how to weight them.
How do you mark key events and set values?
- In Admin → Data display → Events, find
generate_leadand click the star to mark it as a key event (Editor access needed). Do the same forqualify_leadandclose_convert_leadonce they start arriving. - Standard properties can mark up to 30 key events, Analytics 360 up to 50 (Google Analytics Help). You will not need many; five to seven is typical for lead gen.
- For an event that does not carry a value, you can set a default key event value when creating it.
- In Admin → Attribution settings, keep the key-event lookback at 90 days (the default; 30 and 60 are options) if your buyers take weeks to decide (attribution settings).
- To bid on GA4 data, create Google Ads conversions from the key events. Google notes that Google Ads conversions do not appear in standard GA4 reports. For lead gen, we prefer importing CRM outcomes directly into Google Ads with enhanced conversions for leads and using GA4 for cross-channel reporting, so the same lead is not counted twice in Google Ads.
How do you send CRM lead stages into GA4?
GA4 cannot see what happens after the form. The Measurement Protocol lets your server send those events, and Google describes its purpose as to "augment automatic collection", not replace it (Measurement Protocol guide).
- Capture the client ID at submission: read the
_gacookie (the part afterGA1.1., e.g.1234567890.1728000000) into a hidden field and store it on the CRM lead. - Create an API secret in Admin → Data streams → your stream → Measurement Protocol API secrets. Keep it on the server.
- On each stage change, POST to
https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXX&api_secret=XXXX:
{"client_id": "1234567890.1728000000","events": [{"name": "close_convert_lead","params": {"currency": "INR", "value": 120000}}]}
Google allows backdating events by up to 72 hours; older timestamps are moved to 72 hours ago. So run the sync at least daily, and send each stage once (keep a "sent to GA4" flag on the lead). The lead now has generate_lead from the browser and qualify_lead from the CRM under the same client ID, which is what makes channel-level qualified rates possible in GA4.
Which GA4 reports show lead performance?
| Question | Where in GA4 | Setup |
|---|---|---|
| Which channels bring leads? | Traffic acquisition, key event = generate_lead | Filter the Key events column to generate_lead |
| Which channels bring qualified leads? | Same report, key event = qualify_lead | Needs Measurement Protocol stages |
| Which forms convert? | Exploration: form_name × generate_lead | form_name registered as custom dimension |
| Where do people abandon? | Funnel exploration: form_start → generate_lead | None beyond enhanced measurement |
| First touch of leads | User acquisition: First user source / medium | See first-touch vs last-touch attribution |
Compare GA4's generate_lead count with the CRM's new-lead count weekly. A gap of a few per cent is normal (consent refusals, ad blockers); a gap of 30% means a tracking fault.
GA4 lead tracking QA checklist
| Check | Pass |
|---|---|
| Submit each form with valid data | One generate_lead per submission in DebugView, all parameters present |
| Submit with an invalid phone number | No generate_lead |
| Refresh the thank-you page | No second generate_lead |
| Tap call and WhatsApp buttons on a phone | One click_to_call / whatsapp_click each, correct location |
| Inspect event parameters and page URLs | No names, emails or phone numbers anywhere |
| Move a test lead to Qualified in the CRM | qualify_lead appears against the same client ID within a day |
| Weekly GA4 vs CRM lead count | Within a few per cent; investigate larger gaps |
For DebugView, use Tag Assistant or GTM preview, or set debug_mode on the tag. Google notes events will not appear if consent mode is active and analytics consent was not given, so accept cookies on your test device (DebugView help). For a wider audit covering Google Ads, Meta and the CRM, use our lead tracking audit checklist.
Sources
- Google Analytics Help: Recommended events: lead generation event names and when to trigger them.
- Google Analytics developer reference: Recommended events: generate_lead parameters; currency required with value.
- Google Analytics Help: Mark events as key events: steps, 30/50 limit, Google Ads conversions.
- Google Analytics Help: Enhanced measurement events: form_start, form_submit, outbound click.
- Google Analytics Help: Avoid sending PII: no emails or mobile numbers.
- Google Analytics Help: DebugView: enabling debug mode; consent caveat.
- Google Analytics: Measurement Protocol, send events: endpoint, API secret, client_id, 72-hour limit.
- Google Analytics Help: Attribution settings: key event lookback windows.