Most HubSpot problems that get described as reporting problems are association problems. The deal shows no contacts. The company record looks dead while its people are clearly active. A workflow fires at the wrong person because HubSpot had no way to know which of the four contacts on the deal signs the contract.
Associations are the layer underneath all of that, and they are one of the few parts of HubSpot where a small amount of setup work pays off for years. This guide covers what associations are, how labels and limits work, the primary company rule that quietly breaks reporting, and the one thing associations were never built to do.
In this article
1.
2.
3.
4.
5.
6.
7.
8.
What HubSpot associations are
An association is a link between two CRM records. A contact belongs to a company. A deal has contacts on it. A ticket relates to both. Associations are what turn four separate object tables into a CRM.
Two behaviors define how they work, and both are easy to take for granted until they matter.
They are bidirectional by default
Associate a contact with a deal and the deal is associated with the contact in the same moment. There is no second step, no direction to choose, and no way for the two sides to disagree. This is different from a synced field, where two systems each hold a copy and something has to arbitrate.
They work across object types and within them
The obvious pairs are contact to company, contact to deal, deal to company, ticket to anything. Less obvious is that records of the same object type can associate too, which is how parent and child company hierarchies work, and how custom objects get wired into the standard model.
Where associations show up is the right sidebar of any record, one card per associated object type. That sidebar is also the fastest way to audit them, and it is worth knowing that those cards are configurable alongside the rest of the record layout.
HubSpot association labels
A plain association tells HubSpot that two records are related. It does not say how. For a solo consultant with one contact per deal that is fine. For anything resembling a buying committee it is not, because "related" flattens the difference between the person who champions the deal, the person who signs it, and the person who will be invoiced.
Association labels fix that by naming the relationship.
Single labels
One description that reads the same from both sides. Colleague, Partner, Referral source. Use these when the relationship is symmetrical.
Paired labels
Two descriptions, one for each direction. Manager and Employee, Parent and Child, Vendor and Client. Looking at either record shows the correct half. A paired label counts as one label toward your limit, not two, which is worth knowing before you start budgeting the 50.
What labels cost and where they cap
Fifty per object pair sounds generous, and it is, right up until someone decides every job title deserves a label. Labels are worth creating for distinctions your team acts on differently. If nothing in your process changes based on whether someone is a Technical evaluator or an Economic buyer, you have made a taxonomy, not a tool.
What labels unlock
The payoff for labeling is that the rest of HubSpot can then see the distinction.
| Where | What labels let you do |
|---|---|
| Lists and segments | Filter to every contact labelled Decision maker on an open deal. Requires Professional or higher. |
| Workflows | Enrollment triggers, branch logic, and targeting inside Edit record and Send email actions. |
| Custom reports | Use a label as an axis, a break-down field, or a filter. |
That workflow row is the practical one. Without labels, an internal notification about a deal goes to everyone associated with it or to the deal owner. With labels, it goes to the Billing contact, which is the difference between automation people trust and automation people mute.
Create a label when your process treats that relationship differently. Everything else is a job title, and job titles belong in a property.
Association limits
There are two kinds of limits and they behave differently. Platform limits are HubSpot's ceilings. Custom limits are guardrails you choose.
Custom limits are the underused half. On Professional and Enterprise you can cap associations per object pair or per label: one company per deal, five contacts per deal, exactly one contact labelled Billing contact per company. When someone tries to exceed the cap, HubSpot stops them from creating the association or applying the label.
One caveat on timing: limits prevent new associations that exceed them. They do not retroactively clean up what already exists. Set them while your data is small, or budget a cleanup pass first.
The primary company rule
This one deserves its own section because it breaks reporting quietly and the cause is never obvious.
When a contact is associated with more than one company, exactly one carries the Primary label. By default that is whichever company was associated first. Not the biggest, not the parent, not the one paying. First.
Primary is not a display preference. Activities associate only with the primary company, and workflow and reporting features reference the designation. So a contact who joined through a subsidiary and was later linked to the parent org will keep routing every call, email, and meeting to the subsidiary record. The parent looks inactive. Nobody can explain why.
- 1
Find contacts with multiple company associations
Build a list or a custom report on contacts with more than one associated company. This is usually a much shorter list than people fear, and it is where all the ambiguity lives.
- 2
Confirm the primary is the one you report on
Open the Companies card in the contact's sidebar. The primary is labelled. If your revenue reporting rolls up to the parent org, the parent should be primary.
- 3
Set it deliberately going forward
Make primary company part of whatever creates contacts, whether that is an import mapping, a form, or a rep's checklist. Leaving it to association order is leaving it to chance.
Where associations stop
Associations are genuinely good at what they do, and the honest version of their limitation is narrower than the usual complaint.
The usual complaint is that HubSpot does not move context between records. That is not quite right. Activities do roll up across associations, as the primary company rule makes clear. HubSpot moves plenty.
What an association moves is a link, and what rolls up along it is an activity: a call, an email, a meeting, a logged note. What never travels is the substance of a document that lives somewhere else. Associating a contact to a deal does not put the discovery doc on the deal. It puts the contact on the deal, and the contact has a timeline, and somewhere in that timeline is maybe a note that says "see the Notion page."
Associations solve this
- Which people are on this deal
- Which company this ticket belongs to
- Routing a workflow to the billing contact, not everyone
- Reporting revenue at the parent org level
- Preventing a deal from being linked to four companies
Associations do not solve this
- What was actually said on the last call
- Why the deal stalled in September
- The account plan the CS team wrote
- Research that lives in a Notion database
- Any context whose natural shape is a page, not a field
The right-hand column is not a gap in the association model. It is a different problem wearing the same clothes, and it is why teams keep adding labels hoping the context will follow. It will not. More labels make relationships more precise; they do nothing about the fact that the useful writing is in another tool.
This is the same ceiling that HubSpot data sync and the Data Hub tier ladder run into from a different direction. Sync maps fields between systems, associations map relationships between records, and neither of them puts a document on a record, because a document is not a field or a link.
Do you need labels, limits, or something else?
Free, already on, nothing to configure. Most small teams and solo consultants never need more than this, and adding a taxonomy they will not maintain makes the CRM worse rather than better.
Professional or Enterprise. Create labels for the distinctions your process acts on, set overall limits before label limits, and audit primary company while you are in there. This is the highest-leverage hour of HubSpot admin work available.
No label fixes this, because there is nothing wrong with your associations. The context simply lives in a document in another tool, and the record needs to render it rather than link to it.
That third card is where a lot of association projects should actually end. If the sentence that started the project was "reps open a deal and cannot see what happened," you are not describing a relationship modeling problem. Your associations are probably fine. The writing is just somewhere else.
A custom card is HubSpot's native answer to that: a panel on the record that renders data from another system live, when the record loads. Nothing is copied, so there is no primary designation to get wrong, no association limit to hit, and no roll-up rule to reason about.
NoteLinker is that card for Notion. Rows from your Notion database appear on the contact whose email matches and on the deal whose name matches, visible by default with no per-row toggle to remember. The same page shows on both records, which is the behavior people were hoping associations would give them. Notion inside a HubSpot record shows the shape of it, and NoteLinker vs native HubSpot covers where HubSpot's own tooling is the better answer.
Put your live Notion notes on every HubSpot record
No association labels to maintain, no limits to hit, no copies to go stale. NoteLinker renders your Notion database rows on the contact and deal record in minutes.
An association audit worth running once
Six checks that surface most association problems
- List every contact with more than one associated company and confirm the primary is the record you report on.
- Check whether any deal is associated with more than one company. If so, decide which is correct and cap it at one.
- Count your association labels per object pair. If you are near 50, you are describing job titles, not relationships.
- Confirm every label is used somewhere: a list filter, a workflow branch, or a report. Delete the ones that are not.
- Set overall association limits before label-level limits, since the broader cap takes precedence.
- Ask what reps are actually missing. If the answer is a document rather than a relationship, stop configuring associations and put a card on the record.
Associations are the part of HubSpot most worth getting right, because everything downstream reads from them: deal stages, reporting, routing, and every workflow that needs to reach a specific human. An hour on labels and limits is repaid many times over.
Just be clear about the boundary. Associations connect records to each other with real precision. They do not carry the page your team wrote about the account, and no amount of labeling will change that. When the missing piece is a document, the answer is a live view on the record.



