Multi-Touch Lead Attribution Model for a Gamified Training Platform
A training-software provider's legacy CRM tracked attribution in three separate, overlapping fields: Source, Backup Source, and Vendor Marketing Source. None reconciled with the others, so once a contact converted, first-touch and last-touch history couldn't be reconstructed from what remained. We built a three-property model, Lead Source, First-Touch Lead Source, and Last-Touch Lead Source, and ten HubSpot workflows to populate it. First-Touch Lead Source is written only while it is still blank, so the first channel is kept.
Executive Summary
Context
The client's lead-generation retainer needed attribution data the legacy CRM had never produced: which channel first reached a contact, and which channel closed the deal. The prior system split that answer across three overlapping source fields with no rule for reconciling them, so ten new workflows replaced guesswork with a governed, blank-gated write.
What We Built
We replaced the legacy CRM's three overlapping source fields with a governed three-property model, Lead Source, First-Touch Lead Source, and Last-Touch Lead Source, and ten supporting workflows. First-Touch Lead Source is written only when it is still blank.
Tech Stack
- HubSpot CRM
- HubSpot workflows
- Copper CRM (formerly ProsperWorks)
- Typeform
Not a fit if a single touch already explains most conversions, since a first-touch and last-touch split adds workflow overhead a one-field system wouldn't need. It also assumes consistent form capture across channels, inside HubSpot and outside it; the model can only reconstruct a path traveled through tracked forms and drill-down values.
The Challenge
The legacy CRM split attribution across Source, Backup Source and Vendor Marketing Source. Those three fields had no rule for which one won when they disagreed, and no concept of sequence between them.
A contact who converted through three channels left three separate values behind instead of a path. Once the overlap set in, first-touch and last-touch history couldn't be recovered, and marketing had no governed answer to which channel opened or closed a deal.
Our Approach
We set up ten HubSpot workflows that populate Lead Source, First-Touch Lead Source and Last-Touch Lead Source from a documented seven-value taxonomy: Website, Social Media, Paid Search, Paid Social, Sales Generated, Referrals, and Event/Tradeshow.
Each workflow triggers on a qualifying event. That's either a HubSpot or non-HubSpot form submission, including Typeform's trial-registration form, or an original-source drill-down value such as Conversations, Email Integration or Business Card Scanner.
The write carries one gate: First-Touch Lead Source is set only if it is still blank, so a first-touch value set on day one stays put. The trade-off is that attribution can only reflect paths that came through a tracked form or a drill-down value.
Impact
A recoverable attribution path where none existed
Lead Source, First-Touch Lead Source, and Last-Touch Lead Source now sit on the contact record, so a contact's first channel and its last channel each have their own governed property.
A write rule that protects history instead of erasing it
First-Touch Lead Source is written only when it is blank, so a second touch can't overwrite the first-touch record and first touch keeps its meaning.
One governed taxonomy standing in for three ungoverned fields
A seven-value dropdown, Website, Social Media, Paid Search, Paid Social, Sales Generated, Referrals, and Event/Tradeshow, now answers a question the legacy CRM's three source fields never resolved consistently: which channel gets credit, in comparable terms across every contact.
A model that keeps running on every new touch, not a one-time import
Because the workflows trigger on form submissions and original-source drill-down values as they occur, the property model keeps populating itself against new contacts and new touches, rather than requiring a fresh pass every time attribution needs to be reported.
Three hidden contact properties replace the legacy single-field model: Lead Source for the current governed value, First-Touch Lead Source for the earliest recorded channel, Last-Touch Lead Source for the most recent. Each draws from the same seven-value taxonomy: Website, Social Media, Paid Search, Paid Social, Sales Generated, Referrals, Event/Tradeshow.
Ten HubSpot workflows fire on qualifying events, a HubSpot or non-HubSpot form submission such as Typeform's trial-registration form, or an original-source drill-down value such as Conversations, Email Integration, or Business Card Scanner, and write the matching property from that event's channel.
First-Touch Lead Source is written only when blank: a workflow checks its target property before writing and stops if the field already holds a value. That keeps a first-touch property first.
The legacy CRM's Source, Backup Source, and Vendor Marketing Source carried no rule for precedence between them and no multi-touch concept at all. The new model resolves that into three properties with an explicit sequence: first touch, last touch, and a current governed source, with first touch written under a blank-check gate.
The legacy CRM spread attribution across "Source", "Backup Source" and "Vendor Marketing Source". Nothing said which one won, so first-touch and last-touch history couldn't be recovered. Now "First-Touch Lead Source" is written only if it's still blank, which keeps it fixed after its first write.
FAQ
A blank check. The workflow that sets First-Touch Lead Source only writes when that property is empty, so once a first channel is recorded, no later qualifying event can replace it.
A HubSpot or non-HubSpot form submission, including forms built outside HubSpot such as Typeform's trial registration, or an original-source drill-down value such as Conversations, Email Integration, or Business Card Scanner. Any of these can trigger the matching Lead Source, First-Touch, or Last-Touch workflow.
Continue reading