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. The attribution fields are written only when they are still blank, and whenever one is written the last-touch field is updated automatically as a result.
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. The attribution fields are written only when they are still blank, and each write updates the last-touch field automatically.
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: the attribution fields are set only if they are still blank. A first-touch field set on day one stays put. When an attribution field is written, the last-touch field is updated automatically as a consequence of that write, so it stays current. 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 hold three distinct values a single field never could, so a contact's first channel and its most recent channel are both visible on the record rather than overwritten into one.
A write rule that protects history instead of erasing it
The attribution fields are written only when they are blank, so a second touch can't overwrite the first-touch record. When a field is written, the last-touch field is updated automatically as a consequence, so a later touch isn't lost behind an earlier one. That pairing is what makes first and last mean something, instead of both settling into whatever event fired most recently.
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.
The attribution fields are written only when blank: a workflow checks its target property before writing and stops if the field already holds a value. When an attribution field is written, the last-touch field is updated automatically as a consequence of that write. That is what keeps a first-touch property first and a last-touch property current, rather than both landing on whatever event fired most recently.
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 the attribution fields written under a blank-check gate and the last-touch field updated as a consequence of each write.
A HubSpot or non-HubSpot form submission, such as a Typeform trial registration, or an original-source drill-down value such as Conversations or Email Integration, triggers the matching one of ten workflows. Each attribution field is written only when it is blank, which keeps First-Touch Lead Source fixed after its first write. Whenever an attribution field is written, Last-Touch Lead Source is updated automatically as a consequence, and Lead Source holds the current governed value. The legacy Source, Backup Source and Vendor Marketing Source fields feed none of this.
FAQ
A blank check on every workflow. 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. When an attribution field is written, the last-touch field is updated automatically as a consequence of that write, so it stays current.
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