Form submission vs. confirmed lead: choose the event boundary
Define separate events for an attempted form submission, durable inquiry receipt and sales acceptance, including retries, ambiguous timeouts and failure states.

Choose which promise the event makes
A button click shows intent to act. A submit handler shows an attempt. A saved inquiry shows that the receiving system accepted a record. A sales-accepted opportunity adds a later business judgment. Naming all four “lead” makes the funnel look shorter and more reliable than it is.
GA4 enhanced measurement describes form_submit as a form submission interaction. That event alone does not establish durable server receipt or business acceptance. Define those later boundaries in the application and operating records. [Google Analytics: Enhanced measurement events]
A state contract for one inquiry attempt
idle → validating
validating → validation_failed OR pending
pending → saved_confirmed OR rejected OR server_failed OR unknown
unknown → reconcile receipt before creating a new inquiry
saved_confirmed → pending_sales_review
pending_sales_review → accepted OR declined OR unresolvedA confirmed state needs a concrete receipt contract, such as a success response containing the matching request identifier after durable save. A generic HTTP 200 may be an anti-spam response, a queued attempt or a proxy fallback. Inspect the response semantics rather than assuming the status code means the inquiry exists.
A timeout is especially important. The server may have saved the record while the browser lost the response. Report the outcome as unknown until it can be reconciled. Retrying with the same idempotency identifier can prevent a new inquiry where the application supports that contract; generating a fresh identifier for every retry can create duplicates.
Keep the event register small and honest
| Boundary | What the event may establish | What it does not establish |
|---|---|---|
| Attempt | A valid local attempt was sent | Record exists or staff received it |
| Confirmed receipt | The application verified durable save | Notification delivered or sales fit accepted |
| Notification delivery | A destination acknowledged a notification | A person read it or contacted the lead |
| Sales acceptance | A reviewed inquiry met the stated rule | A sale or revenue occurred |
Keep attempt and outcome counts from being combined as equivalent key events for the same business question. A form with one attempt event and one confirmed event should not create two claimed leads. A reporting label cannot fix duplicate event selection.
Do not put form answers, contact values, account tokens or recovery data into analytics. Technical request identifiers belong in protected operational records where required, not in broadly shared marketing reports. Aggregate event delivery can be verified without publishing submitted content.
Test the states that are easy to mislabel
- Submit a locally invalid form and verify no confirmed-receipt event occurs.
- Simulate an authorized server rejection or unavailable service and inspect the honest failure state.
- Send one valid technical inquiry and verify the matching durable receipt.
- Repeat the same request under the application’s retry contract and inspect duplicate handling.
- Test a lost response and confirm that unknown remains distinct from failed or saved.
- Check required analytics permission without bypassing it.
Also verify that an event is not sent both by automatic form interaction measurement and by a manual success listener under the same name. Preserve their different meanings if both are needed. The important count is the one tied to the declared boundary.
I would report confirmed receipts, pending sales review and accepted opportunities separately. That makes a delivery incident visible without turning it into a claim about lead quality, and makes a quality problem visible without calling the collection pipeline broken.
Sources
AI-assisted writing and an AI-generated editorial cover. Source links and checked dates are listed below; illustrative examples are labeled in the text.
- Google Analytics: Enhanced measurement events — checked 2026-10-18