What was broken
Orbit had 312 distinct event names across their UA property, half of which were typos or A/B variants nobody had cleaned up. Product was instrumenting in Mixpanel, marketing was looking at UA, and the two never matched.
The unified schema
We reduced everything to 47 canonical events with a strict naming convention:
{object}_{action}
e.g. signup_started, checkout_completed, plan_upgraded
Each event ships with the same six properties everywhere it fires. Marketing and product now look at the same numbers — and when they disagree, it's always a real disagreement, not a tracking bug.
The pipeline
- GA4 → BigQuery export (native)
- Mixpanel → S3 → BigQuery (via Mixpanel's data pipelines)
- dbt models on top to merge sessions across both sources
- Looker Studio dashboards for marketing, Mixpanel for product