Book a 30-min call
$ cd ~/projects/marketing-attribution-analytics agent.shipped · in production

Where the Money
Actually Comes From.

Last-click was handing Google branded search all the
credit. Podcasts, influencers, email — the channels that
actually drove the purchase — got zero. We built a
Bayesian MMM on PyMC v5 + Meta Robyn + Google Meridian,
Shapley for decomposition, geo-experiments under iOS ATT.
The CMO moved $2.8M on it.

  • Home
  • Marketing attribution & revenue analytics
Marketing analytics dashboard overview

Marketing attribution & revenue analytics

Industry
Direct-to-Consumer
Timeline
12 weeks
Key result
67% better attribution, $2.8M reallocated
Tech stack
Snowflake, dbt + SQLMesh, Dagster (replacing Airflow), PyMC v5 + NumPyro, Meta Robyn, Google Meridian, Uber Orbit, Shapley decomposition, geo-experiments / synthetic control, iOS-ATT-aware modelling, Looker, Segment CDP

We built a Bayesian multi-touch attribution model across 23 channels with a 180-day lookback. Attribution quality jumped 67% against held-out conversions, and the CMO moved $2.8M of spend off the channels the old model was overvaluing.

Events flow from Segment into Snowflake, dbt + SQLMesh stitch journeys and map channels, and a Bayesian MMM (PyMC v5 + Meta Robyn + Google Meridian, with Uber Orbit as a sanity check) scores channel-level contribution. Shapley decomposition handles the per-touchpoint credit, geo-experiments and synthetic control hold us honest under iOS ATT and cookie deprecation, and Dagster orchestrates the whole pipeline. Looker dashboards make the weekly reallocation a conversation with numbers instead of a gut call.

Analytics Engineering Approach
  • One event timeline — We consolidated 23 channels through Segment CDP into Snowflake and stitched every customer journey into a single, clean event log.

  • Bayesian MMM, Shapley on top — Bayesian Marketing Mix Modelling on PyMC v5 + Meta Robyn + Google Meridian (Uber Orbit as a sanity check) handles the channel-level contribution. Shapley decomposition distributes credit per-touchpoint. The two methods do different jobs — we don’t conflate them.

  • dbt + SQLMesh on Dagster — Modular dbt + SQLMesh models handle journey stitching, channel mapping and attribution materialisation, orchestrated on Dagster (we moved off Airflow) on daily and weekly schedules. OpenLineage tracks every dataset back to its raw event.

  • Self-serve Looker, geo-tested — Channel-level ROI dashboards the marketing team uses weekly to shift spend, with geo-experiments and synthetic-control read-outs validating any move above $250K. The analytics team isn’t in the loop for routine budget calls.

What was actually hard

Last-click was handing all the credit to Google branded search — the final step before checkout — and writing off the podcast reads and email sequences that actually started the journey. The CMO knew the numbers were wrong but had nothing better. We had to build something statistically honest and simple enough that a non-technical exec would bet real budget on it.

Marketing team analyzing campaign performance data

Project Outcome

The model showed podcast ads were 4x more effective than last-click had reported and branded retargeting was 2x less. The team moved $2.8M off the overvalued channels and CAC efficiency climbed inside two quarters.

> 23 channels
unified
> 67% attribution
improvement
> $2.8M spend
reallocated
> 180d lookback
window
Revenue attribution review meeting with marketing team
Channel ROI and attribution numbers on monitor
SnowflakedbtSQLMeshDagsterPyMC v5Meta RobynGoogle MeridianUber OrbitShapley decompositionGeo-experiments / synthetic controlLookerSegment CDP

“We discovered our podcast ads were 4x more effective than we thought, and our retargeting was 2x less. We moved $2.8M accordingly.”

@ Lisa T.

CMO — Series C DTC Brand

Data-driven marketing analytics workspace
  • [Robyn] MMM
  • [Meridian] Bayesian
  • [PyMC v5] priors
  • [Shapley] decomposition
  • [Geo-experiments] iOS ATT
  • [Dagster] orchestration