Measurement13 min readJun 2026

How to Create GTM Tags for Lead Tracking

A practical guide to tracking successful form submissions, email link clicks, and book a call buttons in Google Tag Manager and GA4.

Plan the Lead Events Before Building Tags

Start by deciding which user actions count as lead activity. In this setup, the three lead actions are email link clicks, Book a Call clicks, and form submissions.

The flow should be built in this order: create or confirm the Google tag in Google Tag Manager, build the GTM event tags and triggers, then register the useful parameters in Google Analytics so they can be used in reports.

  • generate_lead is the shared GA4 event name for contact-intent actions.
  • lead_type explains whether the action was an email link click, Book a Call click, or form submission.
  • page_url, lead_type, click_url, and form_id explain where and how the lead action happened.
  • has_contacted marks users who completed any contact-intent action.
Lead ActionGA4 Event NameGTM TriggerKey Parameters
Email Link Clickgenerate_leadJust Links where Click URL contains mailto:page_url, lead_type, click_url
Book a Callgenerate_leadJust Links where Click URL contains intro-callpage_url, lead_type, click_url
Form Submissiongenerate_leadForm Submission triggerpage_url, lead_type, form_id

What Are GA4 Event Tags and Triggers?

In Google Tag Manager, a tag is the instruction that sends data somewhere. For this lead tracking setup, the most important tag type is Google Analytics: GA4 Event. A GA4 Event tag tells GTM what event name to send to GA4, which event parameters to include, and whether any user properties should be set.

A trigger is the rule that decides when the tag should fire. The tag answers what should be sent, while the trigger answers when it should be sent. For example, the Email Link Click tag sends the generate_lead event with lead_type set to email_link_click, but the Just Links trigger makes sure it only fires when the clicked URL contains mailto:.

  • Choose Google Analytics as the tag type when you want to send a GA4 event.
  • Use a GA4 Event tag named generate_lead for lead actions, then use lead_type to describe the action.
  • Use triggers such as Just Links or Form Submission to control the exact interaction that fires the tag.
  • Keep the tag and trigger names descriptive so Tag Assistant is easier to debug later.
The tag type screen is where you choose what GTM should send. For lead tracking in GA4, choose Google Analytics and create a GA4 Event tag.
The trigger type screen is where you choose when the tag should fire. For email and Book a Call clicks, Just Links is useful because those actions happen through links.

Tag Manager: Add the Google Tag First

Inside Google Tag Manager, the Google tag is the foundation. It connects the GTM container to the GA4 property so that the lead events created later are sent to the right place.

The Measurement ID is the GA4 identifier that tells GTM which web data stream should receive the data. It usually starts with G-, such as G-ABC123XYZ. You can find it in Google Analytics by going to Admin, then Data Streams, selecting the website stream, and copying the Measurement ID.

Once the Google tag is saved with the Measurement ID, each GA4 Event tag can reuse that configuration. This keeps the measurement setup cleaner than creating disconnected tracking for every lead action.

  • Use the Measurement ID from the GA4 web data stream you want to report into.
  • The Measurement ID is different from the GTM container ID, which usually starts with GTM-.
  • In this setup, the Google tag uses the Measurement ID first, then the GA4 Event tags send lead events through that same configuration.
After the GA4 Measurement ID is added to the Google Tag, GTM can send page and event data into the connected GA4 property.

What Are Event Parameters?

Event parameters are extra details sent with a GA4 event. The event name tells GA4 what happened, while the parameters explain the context around that action.

For lead tracking, the event name on its own is not enough. If GA4 only receives generate_lead, the report can count lead activity but cannot easily explain which page, link, form, or CTA created it. That is why lead_type, page_url, click_url, and form_id are sent with the event.

  • page_url tells you where the lead action happened.
  • lead_type keeps email clicks, booking clicks, and form submissions grouped consistently.
  • click_url shows the destination clicked for email and booking actions.
  • form_id identifies which form was submitted.
  • These parameters become especially useful once they are registered as GA4 custom dimensions and used in Looker Studio tables or filters.

