HubSpot revenue attribution: what your plan shows and what it needs first

At some point someone asks which of your marketing brought in revenue: which channels and campaigns led to the deals that closed, and how much those deals were worth. In HubSpot, the reports built for that question are called revenue attribution reports, and HubSpot’s help pages say they need Marketing Hub Enterprise, its most expensive subscription.

Those reports do need Enterprise. Seeing revenue by source doesn’t. Every HubSpot subscription, the free one included, has a report of closed deals by where they came from, and Professional adds more ways to cut it. What Enterprise adds is the choice of attribution model: the rule for splitting credit when a deal had several touches along the way, such as a first visit from a search and a later click on an ad.

Whichever report you use, two things decide whether its numbers mean anything. The closed-won total has to be one your sales team agrees with, and each won deal needs a contact on it, because HubSpot traces a deal’s source through the people attached to it. At a few dozen deals a year, getting those two right changes the answer more than any model will.

This guide covers what your plan already shows, the checks that decide whether to believe it, and one quarter worked through, with the numbers.

What does my HubSpot plan show?

More than the Enterprise label suggests. Three reports on Professional answer some version of the question, and one of them runs on every plan.

ReportPlansHow it gives credit
Sales by Original Traffic Source, in the report libraryEvery plan, filters editable on ProfessionalClosed deal amounts by the original source of the contacts on each deal
A deals and contacts report you build yourselfProfessionalWhatever you group by: the deal’s own source, a contact’s, a property of your own
A campaign’s Revenue reportMarketing Hub ProfessionalEach closed deal spread evenly across the interactions before it closed
Deal create and deal revenue attributionMarketing Hub EnterpriseFirst touch, last touch, linear, time decay or HubSpot’s Empirical model, your choice

The library report was called Closed revenue by source until HubSpot renamed its revenue reports on September 16, 2026. HubSpot doesn’t say how it counts a deal whose contacts came from different sources, so check its total against your closed-won figure before you use it. The campaign report credits only what was attached to the campaign: an email or landing page nobody added to it earns that campaign nothing, and in my experience something usually gets left out.

The Enterprise reports add model choice and finer detail, down to the page or email. They don’t add deals the other reports miss. The conditions HubSpot lists for revenue attribution are the ones that decide what the other reports can credit too: a deal in a closed-won stage, with an amount, and at least one contact on it. “Without an associated contact, the revenue will not be attributed to any interactions.”

Is the closed-won number one sales agrees with?

Start there, before any source. A revenue-by-source report divides a total, and if the total is wrong, every row is.

The problems I’ve seen are ordinary. A test deal someone created to try a pipeline and never removed. Custom lifecycle stages, which keep a deal out of HubSpot’s ads reports. Part of the sales process living in Salesforce, with HubSpot holding only the early stages. HubSpot’s attribution rules add two more: a deal in a stage that means won but isn’t marked closed won doesn’t count, and neither does a won deal with no amount. None of these is visible from the marketing side.

So before trusting any number, I sit down with the sales team and go through the quarter’s won deals with them. They need to believe the total before I can.

One more distinction belongs in the report itself: closed-won deal revenue measures new business. Recurring orders and renewals often never become deals in HubSpot, so a manufacturer with $11 million in sales might show only part of it here. That’s fine, as long as the report says so.

Does every won deal have a contact?

HubSpot works out where a deal came from through the people attached to it, so a won deal with no contact falls through most of the reports above. Sales by Original Traffic Source leaves it out: “Only deals with associated contacts will be included in this report.” The campaign Revenue report needs a contact who interacted with the campaign. The Enterprise reports can’t give its revenue to any interaction.

The library report doesn’t show such a deal as a blank or an unknown line either. It leaves the deal out, so the report’s total comes out lower than what you closed, with nothing on the page to say why.

A custom report is the exception, and it’s how to find them. Build one with deals as the primary data source and contacts as the second, and HubSpot puts every deal without a contact on a single row marked “(No value).” Filter to closed won and the quarter, then attach a contact to each deal on that row, or note why there isn’t one.

