Google Analytics 4 (GA4)
Google Analytics 4 (GA4) is Google's analytics platform built on an event-based data model, where every interaction is recorded as an event with parameters. It measures user behavior across websites and apps and replaces the older Universal Analytics.
Key takeaways
- Events carry parameters describing one action; user properties describe the person across sessions.
- A parameter stays invisible in reports until registered as a custom dimension within property limits.
- High-cardinality values are collapsed into an aggregated other row and lose analytical value.
- Data retention settings cap how far back explorations can look, independent of standard reports.
- Its attribution model differs from ad platforms by design, so totals will not match.
In depth
The data model has three levels. An event is a named action; parameters describe that single occurrence; user properties describe the person across events. Hits arrive from a gtag snippet, a tag manager or the Measurement Protocol, land in a data stream, and are grouped into sessions by a session_start event and a rolling inactivity timeout. Identity is resolved in order of preference: a user ID you supply, then signed-in Google signals if enabled, then the device identifier, with modelling filling gaps where consent is missing.
Reporting quality is governed by limits people meet late. A parameter is invisible in reports until you register it as a custom dimension, and each property allows only a fixed number. High-cardinality values push rows into an aggregated other bucket, so sending a raw score of nought to a hundred fills the quota that a five-band tier would have used sparingly. Retention settings cap how far back explorations reach, and thresholding hides small rows entirely when identity signals are active.
A workable configuration is short. Name events in snake case with a stable vocabulary, register the handful of parameters you will actually segment by, mark the ones that represent business outcomes as key events, and build a funnel exploration across them. On a quiz funnel that means a start, a per-question step with an index, and a completion carrying a banded tier rather than a raw number, which keeps cardinality low and makes drop-off between steps directly readable.
GA4 is a behavioural analytics tool, not a system of record. It applies its own attribution model, so its channel credit will disagree with each ad platform's self-reported numbers by design, and comparing the two as if one were wrong wastes time. It also aggregates, thresholds and models, which means individual leads cannot be reconciled row by row, and sending personal data into it breaches the terms of service rather than solving that gap. That reconciliation belongs in your own database.
Example in practice
How to measure it
Check the collection before trusting any chart. Use the realtime and debug views to confirm each event arrives once with the parameters you expect, then look for unregistered parameters and for rows already collapsing into the other bucket. A steady rise in unassigned or direct traffic usually points at a tagging or consent problem rather than at genuine changes in how people find you.
For the funnel itself, build a step-by-step exploration and read the completion rate between adjacent steps rather than the overall total, since a single weak question is invisible in an aggregate number. Segment by source, device and landing page, and compare the same period a year earlier only if your taxonomy did not change in between. Otherwise you are comparing two different measurement systems.
Common mistakes
Inventing event names as you go is the mistake that compounds. One team ships quizComplete, another quiz_complete, a third completes_quiz, and six months later no report covers the whole funnel because the history cannot be merged retroactively. Agree a naming pattern and a parameter list before implementation, keep it in a document engineering can read, and reject new events that do not fit it. Renaming later does not repair the data already collected.
The other is marking too many key events. When page views, scrolls, video plays and form starts are all conversions, every channel looks successful and the report can no longer rank anything. Restrict key events to outcomes someone would defend in a budget meeting. A second version of this error is pushing raw identifiers such as email addresses into parameters, which violates the terms of service and risks the property being reset.
Frequently asked questions
How is GA4 different from Universal Analytics?
GA4 uses an event-based model where every interaction is an event, while Universal Analytics was built on sessions and pageviews. GA4 also emphasizes cross-platform measurement, modeling, and privacy controls.
Can GA4 track my quiz funnel conversions?
Yes. You can send custom events such as quiz_complete and lead_submitted, mark them as key events, and segment by campaign to see which sources produce qualified leads.
Do I need Google Tag Manager to use GA4?
No, but it helps. GTM makes it far easier to send custom events and parameters to GA4 without code changes, which is why many teams pair the two together.
Why do GA4 conversions differ from my ad platform's numbers?
Because they answer different questions. The ad platform credits conversions to its own impressions and clicks within its attribution windows and includes modelled results; GA4 assigns credit across channels using its own model and only sees what reached its stream. Neither is wrong. Use the ad platform for buying decisions and GA4 for cross-channel comparison, and stop reconciling the totals.
What is a key event in GA4?
A key event is an event you have flagged as a business outcome, which makes it available as a conversion in reports and for import into advertising. Any event can be marked, and marking is not retroactive in every report, so flag it early. Keeping the list short is what makes channel comparisons readable, since everything marked will look equally important.
How many custom dimensions can I create?
Each property allows a fixed number of event-scoped and user-scoped custom dimensions, and the limit is small enough that you must choose deliberately. Register only parameters you will filter or segment by. Parameters you merely want to inspect occasionally are better read through the BigQuery export, which stores everything sent regardless of registration.
Can I put a lead's email address in an event parameter?
No. Sending personally identifiable information into GA4 breaches the terms of service and can result in data being deleted or the property disabled. Use an internal identifier that only your systems can resolve, set it as the user ID, and keep the contact details in your CRM. If you need customer-level matching for advertising, use the dedicated user-data features.
Why does my report show an other row?
Because a dimension exceeded its cardinality limit for that report and the least common values were aggregated together. It usually happens when a parameter carries something unbounded, such as a full URL with query strings, a timestamp or an unrounded score. Group values into bands before sending, and use the BigQuery export when you genuinely need every distinct value.
Do I need BigQuery export?
Not to start, but it removes most limits you will eventually meet. The export contains every event with all parameters, unsampled and unthresholded, so you can join sessions to CRM outcomes and reproduce funnel logic yourself. Enable it early even if you do not query it yet, because it only stores data from the day it is switched on.