GA4 Lead Form Tracking: Set Up, Test and Report Completed Enquiries
To track completed lead forms in GA4, send a generate_lead event after the receiving application confirms that it accepted the enquiry. Use that confirmed outcome to trigger one GA4 event, mark it as a key event, and test both successful and unsuccessful submissions before relying on the report.
This guide covers setting up and testing one confirmed lead event. If GA4 counts the same enquiry twice, see how to find and fix duplicate GA4 events, and for a wider review of every tag, trigger and variable, read how to audit a Google Tag Manager container.
The important choice happens before the tag settings: what proves the enquiry arrived? A click on “Send” is too early. The visitor might have missed a required field, the application might reject the request, or the connection might fail. Tracking the application’s success response gives the number a meaning the person answering enquiries can understand.
Here is a complete worked route for an ordinary business enquiry form. It uses Google Tag Manager, a small application-side message and GA4’s reporting tools. The company and submissions are hypothetical, and the expected account results below are instructions for your own test.
Follow one enquiry from the form to the report
Imagine a commercial equipment supplier with a “Request information” form. The visitor enters contact details, chooses a general product category and submits a message. The website stores the request in its intake system and returns a confirmed success response. Only then does the application announce that an enquiry was accepted.

For this example, use the following setup:
- Application message: enquiry_accepted
- GA4 event: generate_lead
- Form label: general_enquiry
- Collection method: web_form
- Success evidence: application_ack
The application message and GA4 event deliberately have different names. One tells Tag Manager that the website has reached a specific state. The other is the measurement sent to Analytics. Google’s recommended-event reference identifies generate_lead as an event for a generated lead, including a form submission.
After a verified acceptance, the application’s integration can push this message:
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'enquiry_accepted',
form_key: 'general_enquiry',
method: 'web_form',
confirmation_source: 'application_ack'
});Place that push inside the form’s documented success handler. The snippet does not submit a form, validate a response, manage consent or prevent repeated success callbacks. Those behaviours must already be handled by the application and the approved measurement configuration. The message contains fixed labels; none of the visitor’s entered details belongs in it.

