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 concept | twoHelixes | Verdict | Boundary |
|---|---|---|---|
| Property / data stream | Analytics site | Partial | One owned web domain; no app streams or multi-stream properties. |
| Measurement ID | Write key | At parity | A public key selects a registered site; unknown keys are discarded. |
| gtag / dataLayer | th.js | Partial | Page, track, identify and queued th calls; no generic dataLayer plugin surface. |
| Event + parameters | event_name + props | At parity | GA-shaped names and JSON parameters are retained within collector limits. |
| user_pseudo_id | client_id | Deliberately different | Random first-party localStorage ID; DNT and GPC disable it. |
| Sessions / session_start | Server session logic | At parity | 30-minute inactivity boundary and one session_start on the first hit. |
| engagement_time_msec | engagement_ms | Partial | _et and visible-tab deltas accumulate; the full GA lifecycle is not reproduced. |
| Conversions / key events | Conventional key-event names | Partial | Four conventional names affect engagement; no per-site custom registry. |
| Audiences | None | Not supported | No persistent membership, activation or advertising export. |
| UTM / traffic source | Session-scoped UTM + referrer | Partial | UTMs persist and self-referrals are excluded; no channel grouping or cross-session attribution. |
| Explorations | Chat + dashboards | Deliberately different | Questions and editable charts replace the exploration canvas. |
| BigQuery export | Export endpoint + datasets | Partial | Bounded 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.