Case StudyPartner Marketing · MDF Attribution & ROI

Turning unmatched partner-marketing spend into attributable pipeline.

I built the data platform and identity-matching engine that let a global enterprise finally see the ROI of its Market Development Funds — resolving 460K+ messy partner-marketing touches to real CRM accounts, and putting one trustworthy MDF-ROI view in front of partner leadership across three theaters.

Case Study Snapshotproblem → solution · at a glance
The problem

MDF-funded partner demand-gen ran through resellers and distributors worldwide, but the customer and partner names in the claims were free-text, multi-language, and didn't tie to CRM. So no one could say what any MDF dollar actually sourced.

What I built

A BigQuery pipeline that unified the marketing, CRM, and ERP sources; a Python fuzzy-matching engine that resolved touches to real accounts; currency normalization; and a Tableau suite that reported MDF ROI, sourced pipeline, and cost-per-opportunity by partner and geo.

BigQueryPython · recordlinkage / fuzzywuzzySalesforceSAPTableauAsanaMicrosoft ProjectSQL

Program scope & impact

Objective — give partner leadership one trustworthy view of what every MDF dollar actually sources.

460K+
Touches Resolved
Free-text partner-marketing touch records fuzzy-matched to canonical CRM accounts.
3 → 1
Systems Unified
Marketing attribution platform, Salesforce, and SAP joined into one MDF attribution model.
7
Currencies to USD
Global MDF spend normalized so investment and returns compare like-for-like.
Monthly
Refresh & QA
A repeatable pipeline I ran each cycle for partner global heads and geo leads.
Program scope3 source systems · 460K+ matched touches · 7 currencies → USD · North America / EMEA / Asia Pacific · monthly refresh

The challenge

Attribution dies in the join

Every quarter the business spent real Market Development Funds on partner-led demand generation — events, webinars, telemarketing, campaigns — booked through a global network of resellers and distributors. Leadership's question was simple: which of that spend actually sources pipeline, and where? The answer was buried under four data problems.

Names that don't match

The end-customer and partner names in the funding claims were hand-typed free text — abbreviations, legal suffixes, typos — with no shared key to the CRM's account records.

Three systems, one truth

The story was split across the partner-marketing attribution platform (claim + touch data), Salesforce, and SAP — each with its own account identifiers.

Global & multilingual

Touches spanned North America, EMEA, and Asia Pacific in seven currencies and multiple non-Latin scripts — none of it comparable as-is.

Until those touches could be tied to real accounts, MDF ROI simply didn't exist as a number anyone could trust. My job was to build the data foundation that made it exist.

The platform I built

From four raw sources to one attribution model

One pipeline, three stages: unify and harmonize the raw data, resolve every touch to a real account, then normalize and report. Here it is source to dashboard.

Artifact · Data platform architecturesource → attribution model → dashboard
MARKETING PLATFORM Touch tracker + funding claims SALESFORCE Account master SAP Account master BIGQUERY + PYTHON ENGINE 1 · Cleanse & harmonize (SQL) 2 · Translate non-Latin names 3 · Fuzzy identity matching 4 · Currency → USD normalize ✓ 460K+ TOUCHES RESOLVED ATTRIBUTION MODEL Touch → account → pipeline TABLEAU · MDF ROI SUITE MDF ROI · sourced pipeline Cost / opportunity · partner & geo Monthly & quarterly trends

The harmonization nobody sees

Before anything could be matched, the raw claim data had to be made trustworthy. In BigQuery I parsed a delimited partner-level string into a clean geo → country → area hierarchy across the three theaters, wrote MDF-spend logic tied to each claim's lifecycle status (in-flight claims use the requested amount; closed claims use the paid amount), and collapsed years of inconsistent free-text — activity types, business objectives, product and solution names — into a stable taxonomy. Unglamorous, but every downstream number depends on it.

Identity resolution

Matching names that were never meant to match

This is the engine at the center of the whole platform: a Python entity-resolution pipeline that decides, for every free-text company name in a partner touch, which real CRM account it actually is.

Why this artifact

An exact-string join would have matched almost nothing — "Acme Corp.", "ACME CORPORATION", and "acme co" are the same customer to a human and three different rows to a database. Fuzzy identity resolution is the only way to attribute real-world, hand-typed data at scale.