In Tag Manager, an exact-match Custom Event trigger listens for enquiry_accepted. A Google Analytics: GA4 Event tag uses that trigger and sends generate_lead to the intended web stream, with the three labels as parameters. In GA4, mark generate_lead as a key event and inspect the result in DebugView. After processing, find its Event count in the Events report.
This is the expected trace for one successful test:
| Place to inspect | Expected observation |
|---|---|
| Receiving application | One accepted test enquiry exists |
| Tag Assistant event list | One enquiry_accepted message appears |
| Tag Assistant tag details | The intended generate_lead tag fires for that message |
| GA4 DebugView | One generate_lead event appears for the test device, with the expected labels |
| Processed Events report | The eligible test contributes one occurrence to generate_lead’s Event count, unless deliberately excluded by test-traffic controls |
We plan and run B2B marketing across search, ads, content and email for Canadian companies.
A local browser demonstration tested the application part of this route with fictional inputs. An empty required field sent no request. An explicit server rejection stored no enquiry and announced no success. An accepted request created one local record and one enquiry_accepted message. Repeating its callback and refreshing its confirmation added no message; a new enquiry created a second accepted record and a second message across the two page loads.
That demonstration used a small localhost application, with temporary server memory and tab-scoped sessionStorage for repeat handling. It establishes the tested form-to-data-layer behaviour only. No Google tag or GTM runtime was installed, and Tag Assistant, GA4 receipt and processed reporting remain the expected checks in the table above. The local code is an explanatory prototype, not a production-ready form or durable deduplication service.
Keep the numbers straight as you follow the example. Two accepted submissions can produce two event occurrences. GA4 may recognize them as coming from one user. Sales may merge them into one opportunity and later decide that it is qualified. Each number answers a different question.
Check what is already installed
Before creating anything, ask whoever manages the website how Analytics is currently added. Common routes include a CMS plugin, a site-builder integration, a hard-coded Google tag and Tag Manager. Several can coexist, but they should not all send the same lead event for the same action.
Look for an existing generate_lead event and determine its trigger. The event name alone cannot tell you whether it means a button click, a displayed confirmation or accepted intake. If an existing implementation already does the job correctly, improve its reporting and tests rather than building a parallel sender.
For the route in this guide, you need:
- A GA4 property and web data stream for the site
- The intended GTM web container installed on the form page
- An existing Google tag connected to that stream
- Permission to edit the relevant GTM workspace and arrange an approved release
- Appropriate GA4 access to manage the event and any reporting definitions
- Access to a safe form test and someone who can verify its receiving record
Google’s event setup instructions use a GA4 Event tag with a Measurement ID and a trigger. Confirm the stream before copying its ID. A plausible-looking G- identifier from an old project can send a perfectly formed event to the wrong destination.
Also decide where the test belongs. A staging website connected to a designated test property keeps experiments separate, but its form integration must resemble production closely enough to be useful. If testing on a live site is approved, use clearly recognizable synthetic details and tell the intake team how the test record will be handled. Do not create a real sales commitment merely to produce an analytics event.
A staging pass does not establish that production is identical. Consent settings, domains, installed plugins and release versions can differ. Plan a small production verification after the approved release, with the same success and failure expectations.
Find the form’s real success signal
Forms behave differently. Some submit the whole page and redirect. Others send a background request and replace the form with a confirmation message. An embedded form may run on a provider’s domain, beyond the parent page’s normal visibility.
Start with the form provider’s integration documentation or the site’s application code. Find the callback, event or response field that means the receiving system accepted the request. Ask the developer to show what happens when validation fails and when the receiving service is unavailable. A callback with “submit” in its name may describe an attempt rather than a completed submission.
For the equipment-supplier example, acceptance means the request has been stored in an intake queue the team can access. The acknowledgement arrives after that storage succeeds. A subsequent email notification is useful, but a failed notification does not erase the stored request. Conversely, an animation that appears immediately after a click does not prove storage succeeded.
Avoid treating an HTTP 200 response as sufficient by itself. Some applications use a successful HTTP response to return a body containing validation errors. The application integration should inspect its documented outcome. A timeout is also ambiguous: the server may have accepted the request before the browser lost the acknowledgement.
The practical question to give a developer is short: “Which application signal proves this enquiry was accepted, and can that signal repeat for the same request?” The answer determines where to place the push and whether the application needs a repeat guard.
If the form only has a thank-you page
A confirmation-page rule is a supported option when it reliably represents the intended outcome. Google documents creating an event from a page view, including a without-code route in Admin, Data display, Events, Create event. That method creates a measurement from the matching page view; it does not strengthen the underlying page’s meaning.
Try opening the thank-you URL directly in a clean test session. Then reload it and use the browser’s Back and Forward controls. If every visit counts as a fresh lead, the page rule measures visits to the confirmation page. It needs an additional reliable success condition before you can use it as a count of accepted enquiries.
A guarded, one-time confirmation state may make this route suitable. A public static page generally gives weaker evidence. If the form provider cannot expose anything stronger, label the limitation and decide whether approximate confirmation-page measurement serves the business. Do not hide that compromise behind a more confident event name.
If enhanced measurement already records form_submit
GA4’s enhanced measurement includes form_start and form_submit. These can help you examine form interaction. Their presence does not establish that the receiving application accepted the particular business enquiry you care about.
Compare those automatic events with a failed-input test and an actual accepted test. Inspect which forms they describe, too. A search box, newsletter form and sales enquiry have different purposes. A blanket rule that turns every form_submit into generate_lead can combine unrelated actions and failed attempts.
You can keep useful diagnostic form events alongside the confirmed success event. Choose generate_lead alone for the accepted-enquiry total rather than adding every stage together. If automatic collection includes unwanted information, fix or disable that specific collection path according to your site’s approved measurement plan.
Connect the acceptance message to Tag Manager
The application push supplies both the event name and the labels in one object. Google explains this pattern in its data-layer documentation: an event message can carry the values needed by tags that respond to it. Use the existing data layer; overwriting it after tags have loaded can lose queued information.
The following names are suggested workspace labels. You can adapt them to an established naming convention without changing the actual application event or GA4 event names.
1. Create the three data-layer variables
In the intended GTM workspace, create Data Layer Variables for form_key, method and confirmation_source. Give them recognizable names such as DLV form_key, DLV method and DLV confirmation_source. Enter the exact corresponding data-layer key for each variable.
These variables make the values available to the event tag. The word “method” in the JavaScript object and the Data Layer Variable Name must agree. A space, different case or misspelling can leave a tag parameter blank even while the tag itself fires.
Use Preview to inspect the variables at the enquiry_accepted event. The relevant moment matters: looking only at the final state after several actions can conceal a value that was missing or stale when the lead event occurred.
2. Create an exact-match Custom Event trigger
Go to Triggers, create a new trigger and choose Custom Event. Enter enquiry_accepted as the event name. Leave regular-expression matching off for this single-event example. Name the trigger CE enquiry accepted.
The “All Custom Events” option within this trigger refers to occurrences that match the configured event name. It does not require a wildcard matching every event in the container. Google’s Custom Event trigger guidance specifically warns that broad wildcard expressions can match system events as well.
If several forms use enquiry_accepted, add a condition for the intended form_key or deliberately handle all approved lead forms in one tag. Make that choice explicit. Otherwise a new form added later may enter an existing lead total without anyone reviewing its business meaning.
3. Create the GA4 Event tag
Create a new tag and choose Google Analytics: GA4 Event. Enter the intended web stream’s Measurement ID and set Event Name to generate_lead. Add these event parameter mappings:
| Event parameter | Value from GTM |
|---|---|
| form_key | DLV form_key |
| method | DLV method |
| confirmation_source | DLV confirmation_source |
For each Value field, use GTM’s variable picker to select the named variable. Do not type the displayed DLV label as a literal text value. The field should contain the selected variable reference, such as {{DLV form_key}}. Attach CE enquiry accepted as the trigger and save the tag with a clear name, such as GA4 accepted enquiry. Check that the existing Google tag for the destination is configured correctly; do not solve an uncertain setup by installing another copy everywhere.
The recommended name generate_lead does not make the event appear automatically. Your trigger still has to send it. Similarly, creating a name in GA4’s administration screens does not connect the form’s acceptance response to Tag Manager. Collection and key-event designation are separate steps.
4. Keep the event payload deliberate
All three values in this example are fixed categories. They identify the form and the measurement route. The application should not substitute a visitor’s email, message, phone number or receipt key into these fields.
Do not copy the entire submission object into the data layer for convenience. Other tags can also read a page’s data layer. A small reviewed object is easier to understand and less likely to expose information the measurement does not need.
There is no value or currency in this example because no monetary lead valuation has been established. If you later add an estimated value, explain how it was derived and distinguish it from sales revenue. Google’s recommended-event reference requires currency when value is supplied. An arbitrary amount attached to every form does not become realized revenue because a report displays a currency symbol.
Test the draft configuration before publishing
Open GTM Preview, enter the test page URL and connect the site to Tag Assistant. Keep the Tag Assistant window and form window available. Google’s preview instructions explain how the current workspace can be tested before publication.
Preview is still a working tag configuration: tags can send data when they fire. Use your designated test destination or the approved live-test arrangement. The fact that a container draft is unpublished does not mean every test is a network-free simulation.
Begin with the form empty. Attempt submission and inspect the timeline. An ordinary validation error should leave the generate_lead tag unfired. If it fires on the button click, stop and inspect the trigger before trying to interpret any later report.
Next, submit valid synthetic details once. Confirm that the receiving system accepted the record. In Tag Assistant, select enquiry_accepted and inspect its data-layer values, the resolved variables and the fired tag. You want the correct event, destination and values on the same action.
When the tag shows as fired, you have evidence about Tag Manager’s execution. Continue into Analytics to verify receipt. A browser extension, privacy control or transport problem can still prevent an event from appearing where expected. Keeping those checks separate helps you find the failed step rather than rebuilding a working trigger.
Test with the input methods people actually use. Pressing Enter from a field should reach the same accepted-submission logic as clicking the button. Repeat the core case on mobile if that form has a different layout, component or embedded provider there. Cosmetic similarity does not guarantee identical behaviour.
For each case, a short note is enough: action taken, receiving outcome, tag result and Analytics result. Include the time and test environment. Save sanitized evidence where the implementation team can retrieve it, without turning a screenshot of a form into a copy of someone’s contact details.
Mark generate_lead as a key event
In GA4, an event records an occurrence. A key event identifies an event important to the business. The designation helps reporting; it does not check whether your trigger is accurate. Google’s conversion definition also distinguishes conversions used with Google Ads from Analytics key events.
For an event Analytics has already received, open Admin, Data display, Events. Find generate_lead in Recent events or the event search and select the star beside it. Google also supports defining a new key event ahead of collection through Create event. Follow the route for an event implemented with code if you are using this guide’s GTM sender; avoid accidentally adding a second page-based event rule. See Google’s key-event setup instructions.
Confirm the exact spelling. generate_lead and Generate_Lead are different names. If you cannot see a control, check your property and permissions with its administrator. Current Google help pages describe different role requirements for different event-management paths, so a missing button is not proof that the event failed.
Choose the counting method deliberately. For the supplier’s count of accepted submission occurrences, once per event fits: two genuine accepted requests can count twice. Once per session answers a session-level question and can suppress meaningful repeats within a session. Google’s counting-method documentation describes both choices and their prospective effect.
Changing the count setting is a poor repair for a duplicated sender. If the same acceptance fires twice, fix that cause. Otherwise the inflated event data remains and other reports can still be affected.
Marking an event as key applies from the change onward; it does not rewrite earlier activity into historical key events. Record the start date beside the report so an apparent jump is not mistaken for improved demand. Leave default monetary value unset unless the business has approved a supported valuation.
Confirm receipt in DebugView
With the preview session active, open GA4 Admin, Data display, DebugView and select the relevant debug device. Submit another approved test and look for generate_lead. Open that event to inspect its parameters: form_key should be general_enquiry, method should be web_form, and confirmation_source should be application_ack.
Google’s DebugView documentation describes using Tag Assistant or Preview to enable debug mode for your device. It also explains that consent and client-side privacy controls can affect visibility. Keep the test device identifiable and avoid enabling debug mode permanently for all visitors just to investigate one form.
If the event is absent, walk backwards:
- Is the correct property and debug device selected?
- Did Tag Assistant show the expected tag and intended destination?
- Did enquiry_accepted appear with the correct values?
- Did the receiving system actually accept the form?
- Was collection permitted under the tested consent state?
The order prevents a common waste of time: changing application code when the event was sent to a different property, or changing Analytics settings when the application never announced success.
If two generate_lead entries appear after one accepted form, investigate the second sender. Check a CMS plugin, a hard-coded event, a second GTM tag and any event-creation rules. The focused duplicate-events guide explains how to isolate that fault without removing a legitimate second enquiry.
Realtime can provide an additional collection check through its event-name card. Use it to establish that an event arrived, rather than relying on its traffic attribution to explain a campaign. Google describes the collection-to-report sequence in About events.
Prove the event stays quiet when it should
A dependable success event needs negative tests. These are especially important when the form is asynchronous, the confirmation can be revisited, or a component can register listeners more than once.
For the supplier example, run the following cases independently and state the expected change in the accepted-enquiry count:
- Invalid required field: no increase
- Receiving service rejects the request: no increase
- Acceptance remains unknown after a timeout: no confirmed increase yet
- One accepted request: increase by one when collection is permitted
- Repeated success notification for that same request: no additional increase
- Confirmation reload or direct visit: no additional increase
- New, independently accepted request: another increase of one

