HubSpot marketing attribution splits credit across the touches before a contact or a sale. Contact Create Attribution ships with Marketing Hub Professional. Deal Create Attribution and Deal Revenue Attribution are Marketing Hub Enterprise only (HubSpot).
That settles most of the confusion I see. The rest of this piece is the part nobody documents. Which numbers I let a board see. Which ones I keep for internal allocation. And the property hygiene that decides whether any of it survives a CFO.
I spent fifteen years leading B2B marketing, including senior leadership at PE-backed companies. Attribution was never a reporting problem. It was a naming problem, a consent problem, and a reconciliation problem.
What HubSpot marketing attribution reports measure
HubSpot ships three attribution report types. They answer three different questions.
HubSpot names the target of each report type. Contact Create Attribution measures sources, assets, and interactions that affect generating contacts. Deal Create Attribution does the same for deals. Deal Revenue Attribution does it for deal revenue (HubSpot).
The tier split matters before you plan anything. Contact Create Attribution is on Marketing Hub Professional and Enterprise. It is also on Content Hub Professional and Enterprise. Deal Create Attribution and Deal Revenue Attribution both require Marketing Hub Enterprise (HubSpot).
Say you run Professional and someone asks for Deal Revenue Attribution. That is a contract change. I have watched two quarters go into a workaround that a tier upgrade solves in a day.
A conversion path in HubSpot is a sequence of interactions. Which interactions count is configurable. Record the selected interaction types before you interpret a report; the current report configuration determines what is eligible for credit.
That default set is a decision someone made for you. Review it before you trust a chart.
The attribution models in HubSpot
HubSpot currently supports five models (HubSpot).
| Model | How credit splits | What I use it for |
|---|---|---|
| First Touch | 100% to the first interaction in the path | Demand creation. Which channel starts conversations. |
| Last Touch | 100% to the last interaction before conversion | Conversion mechanics. Which asset closes a form. |
| Linear | Equal credit to every interaction in the path | A sanity check against the two extremes above. |
| Time Decay | More credit to interactions closer to conversion | A check for short-cycle motions and paid tests. |
| Empirical | Weight based on how often each interaction type occurs across conversion paths | A diagnostic view of which interaction types are distinctive in the observed paths. |
Empirical replaced HubSpot's U-shaped, W-shaped, J-shaped, and Inverse J-shaped models. It uses historical interaction data to weight interaction types: less frequent types can receive more weight, while individual interactions of the same type receive equal weight (HubSpot). That does not make the result causal proof. It tells you how the observed paths are configured.
A model is a question. Pick the model that matches the question you are being asked.
How to set up attribution in HubSpot
Order matters. Most failures I get called into are sequencing failures, not tooling failures.
- Confirm the tier. Professional gets Contact Create Attribution. Deal Create Attribution and Deal Revenue Attribution require Marketing Hub Enterprise (HubSpot). Confirm before you scope.
- Verify the tracking code on every property. Attribution needs the HubSpot tracking code on the landing page. Touches without a tracking URL pointing at a coded page are not counted (HubSpot).
- Fix the UTM convention before you build a report. Highest leverage step. The naming rule is below.
- Choose interaction types deliberately. Turn on marketing event attendance if you run events. Turn on custom behavioral events if you have them. Both are off by default (HubSpot).
- Build the report and select two or more models. HubSpot compares models side by side in one report (HubSpot). A single model looks authoritative and is not.
- Wait for reprocessing. Changing interaction types forces a reprocess that "may take up to two days" (HubSpot). Do not diagnose a report you changed this morning.
The property naming convention that makes it work. UTM source is the platform. UTM medium is the mechanism, from a closed list you never extend casually. UTM campaign carries a program code plus a quarter, not a phrase. Lowercase everything. Hyphens only. No spaces, no ampersands.
Then create one custom contact property, first_touch_program. Populate it once on contact create. Never overwrite it. HubSpot's native source properties will churn. Yours will not. That frozen property is how you reconcile HubSpot against Google Ads six months later.
Contact Create vs Deal Create vs Deal Revenue Attribution
These are different objects with different failure modes.
Contact Create Attribution answers which touch produced a known contact. It is the most complete of the three. It depends on the fewest downstream records. It also flatters channels that harvest existing demand.
Deal Create Attribution answers which touches preceded a deal record. It carries a hard dependency on complete deal and contact history. Teams that create the deal first and attach contacts later leave an evidence gap that no attribution model can repair retroactively.
Deal Revenue Attribution answers which touches preceded closed money. It has the strictest data requirements. Deals missing an Amount, a Create date, or a Close date are excluded. Contacts with no associated deal are excluded. Sales activities not linked to both a contact and a deal are excluded (HubSpot).
Read that exclusion list as an operator. Every deal closed without a clean Amount field is invisible here. Not wrong. Invisible. So a Deal Revenue Attribution report is partly a report on your CRM hygiene. The chart alone cannot separate the two.
There is also a sampling ceiling. HubSpot includes up to 20 million interactions per report after sampling. At high volume, it samples high-frequency interactions such as email interactions and page views; lower-volume form submissions, calls, and meetings are not sampled (HubSpot). Treat a report at that scale as an analysis of a documented sample, not an exhaustive ledger.
The limits, and the workarounds I use
Offline touches are invisible unless you make them visible. The report ignores outside revenue and touches with no URL to a tracked page (HubSpot). Workaround: give every offline motion a tracked destination. A conference talk gets a vanity URL with UTMs. A partner referral gets a tracked landing page. No tracked entry point means it does not exist to the model.
Imported and manually created contacts have no history. Say a contact was created manually, imported, or synced. HubSpot cannot attach page views to that record. Not until they submit a HubSpot form with tracking allowed. Or click a tracked marketing email (HubSpot). Workaround: stamp first_touch_program at import time from the list source. Not a page view, but a defensible origin label.
Cookie consent changes the evidence chain. A deleted cookie can create a new browser identity. Consent configuration also changes which tags, storage, and signals are available. Workaround: preserve the CRM record and its original campaign fields, then inspect the implementation and raw fields before assigning the gap to consent. A form submission may restore an identity for an operating workflow; it does not recreate an unobserved path.
Multi-domain paths fragment. One prospect crosses your marketing site, your docs subdomain, and a microsite. That is three cookie contexts. Unless the tracking code and cross-domain setup match everywhere. Workaround: audit the tracking code on every subdomain quarterly. It drifts silently after every migration.
Retroactivity is limited. Add code to attribute knowledge articles. Only new touches get the new type. HubSpot does not update previous ones (HubSpot). Workaround: treat every attribution config change as a cohort boundary. Never compare across it.
HubSpot vs Salesforce attribution
The architectures differ in a way that decides which tool you reconcile against.
HubSpot models credit at the interaction level from eligible tracked behavior. Salesforce Customizable Campaign Influence connects campaigns and opportunities through influence records. Its default Primary Campaign Source model assigns all credit to one campaign. Custom models allow influence percentages; locked custom models accept API updates. Standard-model auto-association uses configured criteria, and those rules do not apply to custom models (Salesforce).
Inspect the actual Salesforce products and integrations before describing behavioral coverage. Campaign Influence alone does not establish a web-session journey. It also cannot prove that a form, integration, or custom field captured the original referrer and click identifier.
Is Salesforce your revenue system of record? Then you reconcile HubSpot against Campaign Influence. The key is the campaign, not the interaction. Which is why campaign naming has to match in both systems from day one.
For the model-agnostic version of this argument, see B2B marketing attribution. The tooling changes. The failure modes do not.
What I do with the numbers
Here is the allocation I run, and the line I hold.
What I trust for budget allocation. First Touch and Last Touch, side by side, on Contact Create Attribution, split by ICP. Say First Touch credits paid search with creating demand. Say Last Touch credits organic with closing it. That gap is the real finding. I move budget on directional gaps, never on decimal points.
What never goes in a board deck. A single-model Deal Revenue Attribution number presented as fact. It carries documented exclusions, a sampling ceiling, and consent-sensitive inputs. Calling that precise revenue causation is how a marketing leader loses a CFO permanently. What does go in the deck: pipeline sourced and pipeline influenced. Both defined in writing. Both stable for four quarters.
How I reconcile with Google Ads and GA4. Expect three different numbers. Do not force them to agree. In Google Ads, name the exact column: Conversions is primary actions and can include modeled values; All conversions can include view-through values. Name GA4 by event count or session-scoped source, report, attribution model, and date basis. HubSpot reports contacts and deals on its cookie plus form graph. Compare the matching definitions before you compare totals.
I reconcile on direction and rank order, never on absolute counts. If all three rank paid social last for pipeline, that is a decision. A 12% difference alone cannot tell me whether definitions or a defect caused it. I reproduce the source records and counting rules before dismissing a discrepancy.
The deeper version of this sits in marketing ROI measurement. The reason I stopped reporting lead volume as a headline is in why I do not measure MQLs.
Most attribution projects fail before the first report, in the property layer. Four spellings of "linkedin" in UTM source will beat any model you pick. That cleanup is the first thing I do on a RevOps engagement. It is usually what produces the first credible number.
Want to know whether your attribution tells the truth? Run a growth diagnostic. Pick one closed-won deal from last quarter. Try to reconstruct its path from HubSpot alone. If you cannot, no model choice will fix it.
Source note
HubSpot report names, supported models, tiers, and interaction sampling were refreshed from HubSpot's Create attribution reports on October 1, 2026. Google Ads conversion-column language was refreshed from Google Ads on the same date. Salesforce model and auto-association behavior was refreshed from How Customizable Campaign Influence Works on the same date.