Why Use Event Parameters Instead of Creating Events for Every Form, Link, or Button?

My preference is to keep the event structure simple and use parameters to carry the detail. In agency environments, I have seen setups where every form, button, or link gets its own event name. It can work at first, but it usually creates more maintenance than value.

For example, a site could create separate events for contact_form_submit, footer_form_submit, pricing_form_submit, email_header_click, email_footer_click, and book_intro_call_click. The problem is that reporting then becomes messy. Every new button or form creates another naming decision, another trigger, another custom dimension conversation, and another QA task.

A cleaner approach is to use generate_lead as the shared lead event, then use parameters like page_url, form_id, click_url, and lead_type to explain the context. The event tells GA4 that a lead action happened. The parameters explain where it happened and which element was involved.

  • It reduces unnecessary GTM maintenance when pages, forms, buttons, or links change.
  • It keeps GA4 reports easier to group because the main lead actions stay consistent.
  • It makes Looker Studio dashboards cleaner because filters can use lead_type, form_id, page_url, or click_url instead of dozens of event names.
  • It improves QA because you test whether the right parameters are being passed rather than chasing many near-duplicate events.
  • It scales better when a site adds new forms, landing pages, CTAs, or booking links.
Comparison AreaSeparate Event Per ElementReusable Events With Parameters (Recommended)
Event StructureCreates many narrow events such as footer_form_submit, pricing_form_submit, email_header_click, and email_footer_click.Uses generate_lead as the shared lead event, then uses parameters for the detail.
GTM MaintenanceEvery new form, button, or link can require another tag, trigger, naming decision, and QA check.New pages or CTAs can often reuse the same tag pattern because page_url, form_id, click_url, and lead_type carry the context.
GA4 ReportingReports become fragmented because similar actions are split across many event names.Reports stay cleaner because the main lead actions are consistent and can be filtered or broken down by parameters.
Looker StudioDashboards need extra blending, filters, or calculated fields to group near-duplicate events back together.Dashboards can use lead_type, form_id, page_url, and click_url directly for tables, filters, and scorecards.

The key takeaway is that reusable events with parameters scale better. The tracking structure stays simple, while the parameters preserve the detail needed for GA4 analysis, Looker Studio dashboards, and future QA.

What Are User Properties?

User properties describe the user rather than only the single event. In this setup, has_contacted is used to mark a visitor who has taken a contact-intent action.

That means email clicks, Book a Call clicks, and form submissions can all set has_contacted to TRUE. The individual event still explains the exact action, while the user property helps create a broader contacted-user segment.

  • Use event parameters when the value belongs to the action, such as the clicked URL or submitted form ID.
  • Use user properties when the value should describe the user after the action, such as whether they have contacted you.
  • In Looker Studio, has_contacted can help separate users who only browsed from users who showed lead intent.

Tag Manager: Book a Call

Book a Call clicks should be tracked separately because they usually show stronger commercial intent than a general email click. A visitor is moving towards a scheduled conversation, so the event deserves its own lead type.

In GTM, create a GA4 Event tag that sends the event name generate_lead. Add page_url, lead_type, and click_url as event parameters, then set has_contacted to TRUE as a user property.

  • page_url shows which page or CTA placement generated the booking click.
  • lead_type is set to book_a_call so booking intent can be reported separately.
  • click_url records the booking destination, which helps if multiple booking links are used.
  • has_contacted = TRUE keeps booking-click users in the broader contacted-user audience.
The GA4 Book a Call tag sends generate_lead with lead_type set to book_a_call, alongside page_url, click_url, and has_contacted.
The Book a Call trigger uses Click URL contains intro-call so the event only fires for the intro-call or calendar link.

Tag Manager: Form Submission

Form submission is the strongest lead action in this setup because the visitor has completed the enquiry form. It should be reported separately from click-based intent.

In GTM, create a GA4 Event tag that sends the event name generate_lead. Add page_url, lead_type, and form_id as event parameters, then set has_contacted to TRUE as a user property.

  • page_url shows which page produced the submitted enquiry.
  • lead_type is set to form_submission so confirmed form leads are easy to isolate.
  • form_id captures the submitted form ID, such as form-submission.
  • has_contacted = TRUE marks the user as someone who completed a meaningful contact action.
