Self-reported attribution asks buyers how they found you and stores the answer on the deal. Here's the exact setup in HubSpot and Salesforce, the benchmarks for a clean source field, and how to report it next to what your tracking still sees.
The LinkedIn post that started this one: consent didn't break attribution, depending on every click did.
Your source report shows more Direct every quarter because the system can only credit what it saw, and it now sees less.
Until a visitor accepts, analytics and ad cookies don't fire. The ad click and the comparison-page read are never recorded. When they accept later and fill a form, the session lands as Direct or branded search. etracker's 2025 study puts average visit-data loss with a compliant banner at about 60%.
↳ fixing this by bending consent rules is a legal problem, not an ops onePodcasts, Slack groups, peer referrals and posts read in-feed send buyers who type your URL. SparkToro found visits from TikTok, Slack, Discord and WhatsApp were recorded as direct 100% of the time.
6sense's 2025 Buyer Experience Report found 94% of buying groups had ranked their preferred vendors before first contact. The first tracked touch is often the last step of the decision.
When "How did you hear about us?" is optional, about 30% skip it. When it's free text with no mapping, nobody can report on it. Either way the channel you most need to see stays blank.
Reports built on anonymous sessions fall apart under consent. Campaign influence only holds up when touches are tied to known contacts on opportunities.
Aim for a required, mapped source on 95% of high-intent conversions and under 20% of new pipeline sitting in Direct or Unknown.
| Metric | Weak | Acceptable | Strong | Source |
|---|---|---|---|---|
| Completion of the source question on high-intent forms | Under 70% (optional field) | 85 to 95% | 95%+ (required) | Dreamdata via Recast, 2023 (about 30% skip when optional); ranges JayOh experience |
| Answers mapped to a category | Under 60% | 80 to 90% | 95%+ | JayOh experience |
| New pipeline where software says Direct or Unknown | Over 40% | 20 to 40% | Under 20% | JayOh experience |
| Opportunities with contact roles (Salesforce) | Under 50% | 70 to 85% | 90%+ | JayOh experience; contact roles drive Campaign Influence (Salesforce Ben, 2025) |
| Visit data lost with a compliant consent banner | About 60% on average | etracker Cookie Consent Benchmark Study, 2025 | ||
| Gap between self-reported and software attribution on dark social | 90%. Podcasts: 53% of closed-won revenue self-reported, 0% in software | Refine Labs, 2023 | ||
| Dark-social app visits recorded as Direct | 100% for TikTok, Slack, Discord, WhatsApp; 75% for Facebook Messenger | SparkToro, cited by Recast, 2023 | ||
| Buying groups with a ranked vendor shortlist before first contact | 94% | 6sense Buyer Experience Report, 2025 | ||
Sources: Refine Labs Hybrid Attribution study (2023), Recast (2023), etracker (2025), 6sense (2025), Salesforce Ben (2025). Weak, acceptable and strong ranges without a third-party source come from JayOh audits of B2B SaaS CRMs and are labeled as such.
Two properties, one required question, a mapping workflow, and a report that puts both views on the same deals.
Already running multi-touch? Keep it. This setup sits beside it. If you're starting from scratch, read our complete guide to attribution first for the model choices, then come back here for the self-reported half.
What: Add a single required question, "How did you hear about us?", to high-intent forms only: demo request, contact sales, pricing, and trial signup if you run a product-led motion.
Why: The answer matters where pipeline starts. Asking on newsletter or content forms adds noise and costs conversions. Recast notes about 30% of people skip the field when it is optional, so required is the default.
What: One free-text property holds exactly what the buyer typed. A second dropdown holds the category you report on.
Why: You will re-map answers as the taxonomy matures. If you overwrite the raw text, you lose the ability to fix it later.
self_reported_source_raw (multi-line text) and self_reported_source (dropdown select). Add the same dropdown on Deals.Self_Reported_Source_Raw__c (Long Text Area) and Self_Reported_Source__c (Picklist) on Lead and Contact, plus the picklist on Opportunity. Map both in Lead field mapping.What: Run the field as free text for the first 30 to 50 high-intent submissions. Then write 10 to 12 categories based on what buyers actually said.
Why: A dropdown with "Google" at the top gets "Google". Free text keeps the answer unprompted, and the first batch tells you which channels deserve their own bucket. Add "AI assistant" now: buyers increasingly name ChatGPT, Claude or Perplexity.
What: Add hidden fields for utm_source, utm_medium, utm_campaign and landing page, and store consent status as its own property.
Why: Software source still answers "what did they engage with", and reports need to know which records had tracking on. etracker's 2025 benchmark found compliant banners lose about 60% of visit data on average, so the consent property tells you which software rows to trust.
consent_status dropdown fed by your consent tool.What: Use keyword branches to map raw answers into the dropdown. Anything unmatched goes to a review queue instead of "Other".
Why: Manual tagging stops after month two. A rules engine plus a weekly review keeps the mapped rate above 95%.
What: Copy the mapped category from the buyer onto the deal or opportunity when it is created, and never update it after.
Why: Budget questions are asked in pipeline and revenue, not in contacts. A frozen deal-level value is what makes quarter-over-quarter reporting honest.
What: Tie campaign touches to deals so you can see what engaged the buying group after they found you.
Why: This is the software half of the hybrid view. Session-based reports break under consent; opportunity-level influence uses known contacts.
What: One matrix: self-reported source down the side, software original source across the top, created pipeline and closed-won in the cells.
Why: This is where the gap shows up. Refine Labs found a 90% measurement gap on dark social, with podcasts credited for 53% of closed-won revenue by buyers and 0% by software.
What: Check completion, mapped rate and Direct share every month. Before planning, reconcile ad-platform conversions to closed-won in the CRM.
Why: Platform numbers move when measurement changes. Meta turned on "Measure conversions on customer devices" by default on November 12, 2026 (PPC Land), so reported conversions can rise without a single extra buyer.
Most failures aren't technical. They're a leading dropdown, an optional field, or a report built on contacts instead of revenue.
Once both views are in place, put them on the leadership dashboard instead of building another report. Our post on revenue dashboards leadership actually uses covers how to keep it to the numbers people decide on.
See how much of your new revenue software can explain today, and how much a required source question adds.
Enter your numbers. Coverage = the share of new revenue with a usable source. The hybrid figure assumes the two views fail independently.
Grades use the Direct or Unknown benchmark above: over 40% weak, 20 to 40% acceptable, under 20% strong. Want the multi-touch math too? Try the marketing attribution calculator.
Hand this to whoever owns your forms and CRM. It's the whole build on one page.
SELF-REPORTED ATTRIBUTION SETUP SPEC (JayOh) 1. QUESTION Label: How did you hear about us? Type: free text (multi-line), required Forms: demo request, contact sales, pricing, trial signup. Not on content or newsletter forms. 2. PROPERTIES HubSpot contact: self_reported_source_raw (multi-line text), self_reported_source (dropdown) HubSpot deal: self_reported_source (dropdown, copied from primary contact at deal create) Salesforce Lead + Contact: Self_Reported_Source_Raw__c (Long Text Area), Self_Reported_Source__c (Picklist) Salesforce Opportunity: Self_Reported_Source__c (Picklist, set by flow) Lead field mapping: Raw and Picklist mapped Lead to Contact on conversion 3. CATEGORIES (max 12) Peer or colleague referral | Podcast | LinkedIn | Community or Slack group Search engine | AI assistant | Event or webinar | Review site Partner or marketplace | Newsletter or publication | Outbound | Other or unclear 4. MAPPING RULES (contains any of) Podcast: podcast, episode, show, listened, spotify, apple podcasts AI assistant: chatgpt, gpt, claude, perplexity, gemini, copilot, ai Peer referral: friend, colleague, coworker, boss, referred, referral, recommended by LinkedIn: linkedin, linked in, li post Community: slack, community, discord, group, forum, reddit Search engine: google, search, bing, googled Review site: g2, capterra, trustradius, review Event: conference, event, webinar, booth, summit, meetup No match: set Other or unclear and add to the Needs review list 5. CAPTURE (where consent allows) Hidden fields: utm_source, utm_medium, utm_campaign, landing page, referrer Contact property: consent_status (accepted, declined, not shown) 6. REPORTS A. Created pipeline by self-reported source (last 4 quarters) B. Closed-won amount by self-reported source C. Hybrid matrix: self-reported source (rows) x software original source (columns) D. Data health: completion rate, mapped rate, Direct or Unknown share 7. OWNERSHIP Taxonomy owner: (name) Monthly review: re-map Other, retire unused categories, check benchmarks Benchmarks: completion 95%+, mapped 95%+, Direct or Unknown pipeline under 20%
self-reported-attribution-classifierPaste or upload an export of "How did you hear about us?" answers and Claude does the mapping work from this post.
Claude web or desktop:
Claude Code: save it as ~/.claude/skills/self-reported-attribution-classifier/SKILL.md, or under .claude/skills/ in your repo.
Skills are available on Claude Pro, Max, Team and Enterprise plans. New to skills? Read how to use skills in Claude.
--- name: self-reported-attribution-classifier description: Classifies free-text "How did you hear about us?" answers into a clean self-reported source taxonomy, flags answers that need a human, and builds a hybrid attribution table that compares what buyers said with what the CRM tracked. Use when someone pastes or uploads an export of form responses, contacts, leads or deals with a self-reported source column, or asks to clean up, map, categorize or report on self-reported attribution. --- # Self-Reported Attribution Classifier You turn raw "How did you hear about us?" answers into categories a CRM can report on, then compare them with software-tracked source. This follows the JayOh method in "How to Set Up Self-Reported Attribution in HubSpot and Salesforce". ## Inputs to ask for (only if missing) 1. The export: one row per contact, lead or deal. Needed columns: record ID, the raw self-reported answer. Helpful: software original source (for example HubSpot Original Source or Salesforce Lead Source), created date, pipeline amount, deal stage. 2. The category list the team already uses, if any. If none, use the default taxonomy below. ## Default taxonomy (max 12 categories) - Peer or colleague referral - Podcast - LinkedIn (posts, people, ads) - Community or Slack group - Search engine - AI assistant (ChatGPT, Claude, Perplexity, Gemini, Copilot) - Event, conference or webinar - Review site (G2, Capterra, TrustRadius) - Partner, agency or integration marketplace - Newsletter or publication - Outbound (email, call or message from our team) - Other or unclear ## Steps 1. Read every row. Keep the raw answer exactly as written. Never overwrite it. 2. Assign one primary category per answer. If an answer names two channels, pick the one the buyer names as where they first heard and list the second as a secondary mention. 3. Match on meaning, not just keywords. "my old boss uses you" is a peer referral. "saw Joe on a show" is a podcast. "chatgpt recommended" is an AI assistant. 4. Mark an answer as Needs review when it is blank, a single character, a company name with no channel, a joke, or fits two categories equally. Never guess a channel for these. 5. Write keyword rules that would catch at least 80 percent of the answers automatically, one line per category, as "contains any of" lists the team can paste into a HubSpot workflow branch or a Salesforce flow Decision element. 6. If a software source column exists, build the hybrid table: self-reported category as rows, software source as columns, counts in each cell, plus pipeline amount if provided. 7. Score the data against these benchmarks: - Completion on high-intent forms: under 70 percent weak, 85 to 95 percent acceptable, 95 percent or more strong. - Answers mapped to a category: under 60 percent weak, 80 to 90 percent acceptable, 95 percent or more strong. - Pipeline where software says Direct or Unknown: over 40 percent weak, 20 to 40 percent acceptable, under 20 percent strong. ## Output format (always this order) 1. Summary: rows read, completion rate, mapped rate, Needs review count, and the three benchmark grades. 2. Category table: category, count, share of rows, pipeline amount if given, two example raw answers quoted exactly. 3. Hybrid table (only if a software source column exists), then three findings, each citing the cells it comes from. Example finding shape: "Software credits 61 of these deals to Direct. Buyers named a podcast in 22 of them." 4. Needs review list: record ID, raw answer quoted, why it needs a person. 5. Keyword rules block, one line per category. 6. Next steps: at most five, each tied to a number above. ## Guardrails - Quote raw answers as evidence. Never paraphrase them in the tables. - Never invent numbers, channels, amounts or rows. If a column is missing, say which analysis you skipped and why. - Do not treat either view as the truth. Self-reported answers carry recall bias and software carries click bias. Say which question each one answers: buyers tell you how they found you, software tells you what they clicked. - Do not include personal data such as emails or names in the output unless the user asks for it. - If fewer than 30 answers are provided, say the sample is too small to set budget from and present the result as directional only. Built by JayOh (jayoh.io). Full method, benchmarks and a coverage calculator: https://jayoh.io/self-reported-attribution/
Short answers to what teams ask when they set this up.
Self-reported attribution is asking buyers how they found you, usually with a required 'How did you hear about us?' field on high-intent forms, and storing the answer on the contact and the deal. It captures channels that leave no click, like podcasts, communities, peer referrals and AI assistants.
Start with free text. A dropdown leads the answer and over-credits whatever sits at the top of the list. Collect 30 to 50 answers, build categories from what buyers actually wrote, then map the raw text to a dropdown property with a workflow or flow, and keep the raw answer.
It is accurate about how buyers remember finding you, and it carries recall bias toward recent or memorable touches. Software attribution is accurate about clicks and blind to anything without one. Neither is the truth on its own, which is why the hybrid view reports both side by side.
Hybrid attribution combines self-reported source with software-tracked source on the same records. Self-reported answers how the buyer found you. Software answers what they engaged with before converting. Reporting both on pipeline and closed-won shows where each view is blind.
When a visitor declines or ignores the banner, the tracking code does not record their earlier sessions. If they later accept and submit a form, HubSpot only sees the converting session, which often has no referrer, so Original Source lands on Direct Traffic or the source of that last visit.
Only high-intent forms: demo requests, contact sales, pricing or consultation requests, and free-trial signups for product-led motions. Skip newsletter and content forms. The answer matters most where pipeline starts, and extra questions on low-intent forms cost conversions.
Store the raw answer and a mapped picklist on the Lead, map both to the Contact on conversion, and copy the picklist to the Opportunity with a record-triggered flow. Then report opportunities and closed-won amount grouped by the picklist, next to Lead Source or Campaign Influence.
Every quarter we see teams spend weeks trying to rebuild click-level attribution that consent was designed to stop. It never closes the gap, and it puts marketing ops at odds with legal. The teams that get clarity do something simpler: they ask the buyer, store the answer on the deal, and report it beside what the system tracked.
That hybrid view is also what holds up when someone outside the team looks hard at the numbers. We've seen attribution data fall apart in diligence for exactly this reason. If you want the self-reported half built, mapped and wired into your pipeline reporting, that's a sprint, not a project.
Further reading: Refine Labs hybrid attribution study, Recast on survey limits, HubSpot hidden form fields, Salesforce Campaign Influence guide.
We engineer growth systems. JayOh builds the RevOps architecture, GTM execution and data infrastructure that turn messy revenue operations into predictable pipeline for B2B SaaS and PE-backed teams.