RevOps

Attribution when half your traffic arrives as direct

Posted 03 Nov, 2026 by

Direct is the bucket HubSpot uses when it cannot read a referrer, and in B2B it is usually the largest row on your sources report. You will never get it to zero. Tag every link you own, add a self-reported source field to your forms, and report the remainder as unattributed rather than spreading it across channels. That combination is enough to run a budget on.

Direct traffic in HubSpot is any session where the browser sent no referrer and the URL carried no tracking parameters, so HubSpot records the visit with no source to attach to it. Some of that is recoverable in an afternoon. The rest stays dark, and the useful question is how small you can make it before you stop.

 

What does direct traffic mean in HubSpot?

HubSpot stores the answer on the contact, in two properties that behave differently. Original source, stored as hs_analytics_source is stamped when the contact is created and never overwrites itself. Latest source, stored as hs_latest_source, updates on each new session.

Both carry two drill-down properties, hs_analytics_source_data_1 and hs_analytics_source_data_2, which hold the campaign and the specific link. When a session arrives with no referrer, all three fields for that session come back empty and the source resolves to Direct traffic. Deals inherit source from the associated contact, so a deal showing direct usually means the contact record was created in a session HubSpot could not read.

That matters for how you fix it. Original source is a one-time stamp, so tagging a link today improves the record of contacts created tomorrow and does nothing for the ones already in your database.

 

Why is direct traffic so high in B2B?

Because most of the ways a B2B buyer reaches your site strip the referrer, and because you are probably sending some of your own traffic untagged. One of those is yours to fix today.

The referrer is lost when someone clicks a link in a Slack message, a WhatsApp group, a podcast show note opened in an app, a LinkedIn DM rather than a feed post, a PDF, or a calendar invite. It is lost when a secure page links to a non-secure one. It is lost when the visitor declines cookies, because HubSpot sets no tracking cookie and the session has nothing to attach a source to. And it is lost when someone types your domain in because they heard about you on a call, at an event, or from a colleague who used you at their last company.

Then there is the self-inflicted share. Sales sequences with untagged links. A newsletter sent from a tool that is not HubSpot. Partner referral links with no UTM. A product with an in-app link back to the marketing site. Traffic moving between your app subdomain and your marketing site when the subdomain has not been added to advanced tracking, which HubSpot then reads as a new session from nowhere. Every one of those is fixable this week.

 

What can HubSpot recover from direct?

The self-inflicted share, plus whatever you can capture from the buyer directly. The remainder is dark social and offline conversation, and it stays dark.

Start with the tracking URL builder. Tag every link your business sends, including sequences, marketing email, partner links, in-app links, social bios, podcast show notes and event QR codes. Standardise your utm_source and utm_medium values in a shared sheet before anyone builds a link, so Paid Social, paid-social and LinkedIn Ads do not become three separate rows describing the same spend. Once tagged, those visits move out of direct into Email, Paid or Offline sources with the drill-down fields populated.

Next, add every subdomain you own to the domains list under advanced tracking in your tracking code settings, so a visitor moving from your product to your website stays in one session.

Then look at consent. If your banner is set to opt-in, which it will be for most teams operating under GDPR, HubSpot respects the visitor’s choice and sets no cookie until they accept. Report your consent acceptance rate next to your source report, because a 60 percent acceptance rate means your source data describes roughly 60 percent of visitors. Decide as a business what the banner should do within the law you operate under, then accept the consequence for attribution either way. Knowing the size of the gap is what turns a source report into reporting your team trusts.

 

Should you ask people how they heard about you?

Yes. A single dropdown on your demo and contact forms, asking how someone heard about you, captures exactly what the tracking cannot.

Build it as a custom contact property with a short list of defined options and an Other free-text box. Keep the list under eight values and resist the urge to add one every time a new channel appears, because a dropdown with thirty options produces a report nobody reads. Make the field optional so it does not cost you form conversions. Review the Other responses monthly and promote anything that recurs into a proper option. This is one of the few cases where adding a property drives a decision rather than adding admin.

Then build one report that puts Original source next to self-reported source for every closed-won deal in the quarter. The two rarely agree. That disagreement is the most useful attribution insight you will get all year, because it shows you which channels create demand and which ones only catch it.

 

Which attribution reports should you trust?

The ones that ask a narrow question. Attribution fails when it is asked to explain everything, and works when it is asked whether one specific channel is worth its budget.

Use Original source and Latest source on the contact for first and last touch. If you are on Marketing Hub Enterprise, use the revenue attribution reports for multi-touch across all contacts on a deal, pick one model, and stay on it for a full quarter before you compare anything. Build the rest in the custom report builder using contacts and deals as your data sources.

Report on contacts and deals created rather than sessions. Sessions are where direct dominates. Deals are where the record has usually been enriched by a form fill or a sales conversation, so the source you see is closer to the source that existed.

Then be honest about what is left. If a third of closed-won deals still show direct or unknown as first touch after the fixes, report that third as unattributed, in its own row, at its real size. Distributing unknowns across channels in proportion to known performance makes the report agree with whatever you already believed before you opened it.

 

How do you make decisions with imperfect attribution?

By triangulating three imperfect sources instead of waiting for one clean one. Tracked source, self-reported source, and the qualitative read from sales on where the good deals came from.

When all three point the same way, act on it. When they disagree, that is the channel to investigate before you spend more on it, and it is usually where you find the wrong bottleneck being solved by someone with a budget.

The same discipline that makes forecast accuracy measurable applies here. A smaller number you can trust beats a complete number you cannot. A source report where direct sits at around a quarter of sessions, every owned link carries a UTM, and every closed deal has a self-reported source is enough to run marketing on. Most portals we open are three fixes away from that.

If direct is the top row on your source report and the budget conversation keeps stalling on it, a RevOps Audit covers your tagging, consent setup and reporting in a fortnight, and hands you a source report you can take to the board. Send us your current sources report and we will tell you which of the three fixes you need.

 

Get a RevOps Audit

 

FAQs

There is no published benchmark, and any figure claiming one is guessing. In B2B portals we work in, direct is commonly the largest single source and often sits between a third and a half of sessions. We treat around a quarter as the point where the report supports a budget decision, after owned links are tagged and consent acceptance is reported alongside it.
No. Original source, stored as hs_analytics_source, is stamped once when the contact record is created and stays fixed for the life of the record. Latest source, stored as hs_latest_source, updates with each new session. Tagging your links improves attribution for contacts created from that point forward and does not retroactively correct existing records.
Only for links you control. UTM tags move sequences, marketing email, partner links, in-app links and social bios out of direct and into their real source with the drill-down fields populated. They do nothing for a referrer stripped by a Slack message, a PDF, a declined cookie banner, or someone typing your domain in after hearing about you. A self-reported source field on your forms is the only way to capture that share.