Marketing Operations from intake to attribution —
built as a system, not a process.
A full-stack Marketing Operations system designed for a health technology company scaling from pilot to multi-channel engagement. The brief: replace spreadsheets, Slack threads, and tribal knowledge with a coherent, repeatable campaign engine that an ops team of three can run at scale.
- No standard intake — campaigns arrived via Slack, email, or hallway conversation. No structured brief meant Ops spent every Monday reverse-engineering what the requester actually wanted.
- No naming convention — UTMs were handmade (spelling errors, missing fields, duplicates), making cross-channel attribution unreliable.
- No QA process — campaigns went out without automated checks. Missed suppressions, broken links, and wrong segments were caught by the channel owner after launch — not before.
- No feedback loop — no consistent measurement tied campaigns back to business outcomes. The team couldn't answer "which campaigns actually move retention?"
- Structured intake form in Monday with taxonomy-driven dropdowns. Campaign name auto-generated from selections — no typos, no guesswork.
- UTM convention enforced at intake. Every link is tagged consistently for clean attribution across Braze, HubSpot, Short.io, and Lightdash.
- Two-layer QA — AI handles the 10 binary checks (did the sync run, does the link resolve, is suppression applied). Human reviews the AI report plus content/compliance in ~5 minutes.
- Two-tier measurement — Tier 1 executive scorecard (retention, pipeline, protected revenue). Tier 2 per-campaign reports with anomaly detection.
Every campaign follows the same path: structured brief → architecture → build → QA → launch → close. The system makes it easy to do the right thing and hard to skip a step. The UTM convention — not a dashboard — is the attribution layer.
Two tracks. One convention. Clean attribution.
The marketing stack splits into two functional tracks — one for the business-to-business pipeline (employer/partner sales), one for the business-to-consumer engagement layer (member communication). The UTM naming convention is the thread that ties them together.
| Dimension | B2B Pipeline | B2C Engagement |
|---|---|---|
| CRM / Source | Salesforce | Data warehouse |
| Marketing Automation | HubSpot | Braze |
| Audience Sync | HubSpot workflows | Hightouch (reverse ETL) |
| Link Tracking | Short.io | Short.io |
| Reporting | Lightdash | Lightdash |
- Team: client / growth / brand
- Motion: engagement / retention / acquisition / reactivation
- Audience: active-members / at-risk / b2b-clients / prospects
- Quarter: auto-generated from date
- Planned — brief accepted, no work started
- Building — assets in production
- In QA — AI checks + human review
- Approved — signed off by channel owner
- Live — campaign is sending
- Complete — performance read, learnings logged
- On Hold — paused by Ops, not dead
- Cancelled — documented with reason
Campaigns are owned by one of three marketing teams. Each team's motion maps to specific audience stages:
| Team | Primary Motions | Audiences |
|---|---|---|
| Client Marketing | Engagement, Retention | B2B Clients, Active Members |
| Growth Marketing | Acquisition, Reactivation | Prospects, Churned |
| Brand | Engagement, Awareness | All, broad market |
- Single named owner per campaign — not a team, a person
- Status tracked: planned → build → QA → approved → live → complete
- Weekly ops review: what's live, launching, slipping
- Tier 1 dashboard aggregates by motion type — leadership sees health, not volume
- Delays flagged proactively — not discovered after launch
Brief to results — no guesswork.
Every campaign follows the same path. Requests come through a structured form. Nothing gets built without a brief. Nothing launches without QA sign-off. Nothing closes without a performance read.
Connected tools. One source of truth.
No tool lives in isolation. Every platform passes data to the next. The UTM convention is the thread that ties them all together for clean attribution.
Pipeline data
Campaigns
UTM attribution
Pipeline influenced
Member data
Audience sync
Email, SMS, in-app
UTM attribution
Retention + engagement
| Tool | Owner | MarOps Role |
|---|---|---|
| HubSpot | MarOps | B2B campaigns, build + launch |
| Data Warehouse | Data & MarTech | Validate outputs |
| Hightouch | Data & MarTech | Scope + validate syncs |
| Braze | Shared / MarOps | Member campaigns, QA, launch |
| Short.io | MarOps | Own all UTM links |
| Lightdash | Analytics | Scope reports, review |
| Monday | MarOps | Own the intake queue |
- HubSpot API — B2B campaign automation, contact management
- Braze REST API — segment validation, subscription status, unsubscribe list
- Hightouch API — sync status, timestamp, error count, row validation
- Short.io API — link creation, click analytics, UTM validation
- Lightdash API — dashboard queries, scorecard updates
- Claude API — architecture generation, QA reports, briefings
Right message. Right person. Right time.
Five lifecycle stages. Every campaign targets one. Overlap is managed by suppression — not audience design. Audiences are built from the data warehouse and synced to the engagement platform via reverse ETL.
- Global unsubscribe list (email + SMS)
- Subscription group opt-outs
- Members in active onboarding sequence
- Frequency cap: same motion within [X] days
- Audience overlap with concurrent campaigns (P1 wins)
- Member-level flags (medical hold, account dispute)
QA is a system, not a habit.
Habits slip under pressure. Systems don't. Every campaign runs through an AI pre-flight before a human reviews the report — not a blank checklist starting from zero.
AI handles everything binary — did the sync run, does the link resolve, is suppression applied, does the UTM match the convention. The human reviews the AI's report + content/compliance items AI can't assess. Human QA time: 30 min → 5 min.
Tier 1 answers "Are we healthy?"
Tier 2 answers "Why?"
Leadership lives in Tier 1 — outcomes, retention trends, protected revenue. Ops and channel owners live in Tier 2 — channel performance, UTM attribution, anomalies.
| Metric | Business Value |
|---|---|
| Member Retention Rate % active at 30/60/90 days |
Each retained member ≈ $8K+ annualized savings |
| At-Risk Reactivation Rate % re-engaged within 14 days |
Proxy for churn prevention ROI |
| B2B Pipeline Influenced Deals touched by marketing |
Revenue attribution to marketing |
| Protected Revenue Retained members × average savings |
Estimated value of retention campaigns |
| Channel | Key Metrics |
|---|---|
| Email (Braze) | Open rate ±baseline, CTR, unsubscribe, conversion |
| SMS (Braze) | Delivery, click rate, opt-out rate |
| Paid Media | CPL, CTR, UTM-attributed pipeline via CRM |
| Direct Mail | Delivery confirmation, response via short link |
| In-App | Impression rate, click, action taken post-view |
Short.io links
with full UTM
with UTM params
utm_campaign filter
attributed to campaign