Model companies, contacts and deals as one revenue object
Revenue reporting only works when companies, contacts and deals are one connected model, not three lists
Every RevOps report you will ever want, pipeline by source, win rate by segment, revenue by owner, depends on one thing being true first: your companies, contacts and deals are properly associated, with the few properties that drive the numbers filled reliably. Get the model right and reporting is a query. Get it wrong and reporting is a guess.
A contact is a person. A company is the organisation that person belongs to. A deal is a specific revenue opportunity, usually tied to one company and one or more contacts. These are three different objects for a reason: revenue is earned from companies, conversations happen with people, and money is forecast on deals. Flatten them into "a big list of emails" and you can never answer a company-level question, because the data simply is not shaped to.
What a good HubSpot data model setup looks like
HubSpot ships with the right objects, contacts, companies and deals, and the association layer that links them. Your job is to use them deliberately. Each contact associates to a company. Each deal associates to a company and to the contacts involved. With those links in place, HubSpot can roll a deal up to its company and a company up to its segment, which is what makes revenue reporting possible.
The trap is properties. HubSpot offers hundreds, and a lean team does not need most of them. RevOps lives on a small set that actually drives decisions and reports. Resist the urge to create a property for every field someone might one day want; every unfilled property is a column of nulls that makes the data look unreliable.
The properties that drive RevOps
Keep the custom set small and ruthless. For most lean B2B teams the model needs only:
- On the company: industry or segment, company size, and lifecycle stage. These let you slice revenue by the dimensions you actually decide on.
- On the contact: lifecycle stage, original source (how they first found you), and owner. Source is the property that tells you which marketing actually works.
- On the deal: amount, close date, deal stage, and a single "deal source" or campaign field. These four power your entire forecast.
That is roughly ten properties carrying your whole revenue picture. Everything else is optional context you add only when a real report demands it.
The exact steps to build the model
- Turn on and standardise the three objects. Confirm contacts, companies and deals are all in use; do not run deals as a contact property.
- Enforce the associations. Every contact gets a company; every deal gets a company and its contacts. Where HubSpot auto-associates by email domain, let it, then audit the gaps.
- Create only the properties listed above, using dropdown (enumeration) types for segment, source and stage so the values stay clean and reportable. Free-text fields wreck reporting.
- Backfill the model on your live data. Associate orphan contacts to companies and set source on existing records, or your historical reports stay blank.
- Write a one-page definition of each property and its allowed values. This is the document that stops two people filling "source" two ways.
A worked example
A 30-person B2B logistics-software company had 8,000 contacts in HubSpot and almost no companies, because every lead had been imported as a flat contact with the firm's name typed into a text field. Challenge: they could not produce a single company-level revenue report, and the same firm appeared five times under five spellings. Approach: they enabled the company object, used domain-based auto-association to roll the 8,000 contacts up to roughly 2,400 companies, and standardised segment and source as dropdowns, following the model steps above. Result: duplicate firms collapsed by 38 per cent, the team could finally report revenue by industry, and a segment nobody had noticed turned out to drive 28 per cent of closed revenue, which redirected the next quarter's outbound. The data had been there; the model made it legible.
Pitfalls
- Running deals as contact properties. A "deal amount" field on a contact cannot be forecast or rolled up. Use the deal object.
- Free-text where a dropdown belongs. Typed values fragment instantly. Segment, source and stage must be enumerations.
- Property sprawl. A hundred properties at 5 per cent fill rate reads as untrustworthy data. Start with ten that are always filled.
With companies, contacts and deals modelled as one connected revenue object, you can define the stages that run through it. The next chapter sets your lifecycle stages, the backbone of every revenue report, before a single deal touches a pipeline.