One wrinkle. A deal with no contact but with a company attached borrows the company’s source, which comes from that company’s earliest contact. So the same deal can show a source when you group by the deal’s own field and still be missing from the library report.

Which contact, and which visit, gets the credit?

A deal with five contacts still has one source, and HubSpot picks it for you. The deal’s Original Traffic Source is “the original traffic source of the associated contact with the earliest activity for the deal.”

Contacts a salesperson adds by hand after a call have no tracked visits, so the contact who came in through marketing will most often be the one it picks. That’s mostly what you want. The person who downloaded a guide two years ago may not be the one who signed, and the deal still started with that download.

What deserves more thought is which visit counts. Original Traffic Source is first touch: where the earliest contact came from, however long ago. It is what HubSpot’s revenue reports use unless you choose otherwise, and it ignores everything after. A contact who first arrived through organic search in 2021 and came back through an ad the week the deal was created still reads as organic.

For most small businesses I’d rather know the last touch, the visit just before the deal was created. That’s usually the form fill that started the sales conversation. HubSpot has a field for it, the deal’s Latest Traffic Source, but it follows “the contact associated with the last session activity for the deal,” and a contact’s latest source changes with every visit. Read a month after the deal closes, it shows whatever the customer did last, which may be logging in to pay an invoice.

The fix is to copy it when the deal is created. On Professional, a deal workflow triggered by deal creation can copy Latest Traffic Source into a single-line text property of your own, such as “Source at deal creation.” Give it a short delay first, so the contacts are attached before it copies. HubSpot only allows calculated properties to be copied into text or number fields, which is why it isn’t a dropdown. The copy never changes again, so a number you reported in March still reads the same in June. The same applies to first touch: HubSpot rewrites a contact’s original source when it matches the person to earlier anonymous visits, so copying both keeps the report still.

What’s inside Offline sources?

Offline sources is HubSpot’s “catch-all original source for traffic that HubSpot can’t attribute to a tracked digital session,” which takes in anything imported, created through an integration or entered by hand. Trade show lists, referrals, a call that turned into a deal: all Offline sources. On its own the line says nothing about where the business came from.

Two fields split it. Record Source says how each record was created, an import and the import’s name, or a person entering it by hand, and HubSpot recommends it over Offline sources for that purpose. For where the business came from, add a dropdown property of your own, something like “How they came to us,” with trade show, referral, partner and call as options, and ask sales to fill it in when they create the contact. A hidden field on your forms can set it for web leads too.

One quarter, worked through

The numbers are made up to show the method. A manufacturer closes about 70 deals a year at an average of $80,000.

StepDealsRevenue
HubSpot shows closed won this quarter20$1,525,000
A test deal and a duplicate, found with sales−2−$85,000
Closed won, agreed with sales18$1,440,000
A deal with no contact−1−$60,000
What the revenue-by-source report can see17$1,380,000
of which Offline sources5$400,000
of which a tracked source12$980,000

The how-they-came-to-us field splits the Offline sources line into two trade show deals worth $170,000, two referrals worth $150,000 and one nobody recorded, worth $80,000. The tracked deals, credited both ways:

SourceFirst touchLast touch at deal creation
Organic search4 deals, $330,0002 deals, $160,000
Paid search3 deals, $240,0005 deals, $400,000
Direct traffic2 deals, $160,0003 deals, $250,000
Referrals2 deals, $170,0001 deal, $80,000
Paid social1 deal, $80,000none
Emailnone1 deal, $90,000

Two corrections and one missing contact moved the total by $145,000 before any question of credit came up. Offline sources was 29 percent of what the report could see, until one field turned most of it into answers.

The two columns disagree, and at this volume the disagreement means little. Paid search goes from 3 deals to 5. With 17 deals, a channel that won 3 could plausibly be winning anywhere from about 6 to 41 percent of them over a longer run, and one that won 5, from about 13 to 53 percent. Those ranges overlap almost entirely. What the quarter does say: paid search shows up either way, and the columns disagree most about organic search, which is where to look next.

The 18 deals carry 49 contacts. With lifecycle stages set to update when a deal is won, a contact-based customer count reads 49. It should read 17, one per company.