Artifact · Matching modelhow a touch finds its account
StepWhat I doWhy
CleanseStrip legal suffixes and punctuation; remove any word appearing in >0.5% of names.Removes noise ("Inc", "GmbH", "Technologies") that would otherwise inflate false matches.
StandardizeConvert every country to a clean ISO-2 code; translate non-Latin names to Latin script.Lets an APAC touch and a US account name be compared on the same footing.
BlockOnly compare candidates within the same country (sorted-neighbourhood indexing).Cuts the comparison space by orders of magnitude — accuracy and compute cost.
ScoreSix similarity metrics — Jaro-Winkler, Damerau-Levenshtein, token-set and partial ratios over two cleansing passes — combined by harmonic mean.Harmonic mean punishes any single weak signal, so one flattering metric can't carry a bad match.
ResolveAdd a composite city/country tie-break, rank, and keep the single best account per touch.One touch resolves to exactly one account — no double-counting downstream.
A design call I made

Non-Latin-script markets (Japan, Korea, Taiwan, Israel) were pulled and translated on a separate path rather than translating everything. Translation is the most expensive step; isolating the ~small share of records that actually need it kept the monthly refresh fast and cheap without losing coverage.

The attribution model

What the model actually is

With every touch tied to a real account, the model itself is deliberately simple and explainable — a rules-based, account-based attribution model, not a black-box statistical one. Partner leaders have to trust it and defend it in a review, so every credited dollar traces back to a specific touch and a specific account.

Model · Touch → account → pipelinerules-based · account-based
The unit
One MDF-funded partner-marketing touch — an event, webinar, telemarketing push, or campaign — carrying its funding claim and spend.
The join
Each touch is resolved to a canonical CRM account (via the matching engine), then joined to that account's pipeline and opportunities in the CRM.
The credit rule
A touch that reached an account is credited with the pipeline and opportunities that account generated — sourced or influenced — in the reporting window. Because one touch resolves to exactly one account, nothing is double-counted.
The efficiency lens
MDF investment ÷ opportunities from touched accounts gives cost-per-opportunity and cost-per-won-opportunity — the numbers leadership uses to compare partners and activity types.
Why rules-based, not ML

A statistical attribution model — Markov or Shapley — would have looked more sophisticated, but partner heads need to see exactly why a dollar was credited to stand behind the number in a QBR. An explainable, account-based model earns trust a black box never would.

How I ran it

A repeatable program, not a one-off script

The platform was only useful if it landed reliably every cycle and the right leaders trusted it. That was a program-management job as much as an engineering one.

Delivery modelcadence · stakeholders · tools
DimensionHow I ran it
CadenceA monthly refresh + QA cycle — re-run the pipeline, validate the match quality, reconcile spend and pipeline, publish the updated Tableau suite.
StakeholdersPartner global heads and regional geo leads across North America, EMEA, and Asia Pacific. I tailored the read for each — a global head wants ROI and where to reallocate; a geo lead wants their own partners and activities.
Planning & trackingRan the roadmap, refresh schedule, and enhancement backlog in Asana, and mapped it into the wider program plan in Microsoft Project so it stayed visible alongside the broader partner-marketing calendar.
TrustSurfaced the match-confidence score in the dashboard itself, so stakeholders could see how sure a given attribution was — credibility comes from showing the seams, not hiding them.

The recurring theme in the stakeholder work: partner leaders had been burned by numbers that didn't reconcile before. I earned trust by being transparent about match confidence and by making the same number mean the same thing in every geo's view.

What it enabled

From "we can't tell" to a board-ready ROI view

The Tableau suite turned the matched model into decisions leadership could actually make. What it put on one screen:

MDF ROI, finally

For the first time, spend could be tied to sourced and influenced pipeline — by partner, geo, activity type, and solution — instead of living in disconnected, unmatched spreadsheets.

Efficiency, not just totals

Cost-per-opportunity and cost-per-won-opportunity views showed which partners and activities returned the most per MDF dollar — the input to where the next dollar should go.

Promise vs. reality

A "solutions promoted vs. products actually purchased" view exposed where funded campaigns and real buying diverged — a signal the business couldn't see before.

What leadership saw — one region view

An illustrative, anonymized rebuild of the kind of monthly view partner leaders used — the layout and KPIs are generalized and the figures are placeholders, not real data.

MDF ROI & Sourced Pipeline · Region viewIllustrative
MDF invested$1.8M
Sourced pipeline$11.6M
Opportunities320
Cost / opportunity$5.6K
Pipeline : spend6.4×
Sourced pipeline by partner — top 6 (illustrative)
Partner A
Partner B
Partner C
Partner D
Partner E
Partner F

The honest version of the impact

I won't put an inflated ROI multiple on this. What's true and defensible: partner leadership went from no trustworthy MDF attribution to a single monthly view — 460K+ touches resolved, three systems and seven currencies reconciled — that they used to judge partner and geo performance and steer where MDF gets invested.