The GA4 Form Submission tag sends generate_lead with lead_type set to form_submission, alongside page_url, form_id, and has_contacted.
The Form Submission trigger is attached to the GA4 Form Submission tag so GTM can fire the event when the form submit action is detected.

Tag Assistant: Confirm the Values Are Firing

After the GTM tags and triggers are created, use Tag Assistant preview mode to confirm that each event is sending the expected values. This step is where you check whether the tag is doing what the report needs it to do.

In the tag details view, look for the event name, event settings table, and user properties. The event settings table should show the parameters you configured in GTM, and the user properties row should show has_contacted set to TRUE.

  • For form submissions, confirm generate_lead fires with page_url, lead_type, and form_id.
  • For email clicks and Book a Call clicks, confirm generate_lead fires with page_url, lead_type, and click_url.
  • Confirm the event name is generate_lead and the lead_type value matches the action you want to report in GA4 and Looker Studio.
  • Confirm has_contacted is set to TRUE so the user can be included in contacted-user reporting.
Tag Assistant confirms the Email Link Click tag is sending generate_lead with lead_type set to email_link_click, plus page_url, click_url, and has_contacted.
Tag Assistant confirms the Form Submission tag is sending generate_lead with lead_type set to form_submission, plus page_url, form_id, and has_contacted.

Google Analytics: Register the Parameters

After the GTM tags are configured, move into Google Analytics. GA4 can receive event parameters, but custom definitions make those values easier to use in reports and explorations.

Create event-scoped custom dimensions for generate_lead, page_url, lead_type, click_url, and form_id. Create the has_contacted custom definition as a user property so it can describe the user after they have taken a contact action.

  • Use event scope for generate_lead, page_url, lead_type, click_url, and form_id because those values describe the event that happened.
  • Use user scope for has_contacted because it describes the user after contact intent has been recorded.
  • Keep the names consistent between GTM and GA4 so Looker Studio fields are easy to understand later.
The custom definitions list shows generate_lead, the lead parameters, and the has_contacted user property registered in GA4.
Use event scope when creating a custom dimension for event parameters such as generate_lead, page_url, lead_type, click_url, and form_id.

Why This Matters for Looker Studio

The reason for adding event parameters and user properties is not just cleaner GA4 setup. The real value appears when the data reaches Looker Studio and stakeholders need to understand which pages and actions create leads.

With this structure, a dashboard can separate softer contact intent from stronger form submissions, compare lead actions by page, and show whether users are moving from visibility into actual enquiry behaviour.

  • Create scorecards for total email clicks, Book a Call clicks, and form submissions.
  • Build tables that show page_url by lead_type so you can see which pages generate each action.
  • Use click_url to audit which email or booking links are being used.
  • Use form_id to separate forms if the site adds more enquiry forms later.
  • Use has_contacted to segment users who have shown contact intent across any lead action.

FAQ

Should a form submit button click count as a lead?

No. A click does not prove that validation passed or the form reached the server. Fire generate_lead from a thank-you page, confirmed data layer event, or another reliable success signal.

Should email and Book a Call clicks use separate event names?

Not in this setup. Use generate_lead as the shared event name, then separate the actions with lead_type values such as email_link_click and book_a_call. This keeps GA4 cleaner while still preserving the reporting detail.

Can GTM confirm that somebody sent an email or booked a meeting?

A website click only confirms intent. To measure the completed outcome, use a confirmation page, a supported booking-platform event, or a CRM integration.

What information should not be sent to GA4?

Do not send personally identifiable information such as names, email addresses, phone numbers, or message contents. Use non-personal labels such as form_name or lead_type instead.

Let’s Connect

Want to Talk Search, Analytics, or Digital Products?

I’m interested in thoughtful conversations around technical SEO, analytics, GTM, GA4, organic growth, and product-led search systems.

Keep Reading

More Articles