Self-reported attribution: How to design the field, code the answers and reconcile them with software attribution
Self-reported attribution asks buyers how they heard about you. Design the field, code answers and reconcile them with first-touch and last-touch data.
- Document
- Playbook
- Funnel stage
- Whole funnel
- Published
- Written by
- Take the Market Desk
- Edited by
- Lila Odinaev
Self-reported attribution means asking buyers how they first heard about you and recording the source they remember, not the one your tracking software logged. It closes a measurable gap. A SparkToro study reported by Recast found that 100% of visits from Slack, Discord and WhatsApp were marked as direct, and a 12-month Refine Labs study showed a 90% gap between software attribution and self-reported data.
What is self-reported attribution, and what do the numbers show?
Self-reported attribution means asking buyers how they found you and recording their answer. Storylane defines the field as a question that asks buyers, in their own words, how they first heard about you, and that captures the source the buyer remembers rather than the source your tracking software recorded.
The gap it closes is specific. A peer mentions you in a private Slack group. A week later the buyer types your URL or searches your brand name. Your analytics then credit direct traffic or brand search, and the conversation that created the demand never appears in the data.
The published figures
Three sets of numbers describe the size of that gap.
- Dark social marked as direct. Recast reports a SparkToro study of 1,000+ visits that found 100% of all visits from TikTok, Slack, Discord, Mastodon, and WhatsApp, and 75% of visits from Facebook Messenger, were marked as "direct".
- A 90% gap over a year. Recast also cites a Refine Labs 12-month study that showed a 90% measurement gap between software-based attribution and self-reported customer data. The gap applied to channels such as social media, podcasts and word of mouth.
- Before and after correction. SegmentStream published a channel table comparing counts with and without self-reported reattribution (SRA). In that table, Direct / None drops from 35% to 14% as five new awareness channels appear. Google / Organic fell from 532 to 194.
Why the counts shift
SegmentStream describes brand search, organic brand and direct traffic as sponges. These channels absorb credit from every awareness channel that does not produce a click. When buyers name the real source, credit moves out of those buckets and into channels such as podcasts, YouTube and AI chat.
In our reading, this is the core problem for a pipeline owner. Software attribution over-credits demand capture and under-credits the channels that create demand. Recast makes the same argument: relying only on software reports pushes budget toward the channels that capture demand and away from the channels that create it. For the planning side of that split, see demand creation vs. demand capture.
Placement changes how much data you get. SegmentStream reports an 85-95% response rate when the question sits in registration or checkout as an optional field. Post-purchase placement gets 50-60%. The rest of this piece covers how to write the field, how to code the answers and how to reconcile them with software attribution.
Self-reported attribution vs software attribution
Software attribution and self-reported attribution answer two different questions. Refine Labs framed the split as capturing "where people first hear about a vendor or solution, versus where people first interact digitally with a vendor or solution." Neither layer is wrong. They measure different moments.
| Layer | What it records | What it misses | When it is precise (our reading) |
|---|---|---|---|
| Software attribution | Trackable touchpoints such as ad clicks, organic search visits, email opens, and form submissions | Peer conversations, private shares and influence older than the lookback window | When the first touch really was a click, such as a paid ad seen by a buyer who had never heard of you |
| Self-reported attribution | The channel, content, conversation or recommendation the buyer says influenced them | Exact timing, sequence and touches the buyer forgot | When the source was memorable and produced no click, such as a podcast or a colleague |
One practitioner guide summed up the trade. Software attribution "only captures a fraction of the overall picture", while the self-reported layer "captures what software never will." Buyer memory has its own error: buyers may click randomly or inaccurately recall where they first heard about you.
Why long, multi-person cycles shift credit to capture
B2B buying has longer sales funnels and multiple people from the same company involved in the same sales process. Lookback windows make this worse. A brand awareness effort in Q1 might not produce a demo request until Q3, and by then the original touch has expired. In our reading, each extra stakeholder adds another device and another first exposure that software never links to the account. Credit then falls to whoever clicked last.
The attribution mirage
Refine Labs defined the mirage as what happens when a system attributes a success or failure to the wrong cause. Its scenario: a chief marketing officer (CMO) asked peers in a Slack community for advice, searched the names they gave her, and booked four demos. In that scenario, software would have credited SEO for two companies and Paid Ads for the other two. By her own account, for Companies A, B, and C the real source originates from a Slack community thread.
So in that example, three of the four search-credited demos were created somewhere else. In our reading, it is also why channels that do demand capture look stronger than the channels that create demand. See demand creation vs demand capture.
The reconciliation step follows from this. When the two layers disagree, keep both. The hybrid approach records both, the visible touchpoint (the Google search) and the invisible catalyst (the podcast). Store them as two CRM fields, "captured by" and "created by", and report them side by side.
Should the how did you hear about us field be free text or a dropdown?
Two published positions pull in opposite directions, and both have a reporting argument behind them.
The first favors structure. Babelquest's guide to HubSpot forms recommends always using a drop down box with pre-filled options over a free-text field because it makes reporting easy, and says the box should also be a mandatory field. The same guide names the cost. Answers stay coarse, so a buyer picks events or social media and you never learn which event or platform.
The second favors the buyer's own words. Storylane argues that a dropdown lists the channels you already believe in, so buyers settle on the nearest option, while free text lets them name the podcast, the person, or the community you did not know mattered. Storylane also concedes that pure free text is messy to report on and runs a hybrid on most demo forms.
A clean label still hides detail. Growth Method notes that people say "Google" when they mean a paid ad, an organic result, or something they half-remember from LinkedIn.
| Design | What you get | Reporting cost (our reading) | Fits (our reading) |
|---|---|---|---|
| Mandatory dropdown | Channel counts ready on day one | Close to nothing to report, but new channels never surface | Teams that only need channel-level splits |
| Free text only | Named shows, people and communities | Every answer is coded by hand: at 200 submissions a quarter (an example, not a benchmark), that is 200 answers to read | Low-volume, high-value forms |
| Dropdown plus optional text box | Channel data plus detail where the buyer offers it | Only the typed answers need coding, plus a quarterly review of Other | Most demo and contact forms |
How to set up the hybrid
- Add the text box with a seeded placeholder, for example e.g., a coworker mentioned it, saw a LinkedIn post, heard a podcast.
- Decide on mandatory or optional. Storylane's contact sales pattern is optional, placed after the required fields. In our reading, a required box invites throwaway answers. That is the noise this field is meant to remove.
- Review Other every quarter. When the same answer keeps showing up there, promote it to its own option.
It reads only the typed answers to find the named podcast or Slack group. Those named sources are what separate demand creation from demand capture in your reports.
Where the attribution question goes on the form, and whether to make it required
Storylane's view is blunt: "Placement matters more than wording." The reason it gives is that answer quality tracks buyer intent, so the same field gets careful answers on one form and junk on another.
Where to ask
Growth Method lists three common homes for the question: a question on a signup or demo form, a post-purchase survey, or a standard question your sales team asks on every first call.
| Placement | Source guidance | How we use it (our reading) |
|---|---|---|
| Demo request form | Always ask. Intent is highest | Primary capture point |
| Free trial signup | Ask only if the form is already short, otherwise move it into the first in-product welcome step | Welcome step for most products |
| Newsletter or content download | Skip it, because low intent produces low-effort answers | Skip |
| First sales call | Always ask, in the first five minutes | Quality check on the form answer |
Recast suggests asking on lead magnet form fill, which conflicts with Storylane's advice to skip content downloads. We side with intent. A confirmation page is an option we use only as a fallback when the form field stays blank, and it should carry the same wording.
On the call, change the question. Buyers often cannot recall a first exposure, but they can tell you what made them act today. Storylane reports that a rep who asks "What made you decide to reach out today?" gets a sharper answer than the form does.
Required or optional
This is a real trade-off. Recast reports that when you make the field optional, nearly 30% of people do not fill out the form. As an example, not a benchmark: of 200 demo requests, nearly 30% skipping means about 60 records with no answer. Even when people do answer, the data is a sample, not a census that skews toward engaged buyers.
Our rule: make it required on the demo form, where the buyer expects a qualifying step. Keep it optional on contact sales, as covered earlier. Let the first call fill the gaps on both.
A plan for non-answers
Expect answers like "Google," "internet," "not sure," and the classic "I've always known about you." Storylane treats these as almost always a design failure, not proof the method is useless. Code them on purpose:
- Overwrite the code with the call answer and keep the original text in a second field.
A coding taxonomy for self-reported answers you can copy
SegmentStream's before-and-after channel table gives a workable starting list. It adds Word of Mouth, Podcast, TV / Radio, OOH and Influencer as channels that click data never showed, alongside YouTube, TikTok and AI chat. We adapted that list for B2B into two levels. Level 1 is the channel you report on. Level 2 is the detail that makes the answer usable: the podcast name, the event or the community.
| Level 1 channel | Level 2 detail examples | Coding rule (our method) |
|---|---|---|
| Word of mouth | colleague, customer, investor | Any named person wins, even if a place is also named |
| Podcast | show name | Record the show, not the host |
| Events | conference or meetup name | Use only when no person is named |
| AI chat | ChatGPT, Perplexity | Code here even if a search followed |
| YouTube | channel or video | Separate from Social |
| Communities | Slack group, forum, subreddit | Name the specific group |
| Search | unspecified, brand term | Use unspecified when only an engine is named |
| Brand awareness | already knew | Prior familiarity, no named source |
| Unclear | blank, gibberish | Never guess |
SegmentStream treats answers like "Already knew about you," "word of mouth," and "a friend recommended you" as measures of brand strength.
Rules for ambiguous answers
- A person beats a place. SegmentStream's example, "My colleague Sarah mentioned you at a conference", codes to Word of mouth with the detail "colleague, conference."
- When two channels appear, code the first mentioned and put the second in the detail field.
The CRM property design
Build three custom contact properties in your CRM (customer relationship management system). The example below uses HubSpot.
- Raw answer: single-line text, written by the form and never edited. Free-text responses can be re-classified at any time, so this field is your archive.
- Coded channel: a dropdown holding the Level 1 list.
- Coded detail: single-line text for Level 2.
New custom properties contain null values, unless you configured a default value during the set up.
Finalize the dropdown options before you build reports on them. Properties in use on records or in HubSpot tools such as segments or workflows are among those that cannot be edited.
Is self-reported attribution accurate?
Partly. Self-reported attribution captures what the buyer remembers, and memory is a biased sample of the journey. In our reading, the clearest public test is Dreamdata's.
What the Dreamdata test found
Dreamdata ran a test on 100 demo calls booked on its website. The form asked "How did you first hear about Dreamdata?" Once blanks and non-answers were removed, the useful answers came to 49 out of the 100 submissions. In our reading, its tracking, by contrast, joined 77 out of 100 form submissions with existing accounts, so software saw more journeys than the field could describe.
The answers were generally vague and focused on unspecified channels. Dreamdata's explanation was that buyers might write down the strongest or latest memory, which is often not the touch that brought them in. After the test, Dreamdata said it would delete the form fill option.
LeadJourney describes the same mechanism: memory keeps the most recent or most memorable touch, not the ad that started the journey weeks earlier. As a result, the channels that start journeys are systematically undercounted.
The limits, and what each one means for reporting
| Limit | What goes missing | How to read the field (our reading) |
|---|---|---|
| Recall bias | Early touches. Answers over-index on the last memorable touchpoint | Treat the answer as the trigger, not the origin |
| No cost data | Spend per channel. LeadJourney lists what a lead from each channel costs, based on real ad spend, among the questions a form field cannot answer | Pull cost from ad platforms and join it yourself |
| No denominator | Reach. You cannot calculate reach or a conversion rate from the field | Use it for mix, not for efficiency |
| No account-level multi-touch view | Colleagues' touches. The field ignores touches by other stakeholders in the account | Compare against account journeys, not single leads |
A worked example of the sample size
Here is an example, not a benchmark. If 200 demo requests produced useful answers at Dreamdata's rate of 49 per 100 submissions, you would have 98 codable answers. That is enough to see whether word of mouth's share of answers rises or falls quarter to quarter. It is not enough to trust any single lead's answer as its source.
Read it as a trend
We think the limits point to one rule: read the field as a trend, not as the answer for each lead. Track the share of each coded channel by month and look for movement. When one lead's answer conflicts with its tracked journey, keep both on the record and do not overwrite either one. Budget moves should rest on the trend, checked against cost and against incrementality tests where you can run them.
The weekly reconciliation table against first-touch and last-touch
The weekly table turns two attribution layers into one view. Each row is a coded self-reported channel from your taxonomy. The columns are what software recorded as first touch and last touch, split into leads that agree and leads that conflict.
The logic follows the hybrid model a88lab describes. When the two sources agree, "the software says organic search, the buyer confirms they found you through a Google search, attribution is straightforward." When they conflict, the model "doesn't pick one or discard the other. It records both", the visible touch and the stated catalyst.
The template
Copy this into a sheet. Each cell holds a count of leads for the week.
| Coded self-report | Leads | First-touch agrees | First-touch conflicts (top software value) | Last-touch agrees | Last-touch conflicts (top software value) | Hybrid share (our method) |
|---|---|---|---|---|---|---|
| Word of mouth | n | n | n (direct) | n | n (direct) | conflicts ÷ leads |
| Podcast | n | n | n (direct) | n | n (organic search) | conflicts ÷ leads |
| Community | n | n | n (direct) | n | n (direct) | conflicts ÷ leads |
| Paid search | n | n | n | n | n | conflicts ÷ leads |
| Organic search | n | n | n | n | n | conflicts ÷ leads |
| Unclear / uncoded | n | not scored | not scored | not scored | not scored | not scored |
For channels software cannot see, such as word of mouth or podcast, "agrees" will rarely fill. That is expected. The conflict column, with the software value it lost to, is where the reassignment shows up.
The weekly routine
- Export the week's demo requests with the coded self-report, software first touch and software last touch.
- Drop uncoded answers into the last row and keep them out of the rates.
- Count each row against both columns.
- Compute two numbers per row. Match rate is agreeing leads divided by leads in that row. Hybrid share is conflicting leads divided by leads in that row.
- Read the conflict values. A row where most conflicts sit on "direct" is a channel your software is crediting to nobody.
A worked example
Take 200 demo requests in a week as an example input, not a benchmark. Suppose the word of mouth, podcast and community rows together hold D leads that software recorded as direct. Reassign those D leads to their stated channel in a hybrid column, keeping the direct value alongside it. The overall match rate for first touch is the sum of first-touch agrees divided by the scored leads, and the share of the week reassigned out of direct is D divided by 200.
Run it weekly so the conflicts stay small enough to read by hand. a88lab notes that some setups run on "a CRM, a custom form field, and a monthly spreadsheet review"; the weekly cadence is our choice. Watch the trend across weeks too. Software windows are short: buying cycles "don't respect your attribution tool's default 14- or 30-day window," so first-touch conflicts on long deals tend to grow, in our reading. Over time, the conflict patterns reveal "exactly where your software-only attribution is systematically wrong." Feed the hybrid shares into the demand gen budget allocator before you cut a channel that only shows up as direct.
Steps, owners, metrics and timeline for reporting the hybrid view
The playbook runs in five steps. Each one has a single owner, a written output and a check that shows the step worked before the next one starts.
| Step | Owner | Output | Check that it worked |
|---|---|---|---|
| 1. Field launch | Marketing ops | Free-text field live on every high-intent form, synced to a CRM property | Test submissions land in the property, and blanks are visible as blanks |
| 2. Taxonomy | Demand gen | Coding sheet with channel codes and an unknown code | Two people code the same sample and agree on most rows |
| 3. Weekly coding | Marketing ops, with sales development | Every new answer coded; vague ones confirmed on the first call | No uncoded rows older than seven days |
| 4. Monthly hybrid report | Demand gen | Self-reported pipeline by channel beside the software view | Every opportunity in the month carries both values |
| 5. Quarterly budget review | Demand gen lead | Channel budget changes with the evidence behind each | Each change cites both data layers |
The model for step 1 is a test Refine Labs ran for 12 months. It added a mandatory free-text field to its key declared intent conversion form, and the answers were reviewed in parallel with software attribution data from Hubspot.
Step 3 gives sales development a real job. Dreamdata suggests verifying responses through follow-up questions or secondary sources. In practice, a rep asks one question on the discovery call when the form answer was coded "unknown" and updates the code.
The four metrics and their formulas
- Response rate: submissions with a non-blank answer, divided by all submissions.
- Uncodable share: answers coded "unknown", divided by answers received.
- Match rate: submissions where the coded channel equals the software first-touch channel, divided by submissions that carry both.
- Self-reported pipeline by channel: sum of opportunity amount, grouped by coded channel.
Take 200 demo submissions in a month as an example, not a benchmark. With that volume, every 2 answers coded "unknown" add one point to uncodable share, since 2 of 200 is 1%. That makes the weekly check easy to read without a dashboard.
The 90-day timeline
Days 1 to 30 cover steps 1 and 2. Days 31 to 60 add weekly coding and the first monthly report. The a88lab guide describes the entry version as a plan to pull self-reported data into a monthly report alongside your standard attribution dashboard.
Days 61 to 90 end with the first quarterly budget review. Hold budget cuts to channels that only look weak in software until a second quarter of data arrives, because a brand awareness effort in Q1 might not produce a demo request until Q3. We think a single quarter is too short to move money on match rate alone. Run the proposed shifts through the demand gen budget allocator and check the effect on pipeline velocity before they are approved.
What this page does not cover
This page does not cover how to design incrementality tests, how to join ad platform cost data to coded channels, or how to build a full multi-touch attribution model. It uses HubSpot only as an example of CRM property setup and does not evaluate attribution tools. Nothing here is financial or legal advice, and budget decisions should rest on your own data and review.
Related on Take the Market: ABM playbook for one-to-few programs: the account list, the plays, the metrics and a 90-day plan; Pipeline coverage calculator: the ratio you need from your own win rate and slippage; Demand generation calculator: reverse funnel math from a revenue target to visitors, leads, MQLs, SQLs and opportuniti.
Questions
- What is self-reported attribution?
- Self-reported attribution means asking buyers how they found you and recording their answer, often in their own words. It captures the source the buyer remembers rather than the source your tracking software recorded. A peer mention in a private Slack group, for example, later shows up in analytics as direct traffic or brand search, and the self-reported answer is where that conversation appears.
- Should how did you hear about us be a dropdown or free text?
- Babelquest recommends a mandatory dropdown because it makes reporting easy, though answers stay coarse. Storylane argues that a dropdown lists only the channels you already believe in, while free text lets buyers name the podcast, person or community. Storylane also concedes that pure free text is messy to report on. In our reading, a dropdown plus an optional text box fits most demo and contact forms, with a quarterly review of the Other answers.
- How do you categorize how did you hear about us answers?
- Use a two-level taxonomy. Level 1 is the reporting channel, such as word of mouth, podcast, events, AI chat, YouTube, communities, search, brand awareness and unclear. Level 2 holds the detail, such as the show or group name. Apply fixed rules: a named person beats a place, the first channel mentioned is coded and the second goes in the detail field, and unclear answers are never guessed.
- How do you combine self-reported attribution with first-touch and last-touch attribution?
- Build a weekly reconciliation table with one row per coded self-reported channel and columns showing whether software first touch and last touch agree or conflict. Match rate is agreeing leads divided by leads in the row, and hybrid share is conflicting leads divided by leads in the row. When the two layers disagree, keep both values on the record, for example as "captured by" and "created by" fields in your customer relationship management (CRM) system.
- Is self-reported attribution accurate?
- Partly. In Dreamdata's test of 100 demo calls, useful answers came to 49 of the 100 submissions, while its tracking joined 77 of 100 submissions with existing accounts. Buyers tend to report the latest or most memorable touch, so the channels that start journeys are undercounted. Read the field as a trend across months, not as the definitive source for each lead.
- Where should the how did you hear about us question go on a demo form?
- Storylane's guidance is to always ask on the demo request form, where buyer intent is highest, and to ask again in the first five minutes of the first sales call. SegmentStream reports an 85 to 95% response rate when the question sits in registration or checkout as an optional field. Our rule is to make it required on the demo form and keep it optional, placed after the required fields, on contact sales forms.
Sources
- How Did You Hear About Us? Options and Survey Design, storylane.io, 2026-09-30.
- ‘How did you hear about us?’ survey and the limitations of current measurement techniques - Recast, Recast, 2023-05-31.
- Self-Reported Reattribution for Dark Funnel Channels, SegmentStream.
- The Attribution Mirage, refinelabs.com.
- Hybrid Attribution Model for B2B SaaS: How to Measure What Your Software Can't Track, a88lab.com, 2023-05-12.
- B2B Marketing Attribution Guide: How to Master It in 2024 - Analytics Platform - Matomo, Analytics Platform - Matomo, 2024-05-21.
- HubSpot Marketing: How to use self-reported attribution in your forms, babelquest.co.uk.
- What Is Self-Reported Attribution? Definition & Guide | Growth Method, growthmethod.com, 2025-02-20.
- Create and edit properties, knowledge.hubspot.com, 2019-11-21.
- We tested self-reported attribution. Here’s what we learned., Dreamdata, Dreamdata, 2022-03-14.
- Self-Reported Attribution, Measured, LeadJourney.
- Self-reported attribution | Dreamdata, Dreamdata.