The application should recognize repeats using its own stable request or acceptance reference where appropriate. Keep that reference within the application or approved diagnostic tooling. It does not need to become a GA4 custom dimension.
A temporary in-memory flag can suppress a callback during one page session, but loses its memory on reload. A flag tied only to “this visitor already submitted” can suppress a legitimate later request. Match the safeguard to the actual form behaviour, then test the relevant boundaries.
Avoid claiming exactly-once delivery from a browser implementation. A network failure can leave the sender unsure whether the collection endpoint received an event. The practical aim is a well-defined, tested trigger with explained coverage limits, while the intake system remains the reliable place to handle enquiries.
Most importantly, the customer’s submission must succeed even if Analytics is unavailable. A broken tag should never become a reason a sales request disappears. Treat form processing and analytics collection as separate responsibilities in the application’s error handling.
Find the results and read the right number
Once the event is collected and processed, open the Events report and find generate_lead. In the Life cycle collection, that report is under Engagement. In a Business objectives collection it can appear under the relevant objective. Report navigation is customizable, so consult the property’s report library or administrator if it is missing. Google’s Events report guide describes the report and its metrics.
Start with Event count for generate_lead. That is the straightforward measure for the occurrences collected under your definition. Check the date range, property timezone and any comparisons or filters before comparing it with intake records.
For session-level marketing context, use the Traffic acquisition report and select the specific key event in the available key-event selector. Its session-scoped traffic-source dimensions answer how the session was acquired. Avoid comparing that result with a first-user dimension and assuming both allocate the enquiry in the same way. Google’s Traffic acquisition documentation explains its scope.
GA4 also provides a Lead acquisition report under Acquisition, or Generate leads in the Business objectives collection. Its New leads metric counts unique users with generate_lead, rather than the number of generate_lead occurrences. The report uses user-scoped channel dimensions. This distinction is documented in Google’s Lead acquisition report.
For example, suppose one recognized user sends two accepted enquiries during the reporting period. Event count can be two while New leads is one. Neither number needs correcting merely because they differ. Your dashboard should label the first “Accepted form events” and explain the user basis of the second.

