Form analytics and measurement guide
How to calculate form completion rate and diagnose drop-off
Calculate form completion rate with a defined denominator, event contract, worked dataset, diagnostic matrix and eight-case instrumentation proof test.
Completion rate is a ratio only after its eligible start and completion events share one population and one counting rule. Choose a person-, session- or attempt-based denominator before dividing; preserve form and version identity; exclude test traffic consistently; and inspect step-level losses before changing the form.
An eleven-field event contract, three valid completion-rate formulas, worked dataset, diagnostic matrix and reproducible eight-case instrumentation proof test, checked against current Google Analytics and W3C guidance on October 5, 2026.
Key findings
- Attempt, session and person completion rates can all be valid, but they answer different questions and must not share a mixed numerator or denominator.
- A browser submit event is useful instrumentation but does not by itself prove database acceptance, payment, qualification, deduplication or downstream success.
- Step loss becomes actionable only when events preserve form version, attempt, branch and environment context and the same raw events reproduce the published metric.
Stable definition and boundary
Form completion rate is the proportion of eligible form starts that reach one defined successful completion state. It is not the same as submit-button clicks, total page views, conversion rate from every visitor or the share of stored records that appear complete.
Completion rate is a ratio only after its eligible start and completion events share one population and one counting rule. Choose a person-, session- or attempt-based denominator before dividing, then preserve the event evidence needed to reproduce it.
The words start, completion and eligible need operational definitions. A form can load without being started, a submit button can be clicked without a record being accepted and one person can make several attempts. State which unit, window, version and exclusions apply next to the result.
Eleven-field event contract
| Field | Purpose |
|---|---|
event_id | Deduplicates the recorded event |
event_name | Distinguishes start, step, submit attempt and accepted completion |
form_id | Identifies the logical form |
form_version | Separates materially different question and logic contracts |
subject_key | Supports a privacy-bounded person view when permitted |
attempt_id | Groups one intentional completion attempt |
session_id | Supports session-level reporting |
step_id | Identifies the rendered page or branch state |
occurred_at | Orders events and applies the reporting window |
environment | Separates production, preview and test traffic |
eligibility_state | Records inclusion, exclusion and reason |
Accept a completion only after the server or destination confirms the promised submission state. Keep a submit-attempt event separate so validation failures, rejected payments, destination errors and double clicks remain observable without inflating completion.
Do not place raw sensitive answers in analytics events merely to diagnose a funnel. Use bounded event keys and permitted operational metadata, and retain detailed form content only in the systems and access scopes that need it.
Three valid completion-rate formulas
| Unit | Formula | Best use |
|---|---|---|
| Attempts | Accepted completed attempts ÷ eligible started attempts | Form and flow quality assurance |
| Sessions | Sessions with an accepted completion ÷ sessions with a start | Session-level experience |
| People | People with an accepted completion ÷ people with a start | Journey-level reporting |
Never use unique people in the numerator and raw attempts in the denominator. Also state whether a start can complete outside the reporting window, whether resumed attempts retain the same ID and how duplicate or test events are removed.
Step completion is a separate ratio: eligible attempts reaching the next required state divided by eligible attempts entering the current state. For conditional forms, compare only people who were actually eligible for that branch.
Worked dataset
During one week, version 7 records 1,000 eligible attempt starts and 780 completion events. The event-ID rule identifies 20 completion replays, leaving 760 accepted completed attempts. Attempt completion rate is therefore 760 ÷ 1,000 = 76%.
The same raw events contain 820 unique eligible starters and 700 unique completers. Person completion rate is 700 ÷ 820 = 85.4%. Both figures can be correct because repeat attempts make the populations different. Publishing “85.4% completion” without the person-level unit would hide that distinction.
| Measure | Observed | Rule | Accepted |
|---|---|---|---|
| Attempt starts | 1,028 | Remove 28 preview or test attempts | 1,000 |
| Completion events | 780 | Remove 20 duplicate event IDs | 760 |
| Unique starters | 832 | Remove 12 test identities | 820 |
| Unique completers | 710 | Remove 10 test identities | 700 |
Keep the reconciliation record with the metric definition and query version. A dashboard result that cannot be reconstructed from its accepted events is a monitoring signal, not reliable evidence.
Diagnostic matrix
| Observed pattern | First checks | Do not assume |
|---|---|---|
| Recorded starts fall | Start trigger, embed, consent mode and form ID | Demand fell |
| One step loses traffic | Validation, branch eligibility, device and latency | The question itself is bad |
| Submit attempts exceed completions | Server rejection, payment state and destination errors | Every difference is abandonment |
| Completions rise after a version change | Population, channel, season and eligibility mix | The design caused the lift |
| Mobile rate is lower | Viewport overflow, keyboard, focus, network and device mix | Mobile visitors are low intent |
| Analytics exceeds stored records | Duplicate client events, blockers and destination acceptance | The CRM deleted valid leads |
Use the form-abandonment recovery model only after the state is known. A measurement gap, a validation failure and an identified partial submission are not interchangeable reasons to contact someone.
Current analytics boundary
As checked October 5, 2026, Google Analytics documents form_start as the first interaction with a form in a session and form_submit when a form is submitted. The documented parameters include form ID, name and destination; the enhanced-measurement guide explicitly describes comparing users who started with users who submitted.
These automatically collected browser events can support a basic start-versus-submit view. They do not by themselves prove that a database accepted the record, a payment settled, the contact was deduplicated, a lead qualified or a downstream workflow succeeded. Some custom or embedded forms may also need deliberate validation of whether the automatic detector fires correctly.
The W3C forms tutorial says a user should be notified whether submission succeeded or errors occurred. Align the user-visible success state, server acceptance event and analytics completion definition so the page and the report do not tell different stories.
Eight-case instrumentation proof test
- Normal completion:one eligible start and one accepted completion share the intended attempt, session, form and version.
- Validation error and correction:the failed submit attempt is visible but completion appears only after acceptance.
- Conditional branch:a skipped step does not look like abandonment and branch eligibility is preserved.
- Back navigation:revisiting a step does not create a second start or a false new attempt.
- Refresh:the chosen unit and resume rule produce the documented result.
- Double click or replay:duplicate event IDs cannot inflate accepted completions.
- Server rejection:a client submit event remains distinct from accepted completion and the user sees an error state.
- Resumed attempt:the attempt rule is consistent across the expiry boundary and reproducible from raw events.
The start is counted once per chosen unit; only confirmed success creates a completion; retries and replay cannot inflate totals; branches preserve eligibility; test traffic is removed consistently; and the same accepted raw events reproduce every published ratio.
Run the proof test on the published form and destination, then record the metric definition, event-query version and observed evidence in the end-to-end form testing checklist. Repeat after changing embeds, consent controls, steps, conditional logic, success handling or analytics configuration.
Evidence and limitations
An eleven-field event contract, three valid completion-rate formulas, worked dataset, diagnostic matrix and reproducible eight-case instrumentation proof test, checked against current Google Analytics and W3C guidance on October 5, 2026.
- This is a measurement and QA framework, not evidence that any specific form length, layout or completion rate is good.
- Browser analytics can be blocked, duplicated or misconfigured; critical success should be reconciled with server or destination evidence.
- Before interpreting a change as causal, check population, channel, version, device and eligibility differences and protect personal data in the event design.
Sources and verification
Current product and plan claims use the primary sources below. Internal methodology links describe the publication's own frameworks and should not be read as vendor documentation.
- Google Analytics, Automatically collected events
- Google Analytics, Enhanced measurement events
- W3C WAI, User Notifications
- Form abandonment recovery
- Form testing checklist
- Form attribution fields
- The Form Review testing methodology
- The Form Review corrections policy
Last materially verified .