# Multi-Touch Attribution & Campaign Analytics
**Role:** Analytics lead
**Timeline:** Iterative development over several months
**Stack:** Snowflake, dbt, CRM data, marketing automation platform
---
## Context
Marketing needed to understand which campaigns actually influence pipeline - not just which campaign a lead touched first, but the full journey from anonymous visitor to closed deal. The existing attribution was single-touch (first-touch or last-touch), which dramatically undervalued mid-funnel programs like nurture campaigns and events.
---
## Approach
### 1. Define the Attribution Framework
Before writing any SQL, I worked with stakeholders to define what "credit" means:
- **Sourced attribution:** Which campaign created the lead? (first-touch)
- **Influenced attribution:** Which campaigns touched the opportunity before it was created? (multi-touch)
- **Pipeline credit allocation:** How to split credit across multiple touches
The key insight: sourced and influenced are complementary views, not competing ones. We report both, and stakeholders use whichever lens fits their question.
### 2. Touchpoint Data Model
Built a dbt model that unifies touchpoints across sources:
- CRM campaign membership records
- Marketing automation engagement events
- Web analytics sessions (matched to known contacts)
- Event attendance and content engagement
Each touchpoint is standardized with a timestamp, contact identifier, campaign reference, and engagement type. This creates a single timeline of every interaction a contact has before pipeline is created.
### 3. Credit Allocation Logic
For influenced attribution, I implemented a time-decay model:
- Touchpoints closer to opportunity creation receive more credit
- A configurable lookback window defines which touches count
- Credit sums to 100% of the opportunity value across all contributing touches
The model is parameterized so stakeholders can adjust the decay rate and lookback window during planning cycles without requiring code changes.
### 4. Campaign Performance Layer
On top of the attribution model, I built a campaign analytics layer that answers:
- What is the cost-per-MQL by campaign type?
- Which programs have the highest pipeline influence per dollar spent?
- How do conversion rates vary by campaign category and region?
---
## Results
- Gave marketing leadership a defensible view of campaign ROI
- Shifted budget conversations from "we think events work" to "here's the pipeline influence data"
- Enabled campaign managers to self-serve performance data without analyst bottlenecks
- Surfaced undervalued mid-funnel programs that were previously invisible in first-touch reporting
---
## Lessons Learned
- **Attribution is a political problem as much as a technical one.** Getting agreement on the methodology matters more than the model's sophistication.
- **Report multiple views.** No single attribution model is "correct." Showing sourced AND influenced gives stakeholders the flexibility to pick the right lens.
- **Data quality is the bottleneck.** The hardest part wasn't the attribution logic - it was reconciling touchpoint data across CRM, marketing automation, and web analytics.
---
[[Projects|Back to Projects]]