twoHelixestwoHelixes Start free

Analytics

GA4 parity, without the wishful thinking

A current capability map. Partial rows say what is missing; deliberate differences say why the behavior does not copy Google Analytics.

GA4 concepttwoHelixesVerdictBoundary
Property / data streamAnalytics sitePartialOne owned web domain; no app streams or multi-stream properties.
Measurement IDWrite keyAt parityA public key selects a registered site; unknown keys are discarded.
gtag / dataLayerth.jsPartialPage, track, identify and queued th calls; no generic dataLayer plugin surface.
Event + parametersevent_name + propsAt parityGA-shaped names and JSON parameters are retained within collector limits.
user_pseudo_idclient_idDeliberately differentRandom first-party localStorage ID; DNT and GPC disable it.
Sessions / session_startServer session logicAt parity30-minute inactivity boundary and one session_start on the first hit.
engagement_time_msecengagement_msPartial_et and visible-tab deltas accumulate; the full GA lifecycle is not reproduced.
Conversions / key eventsConventional key-event namesPartialFour conventional names affect engagement; no per-site custom registry.
AudiencesNoneNot supportedNo persistent membership, activation or advertising export.
UTM / traffic sourceSession-scoped UTM + referrerPartialUTMs persist and self-referrals are excluded; no channel grouping or cross-session attribution.
ExplorationsChat + dashboardsDeliberately differentQuestions and editable charts replace the exploration canvas.
BigQuery exportExport endpoint + datasetsPartialBounded authenticated batches, not a continuous linked warehouse export.

Collector decision

Unknown write keys are discarded with the normal forgiving collector response. Quarantine would retain unsolicited data and allow guessed hostnames to create storage namespaces.

The HTTP parity suite covers session boundaries, session_start, engagement accumulation, page views, self-referrals, session UTM persistence, and engaged-session bounce rules.