Add a form breakdown only if it helps
If the site has several approved lead forms, form_key lets you separate their collected events. To use that custom parameter in reporting, create an event-scoped custom dimension in Admin, Data display, Custom definitions. Use a readable display name such as Lead form, select Event scope and enter form_key as the event parameter.
Confirm the parameter is arriving first. Then allow for availability after the definition is created and data is collected; Google gives a 24 to 48 hour window for reporting with a new custom dimension. Its event-scoped dimension instructions also show how to add the dimension to an exploration.
One useful exploration has Lead form as rows, Event count as the value and an exact event-name filter for generate_lead. This answers how many accepted-form events each interface contributed. A form with a thousand unique receipt values would make this much harder to read, which is another reason to use stable form labels.
Avoid registering every technical parameter by habit. If nobody will make a decision from confirmation_source because every event uses the same method, it can remain a diagnostic parameter. Keep reporting definitions for questions you genuinely need to answer.
Allow processing time without losing the test trail
Google states that processing can take 24 to 48 hours and that reports can change during that period. An immediate DebugView check and a later processed-report check serve different purposes.
Write down the test time, then return to the matching date range after processing. Check whether developer or internal-traffic controls intentionally exclude your test from normal reports. Do not weaken those controls simply to make a demonstration appear in a business dashboard.
If the processed test is still pending, say that. Avoid firing repeated leads until something finally appears: those extra submissions create their own reconciliation problem. For acquisition analysis, remember that attribution can continue changing after the initial processing window.
Explain differences between GA4 and the enquiry inbox
A daily intake total and a GA4 total do not automatically describe the same population. The intake system can include accepted requests from visitors whose analytics collection was withheld or blocked. The CRM may merge several submissions into one opportunity. Spam review may remove requests that were genuinely accepted by the form.
Here is a hypothetical example with small, visible numbers. On one day, the form receives 12 attempts. Eight are accepted; four fail validation or remain unconfirmed. Of the eight accepted requests, six meet the example’s approved analytics-collection condition. Three repeated success callbacks occur among those six, but the implementation suppresses those repeats.
The intended result is six eligible generate_lead occurrences before any additional collection or reporting losses. Nine callbacks would not mean nine enquiries. Twelve attempts would not mean twelve leads. The intake team still has eight accepted records to handle, including two outside observable analytics coverage.
Suppose sales later merges two of the eight records because they belong to the same business opportunity. There are then seven opportunities. Three eventually qualify under the sales team’s criteria. Those later numbers belong to a different business stage and unit; they should not silently replace the accepted-form total.
If GA4 reports five events where six were eligible in a controlled test, investigate that one-event gap. Review destination, collection, consent, filters and time boundaries. Do not assume an attribution model explains missing event collection, and do not add a guessed event to force equality.
For ongoing reporting, agree which system answers each question. The intake system establishes which requests the team must handle. Analytics supports patterns in collected website activity and acquisition. The CRM establishes qualification and sales progress. A useful report can show them together while keeping the labels and limitations visible.
Connecting later sales outcomes to advertising needs a separate implementation. See the guide to offline conversion mapping and validation rather than sending full CRM records through the form tag.
Protect the information visitors send you
The form needs contact details to let the business respond. The analytics event in this guide needs only the fact of an accepted enquiry and a few approved categories. Keep those purposes separate when reviewing the implementation.
Google’s PII guidance warns about information in URLs, page titles, user-entered fields and campaign parameters as well as explicit event values. Inspect the complete outgoing context. A clean generate_lead payload does not solve an email address placed in the thank-you URL.
Use a synthetic test address when checking the application, then verify that it does not appear in analytics requests. Review form destinations and automatically collected labels. Avoid exporting raw network logs or screenshots that include real enquiries. Redaction features provide an additional safeguard, but preventing unnecessary data from entering the measurement path is the clearer design.
Consent behaviour must follow the site’s approved implementation. Google’s consent-mode overview distinguishes basic and advanced operation, including different behaviour before consent. Do not use “no consent means no network requests” as a universal acceptance criterion without checking the actual mode and policy.
This walkthrough concerns a generic business enquiry. Healthcare, financial and other sensitive journeys need a separate assessment of the pages, information and destinations involved. A neutral event label does not make a revealing page URL harmless or establish legal compliance.
When the form lives somewhere else
An embedded form can look like part of your website while running inside a separate frame. The parent page may see the frame load without seeing the form’s internal success response. Start with the provider’s supported integration rather than attaching a click listener to the visible area and assuming it represents completion.
Ask the provider three concrete questions: can it expose a confirmed acceptance event, which domain or frame sends that event, and how does it distinguish a repeated notification from a new submission? A supported message bridge can give the parent page the necessary signal, but the implementation should check the sending origin and accept only the expected message shape. Arbitrary messages from any frame should not become leads.
If a visitor leaves your site for a hosted booking or enquiry service, an outbound click is often the last action your existing website can observe. Keep that metric clearly labelled until the provider offers completion evidence. Returning to a public confirmation URL has the same reload and direct-visit limitations as an on-site thank-you page.
For a provider that permits compatible tagging on both domains, cross-domain tracking can help maintain measurement continuity through the journey. It still needs a separate, valid success event on the receiving side. Preserving a visitor’s journey and proving that a request was accepted are different implementation tasks.
Also check who controls future changes. A vendor can replace its form component or confirmation response without changing the button on your website. Keep the provider’s integration reference in the handover and include an external-form test whenever that integration changes. If the provider gives you only an aggregate completion report, that may still be useful business evidence; explain why it cannot be matched to every website event rather than inventing a matching method.
Release the change and leave a usable handover
After the application integration and GTM draft pass the agreed tests, have the authorized publisher review the complete workspace changes. An unrelated draft tag should not enter production merely because it was sitting beside the lead-event change.
Google’s verification and publication instructions distinguish creating a version from publishing it. Give the release a name that identifies the form and purpose, and include the relevant application release if both must change together. The GTM audit guide covers broader container ownership and release review.
Retest the published form using the approved production arrangement. Check an accepted enquiry and an invalid attempt, confirm the correct destination, and revisit the processed report when ready. Record any remaining limitation rather than treating publication as the final proof.
Leave a short handover that a marketer can use without reading application code: the form tracked, what counts as success, the GA4 event name, the counting method, the report to open and the date the definition began. Add the form-provider or application signal so a future developer knows what an update must preserve.
The existing GA4 lead tracking kit provides optional event-specification templates, a browser-to-report log and a network-free JavaScript exercise. Its 38 fictional event cases check local rules; they do not install GTM, send GA4 events or prove your website works. Use the worksheets when the implementation needs a fuller technical handover, rather than making the whole team complete every field for a simple form.
Revisit the test after a form-provider change, new confirmation flow or consent update. If the definition changes from “button clicked” to “enquiry accepted,” explain the break in the historical series. A lower count may reflect a more accurate question.
The setup is ready to support reporting when the team can demonstrate one accepted request becoming the intended event, a failed request staying out, and the resulting number appearing under the correct definition. If those steps expose an implementation gap, talk to Canada Create about the form and the point where tracking stops.
Frequently asked questions
How do I track lead form submissions as events in GA4?
Send a generate_lead event only after the receiving application confirms it accepted the enquiry. The usual route is a data-layer message from the form's success handler, a Custom Event trigger in Google Tag Manager and a GA4 Event tag that sends generate_lead to your web stream. Mark generate_lead as a key event, then test both successful and failed submissions before you trust the report.
Which GA4 event type should a completed lead form use?
GA4 has automatically collected events, enhanced measurement events, recommended events and custom events. For a confirmed enquiry, the recommended event generate_lead fits, since Google lists it for a generated lead such as a form submission. An enhanced measurement form_submit event may already exist, but check what triggers it before treating it as a completed lead.
Which measurement ID should a GA4 lead event tag use?
Use the measurement ID of the web data stream that reports on the site where the form lives, and confirm that stream before copying the ID. A plausible G- identifier from an old project can send a perfectly formed event to the wrong property. In GA4 you can find the ID under the stream's details in Admin.
Is GA4 lead form tracking hard to set up?
The Tag Manager and GA4 steps are manageable for someone with edit access, but the hard part is finding the form's real success signal. A developer or the form provider's documentation should show which callback or response means the enquiry was stored, and what happens when validation fails or the service is down. Without that answer, the event may count attempts instead of accepted enquiries.
Why should GA4 lead tracking not fire when someone clicks Send?
A click happens before anything is confirmed. The visitor may have missed a required field, the application may reject the request or the connection may fail. Even an HTTP 200 response can carry validation errors in its body, so the tracking should wait for the application's documented acceptance outcome.
Which parameters should a GA4 generate_lead event send?
Send fixed labels that describe the form, not the visitor's answers. The post's example uses form_key=general_enquiry, method=web_form and confirmation_source=application_ack. Names, email addresses, phone numbers and messages stay in the receiving system and never belong in the data layer or Analytics.
How does Google Tag Manager send a lead event to GA4?
Create three data-layer variables for the labels, then an exact-match Custom Event trigger that listens for the application's acceptance message, called enquiry_accepted in the example. A GA4 Event tag uses that trigger to send generate_lead to the intended web stream with the labels as parameters. Preview the draft with Tag Assistant and check DebugView before publishing.
Can GA4 count leads from a thank-you page instead of a data-layer message?
Yes, a confirmation-page rule is a supported option when that page reliably means the enquiry was accepted. Google documents creating an event from a page view, including a route in GA4 Admin that needs no code. Check that the page cannot be reached by refreshing or revisiting, or the count will include people who never sent a new enquiry.