Web Analytics · Analytics Engineering
Data Enrichment & Transformation
Every derived table can be traced back to the raw export that still sits underneath it.
Raw GA4 exports often contain duplicate campaign labels, inconsistent channel names, and records that fail to join. We create a governed transformation layer that resolves those issues without modifying the raw exports beneath it.
Activation-ready tables with documented logic, measurable join quality, and the original raw data available for review.


Some of the 500+ brands we've worked with
See all referencesHow we run it
Profile the exports, specify the rules, test edge cases, and monitor every release.
We add a maintainable transformation layer while keeping the raw record available underneath. Four steps convert raw warehouse data into documented tables with visible quality controls.
How we hold ourselves to it
- Preserve raw exports as the evidence layer — Transformations read from a separate raw layer without changing it, allowing anyone to compare normalized outputs with the original records.
- Standardize repeated business labels — Campaign, channel, and product names follow consistent rules while retaining what each source originally recorded.
- Measure every failed join — We calculate match rates and expose unmatched records rather than dropping them or assigning guessed values.
- Date and version every rule — Each historical rule change receives a version and effective date so it does not silently rewrite previous periods.
Profile the raw data
We inspect actual values, nulls, distributions, and inconsistencies before defining transformation logic.
Data profile
- AI assist
- Flags null spikes and label variants automatically.
- Human gate
- Analyst confirms which anomalies matter.
- Owners
- Analytics Engineer, BI Analyst


Specify the transformation rules
We document normalization, join, and deduplication logic, including test cases for known edge conditions.
Transformation specification
- AI assist
- Drafts SQL join and normalization logic.
- Human gate
- Your data owner approves the join keys.
- Owners
- Analytics Engineer, Data Owner


Build and test
We implement the approved rules and test them against known-good examples and boundary cases.
Test results
- AI assist
- Runs the rules against boundary-case fixtures.
- Human gate
- Engineer reviews failed test cases before merge.
- Owners
- Analytics Engineer


Release and monitor
We deploy the transformations and add checks for schema or data drift that could break downstream tables.
Monitoring setup
- AI assist
- Watches for schema drift after each run.
- Human gate
- On-call analyst approves the drift alert threshold.
- Owners
- Analytics Engineer, Warehouse Admin


New structure sits on top. The raw data stays underneath, untouched.
Automation profiles the export, flags null spikes and label variants, drafts the join and normalization SQL, runs it against boundary-case fixtures, and watches for schema drift after each run. The calls that shape the data stay human: which anomaly matters, which join key is legitimate, and what a failed test means before anything merges.
What you get
Every transformed table comes with a data dictionary.
You receive usable tables and maintainable documentation rather than an opaque query.
Technical specification
Transformation specification
Versioned documentation of the exact normalization, join, and deduplication rules.
Accepted when
The spec is versioned, and the version that produced the current tables is identifiable.
Cadence: Versioned at every rule change
Working document
Activation-ready tables
Clean, joined tables prepared for dashboards, models, or downstream activation.
Accepted when
Row counts and category distributions reconcile against the raw source within a stated tolerance.
Cadence: Rebuilt on the pipeline schedule
Reference document
Data dictionary
Definitions and source lineage for each derived field so future analysts do not need to reverse-engineer the logic.
Accepted when
Every derived field names its source columns and the rule that produced it.
Cadence: Updated with each derived field
We call it done when: join match rates are measured and documented, unmatched records have a stated disposition, and the raw layer is still queryable.
Fit and readiness
Your exports landed, but the labels still disagree.
Landed exports that still don't agree on labels are usually the first sign this needs to happen.
A good fit when
- Your GA4 or other exports have landed in the warehouse, but campaign, channel, or product labels are inconsistent across sources.
- You need joined, activation-ready tables for a dashboard, model, or downstream tool, well beyond raw event exports on their own.
- Existing transformation logic is scattered across spreadsheets or undocumented queries that nobody fully trusts.
Better handled as other work when
- You need the GA4 export connection built before any warehouse transformation rules are written or tested. That is GA4 Integrations & Data Activation.
- You need server-side collection routing rather than warehouse-level transformation. That is Server-Side GTM & Cloud Setup.
If one of these is closer to your situation, start here instead: All Analytics Engineering & Data Activation tasks
We call it done when: the raw data is profiled and the data owner has approved the join keys, so the rules are written against what the export actually contains.
People who build your measurement system
Zeo designs measurement systems that connect a business decision to governed collection and reporting you can check. The people shown here work on the part of that system this page covers.

Yiğit Konur
Founder & Chief Strategy Officer

Zafer Yıldız
Web Analytics Manager

Abdullah Tanıdır
Performance Marketing Team Lead

İlker Emir
Senior Performance Marketing Executive

Deniz Çağın Demirci
Frontend Developer

Mirzamin Aghazada
UI/UX Designer

Serap Yurtvermez
Performance Marketing Team Lead

Sevda Yurtvermez
Performance Marketing Team Lead

İpek Ezer
Performance Marketing Executive

Onur Durdağı
Performance Marketing Executive

Metehan Urhan
New Business & Partnership Manager
Content we've produced on this topic
Tools we use
Tools behind this work
BigQueryholds the untouched raw export the page's whole approach depends on leaving alone
dbtwhere the transformation rules get built as tested, version-controlled models, not one-off scripts
Next step
Turn raw exports into tables people can actually build on


Before we start
Questions teams ask before booking
No. The transformation layer reads from raw exports without modifying them, so the original evidence remains available if a result needs investigation.

















