GA4 Lead Generation Tracking Setup: Practical Guide visual workflow

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.

On this pageThe lead event planSetting up generate_leadGTM configurationCall and WhatsApp eventsKey events and valuesCRM stages in GA4Reports to buildQA checklistSources

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:

EventFires whenKey parametersKey event?Sent from
form_start (enhanced measurement)First interaction with a form in a sessionform_id, form_nameNoAutomatic
generate_leadForm submission confirmed by the serverlead_source, form_name, value, currencyYes (primary)GTM / data layer
click_to_callTap on a tel: linkcta_locationYes (secondary)GTM
whatsapp_clickTap on a wa.me linkwa_location, wa_refYes (secondary)GTM
book_appointmentCalendar/booking confirmedbooking_typeYesBooking tool callback
qualify_leadCRM stage = Qualifiedvalue, currency, lead_sourceYesMeasurement Protocol
close_convert_leadCRM stage = Wonvalue, currencyYesMeasurement Protocol
disqualify_leadCRM stage = Rejecteddisqualified_lead_reasonNoMeasurement 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?

  1. Variables: create Data Layer Variables for lead_source, form_name, value and currency.
  2. Trigger: Custom Event, event name generate_lead.
  3. Tag: Google Analytics: GA4 Event, your measurement ID (or the Google tag), event name generate_lead, event parameters mapped to the variables above.
  4. Consent: if you run a consent banner, confirm the tag respects analytics consent settings.
  5. Preview: submit a real test lead in Tag Assistant; check one generate_lead with all parameters.
  6. 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?

  1. In Admin → Data display → Events, find generate_lead and click the star to mark it as a key event (Editor access needed). Do the same for qualify_lead and close_convert_lead once they start arriving.
  2. 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.
  3. For an event that does not carry a value, you can set a default key event value when creating it.
  4. 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).
  5. 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).

  1. Capture the client ID at submission: read the _ga cookie (the part after GA1.1., e.g. 1234567890.1728000000) into a hidden field and store it on the CRM lead.
  2. Create an API secret in Admin → Data streams → your stream → Measurement Protocol API secrets. Keep it on the server.
  3. 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?

QuestionWhere in GA4Setup
Which channels bring leads?Traffic acquisition, key event = generate_leadFilter the Key events column to generate_lead
Which channels bring qualified leads?Same report, key event = qualify_leadNeeds Measurement Protocol stages
Which forms convert?Exploration: form_name × generate_leadform_name registered as custom dimension
Where do people abandon?Funnel exploration: form_start → generate_leadNone beyond enhanced measurement
First touch of leadsUser acquisition: First user source / mediumSee 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

CheckPass
Submit each form with valid dataOne generate_lead per submission in DebugView, all parameters present
Submit with an invalid phone numberNo generate_lead
Refresh the thank-you pageNo second generate_lead
Tap call and WhatsApp buttons on a phoneOne click_to_call / whatsapp_click each, correct location
Inspect event parameters and page URLsNo names, emails or phone numbers anywhere
Move a test lead to Qualified in the CRMqualify_lead appears against the same client ID within a day
Weekly GA4 vs CRM lead countWithin 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

FAQ

Common questions

How do I track leads in GA4?

Send a generate_lead event when a lead is confirmed, for example after a form's success response, with parameters such as lead_source, form name, value and currency. Track call and WhatsApp taps as separate events. Mark generate_lead as a key event in Admin, register custom parameters as custom dimensions, test in DebugView, and send later CRM stages with the Measurement Protocol.

What is generate_lead in GA4?

generate_lead is one of GA4's recommended events. Google describes it as the event to log when a user submits a form online or submits information offline. Using the recommended name, rather than a custom one like form_success, keeps your data consistent with Google's lead reports and parameters, including value and currency, which are needed if you want lead value in reports.

What is the difference between a key event and a conversion in GA4?

In GA4, a key event is an event you mark as important for your business, such as generate_lead. Conversions are what Google Ads uses for bidding and reporting; you can create Google Ads conversions from GA4 key events. Google notes that Google Ads conversions do not appear in standard GA4 reports. Standard properties can mark up to 30 key events.

Should form_submit be a key event for lead generation?

Usually not. Enhanced measurement's form_submit fires when a form is submitted, including failed validation on some sites, newsletter boxes and search forms. Use it for diagnostics. Mark a deliberate generate_lead, fired only after a successful submission, as the key event, so your lead count matches the leads your CRM actually receives.

Can GA4 track qualified leads from my CRM?

Yes, using the Measurement Protocol. Store the GA4 client ID with each lead, and when sales marks the lead qualified or won, your server sends qualify_lead or close_convert_lead to GA4 with that client ID. Events can be backdated only up to 72 hours, so send stage changes daily. Never include names, emails or phone numbers in the payload.

Need a practical growth system?

Book a review of your current acquisition, content and conversion workflow.

Book a Strategy Call
RS
Founder & Performance Marketing Lead, GrowthSparx

Rinku works across SEO, lead generation, paid acquisition and conversion systems for Indian and global businesses. This article uses practical operating frameworks, identifies limitations and links changing platform facts to primary sources.

Have a question? Message us directly on WhatsApp—usually a reply within a few hours.

Chat on WhatsApp