Do you need to choose an attribution model?

Not at this volume, and the evidence on how companies choose suggests many of them never chose at all. In a 2016 survey of more than 360 marketers by Bizible, an attribution software company, about half said they used their current model because it was easy to set up or because it was the default. Only about one in five thought they had the right one.

Google has since retired four of the rule-based models from Google Ads, first click, linear, time decay and position-based, saying under 3 percent of Google Ads web conversions used them. Its replacement learns from volume, and Google recommends at least 200 conversions and 2,000 ad interactions in 30 days. A company closing 70 deals a year closes about six a month.

There’s a second reason for caution, from experiments that checked credit from tracking data against controlled tests. Across 15 studies at Facebook, the usual methods mostly overstated what the ads did. At eBay, switching off brand-search ads cost almost nothing, because the same buyers clicked the free listing below. Those studies cover consumers buying online, so the size of the effect doesn’t carry over to a B2B sale that takes months. The direction does: the visit just before a decision can take the credit for a decision already made, and last touch is the rule most exposed to that.

So I report first touch and last touch side by side, and treat neither as the answer. They’re the deal-level version of the two rules I use for leads in the guide on Google Ads and HubSpot lead counts. When both point at the same channel, act on it. When they disagree, as organic and paid search do above, the disagreement tells you where to look. A “how did you hear about us” field on the deal adds a third view, with biases of its own: people name what they remember, which isn’t always what brought them back.

Where does ad spend go?

Put total ad spend against total closed-won revenue first. That blended figure doesn’t depend on any rule about credit, and it’s the one leadership can check against what it knows.

Then credit the paid deals under one rule, written down where the report lives. Mine is the last touch before the deal was created: if that visit came from a paid ad, the deal is a paid deal, and its revenue goes against that channel’s spend. Whatever rule you choose, the same rule has to apply next quarter, or the trend is two rules compared with each other.

When should this move out of HubSpot?

When the situation is simple, a spreadsheet is enough: one or two salespeople, a few deals a month, an export each quarter. When the rules are your own, when spend comes from ad accounts HubSpot doesn’t connect, or when the export turns into a monthly chore, the data belongs somewhere you can join it properly.

That’s how I prefer to work. HubSpot’s reporting is enough for a lot of teams, and the custom report builder covers most of this guide. I’d still rather take the deals, contacts and their sources out of HubSpot and do the join in a reporting tool where every rule is visible. The data needed for it is available on every plan, free included: HubSpot’s API covers deals, contacts, companies and their associations at every tier, with lower call limits below Professional.

What to do this week

Pull the quarter’s closed-won deals and go through them with sales until the total is one you both believe. Then count the deals with no contact, and the share in Offline sources. Those two numbers decide how far to trust any revenue-by-source report, on any plan.

Questions

Does a won deal with five contacts count as five customers?

It can. With HubSpot's setting to update lifecycle stages when a deal is won turned on, every contact on the deal becomes a Customer, so a report that counts contacts shows five. I've seen teams stop reporting customers out of HubSpot for exactly this reason. Count customers by company or by won deal instead.

Why did a deal's original source change after I reported it?

Because the deal borrows it from a contact, and the contact's can change. HubSpot rewrites a contact's Original Traffic Source when it matches the person to earlier anonymous visits, a merge keeps the older of two sources, and anyone with access can edit it. Copying the value into a property of your own when the deal is created keeps a reported number from moving.

Can I see revenue by source on the free plan or Starter?

The data is there on every plan. Deals, contacts and their source fields can be exported or read through HubSpot's API, free plan included. Reporting on it inside HubSpot is the limit. The report library's revenue-by-source report runs on every plan, but changing its filters, or building your own report across deals and contacts, takes Professional.

When is Enterprise's attribution worth paying for?

When you close enough deals for the models to disagree by more than chance, and you want to compare them inside HubSpot. At a few dozen deals a year, the gap between two models sits inside the uncertainty of either one, as in the worked quarter above. Below that volume, the money does more good spent on the data the models depend on.

Switchboard Partners works through questions like this with clients as part of analyzing and compiling business data.