Generally, when a marketing team comes to us frustrated with their attribution numbers, they show us a dashboard where two charts on the same page disagree. Paid search is the top source on one card and the third source on another. The team has spent the morning arguing about which chart is right. The chart is not the problem. The single lead source property feeding both charts is the problem, and report-level fiddling will not fix it. The fix lives one layer down, in the property architecture on the contact record.
Why this matters now
B2B buyer journeys keep getting longer and noisier, paid touches stack on top of organic, chat overlaps with form fills, and a single contact accumulates dozens of interactions before the SDR ever picks up. Last-click attribution was the easy answer, but last-click "misrepresents how today's complex combination of marketing efforts influences purchasing outcomes," as the Harvard Business Review put it in its piece on why marketing metrics don't add up. (hbr.org) The instinct is to fix the report. The actual fix is to stop letting one property carry the weight of three different questions.
Why a single lead source property always loses
A single lead source property is asked, every day, to answer at least three different questions, which channel introduced this contact to us; which channel last touched them before today's activity; and which channel was active at the moment they raised their hand. Those are three jobs. A single property can only hold one value at a time, so it ends up holding whichever signal won the most recent race condition, usually the last form fill or the last paid click overwriting whatever was there.
So for example, a contact discovers you through an organic blog post, comes back two weeks later via a paid social ad, and finally converts on a webinar form. The single lead source property reads "webinar", or "paid social," depending on which workflow fired last. The content team thinks the blog is dead. The paid team takes credit. Neither team is right, because the property never had room to tell the whole story.
First-touch, last-touch, converting-touch, three properties, three jobs
The fix is to stop treating lead source as one property and start treating it as three. Each one has a clearly defined job, a clearly defined write rule, and a clearly defined consumer.
First-touch, write-once, set on contact create
The first-touch property answers: which channel introduced this contact to us. It is set at the moment the contact record is created and is never overwritten: not by a workflow, not by an integration, not by a form. The write rule is hard, settable only on create, locked thereafter. This is the field the content and SEO teams should look at, because it is the only one that survives the contact's full lifecycle without paid or last-mile activity rewriting history.
Last-touch, last non-direct interaction, updatable
The last-touch property answers: which channel last touched this contact before whatever they are doing right now. It updates whenever a non-direct interaction lands, a paid click, a campaign tag, a referral. Direct traffic does not overwrite it (otherwise every typed-in URL erases the actual marketing signal). This is the field the paid team should look at, because it reflects whether the budget is still doing its job late in the cycle.
Converting-touch, locked at the moment of conversion
The converting-touch property answers: which channel was active at the moment this contact actually converted, submitted the demo form, hit MQL, raised a hand. It is set at the conversion event and, like first-touch, never overwritten afterwards. This is the field that sales handoff and SDR routing should look at, because it captures the channel of intent rather than the channel of awareness or the channel of last campaign exposure.
The write rules, which property each system can touch
Three properties only work if the write rules are airtight, enforced across forms, workflows, and integration sync. Forms set first-touch on create and converting-touch on submit, full stop, they never write last-touch. Workflows update last-touch when a campaign attribution rule fires, but are forbidden from touching first-touch or converting-touch after they are set. Native ad integrations and reverse-ETL feeds get write access to last-touch only. If a property's write surface is not constrained, the architecture collapses back into the one-property mess within a quarter.
A practical detail: lock the first-touch and converting-touch fields using "set once" logic in workflows that check whether the field is empty before writing. The platform does not enforce write-once natively, so the discipline lives in the workflow layer. This needs to be taken with a grain of salt, no enforcement is perfect, especially when somebody imports a CSV, but the pattern holds if the workflows are named consistently and reviewed quarterly.
The reporting layer, pick one property per report, never average them
Three properties means three reports, not one report that averages across them. The content attribution dashboard reads first-touch only. The paid efficiency dashboard reads last-touch only. The MQL-to-SQL handoff dashboard reads converting-touch only. Each report names the field in its title and in the chart subtitle, so anyone walking up to it understands which question it is answering. The temptation to build a single "lead source" report that switches between the three fields on a dropdown is real, and it should be resisted, every team that uses the dropdown will forget which one is currently selected and argue about the result.
One sibling problem worth flagging, once a contact is known, UTMs on subsequent sessions stop being captured by default tracking, a separate failure mode from the one this post is about. The property architecture here assumes the inputs are clean. If UTM stitching is broken upstream, the three-property model faithfully records three flavors of bad data.
Pattern from the field
A B2B SaaS marketing team in DACH at the late-Series-A stage came to us with exactly this dashboard contradiction. Their single "original source" field was being overwritten by a paid social workflow every time a re-engaged contact clicked an ad, so their content team's monthly report kept collapsing as contacts originally sourced from the blog got re-attributed to paid months later. The CFO asked, reasonably, why the content budget existed. We split the property in three over a two-week build, first-touch as a new field backfilled from the historical record-create snapshot, last-touch wired to the existing paid workflow with the write rule narrowed, converting-touch set on form submit and locked. Within a month the content team's contribution stopped disappearing, the paid team kept its last-touch credit where the budget actually re-engaged a contact, and sales handoff had a stable channel of intent to route on. None of the three numbers moved much; it was the same activity, finally separated.
Resolution, a playbook for installing the three-property model
- Audit the existing lead source property. List every workflow, integration, and form that writes to it. You are looking for the race conditions, the places where two systems are overwriting each other. This list usually surprises the team.
- Create three new properties. One first-touch channel field, one last-touch channel field, one converting-touch channel field. Do not repurpose the existing lead source field on the first pass, leave it in place so historical reports keep functioning.
- Define the picklist values once, shared across all three. Same values, same casing, same order. Reports collapse the moment one field has "paid social" and another has "paid - social."
- Wire the write rules. Forms set first-touch (only if empty) and converting-touch on submit. Paid integrations write last-touch only. Every workflow touching these fields gets a name prefix that flags which property it owns.
- Backfill first-touch from record-create timestamps. For existing contacts, use the original-source data the platform already retains where it survives, and accept a known-unknown for the rest. Document the cutoff date.
- Rebuild reports against the new fields. One report per property. Title each one with the property name. Retire the old single-source report or mark it deprecated so nobody trusts it.
- Review the workflow inventory quarterly. The architecture only stays clean if somebody owns the review. Add it to the marketing ops standing agenda.
Where Checkpoint comes in
Property architecture is the unglamorous work behind every HubSpot dashboard anyone actually trusts. It is most of what we do on the marketing operations side at Checkpoint. If your lead source dashboard contradicts itself, or if content, paid, and sales have stopped agreeing about what "source" means, the fix is almost always one layer below the dashboard. Talk to us before the next quarterly review forces another argument about which chart is right.
Sources
- Lindsay. "Why Your Marketing Metrics Don't Add Up." Harvard Business Review, September 9, 2014. hbr.org
- Hossain. "A Simple Framework for Unlocking Full-Funnel Marketing Attribution Intelligence." OpenView Labs. openviewpartners.com
