Someone pastes two screenshots into Slack. Marketing’s dashboard says one number of deals closed last quarter. Sales says another. Finance, which does not live in HubSpot, has a third. The next hour goes to arguing about whose report is wrong.

Usually neither is. HubSpot’s report builder is precise about what it counts. Small, reasonable choices, which date, which object, which association, produce different numbers, and those choices are invisible on a dashboard tile. The argument is not about data quality yet. It is about a definition that rarely gets written down.

Why do two HubSpot reports show different numbers?

Because each report makes four choices that change the count: which object is the primary data source, which date property the date range filters on, which associated objects are joined in, and which filters apply. Change any one and the population changes. HubSpot’s documentation says it directly: a record might be counted more than once, because associated records can meet filter criteria more than once.

Symptom, likely cause, where to check
SymptomLikely causeWhere to check
Revenue higher in one reportDeal amounts counted once per associated contact or companyPrimary data source; group by Record ID
Deals missing from a contact-based reportDeals with no associated contact are excluded when Contacts is primarySwitch the primary source to Deals; look for the (No value) row
Same filter, different monthDifferent date property, such as Create date against Close dateThe date range property on each report
Totals shift after deals closeClose date set automatically to the day a deal was marked wonPipeline settings; deal property history
Attributed revenue below closed wonDeals without a contact, amount, create date or close date are excludedAttribution requirements
Off by a day at month endFilters use the account time zone; dates display in yoursAccount defaults; your user settings

The date property decides which month a deal belongs to

Every HubSpot date range filters on one date property, and a deal carries several: Create date, Close date, a Date entered property for each stage, Last activity date. A deals report by Create date answers “what did we start?” One by Close date answers “what did we finish?” Both are right. Put them side by side without labels and they disagree every month.

Close date has a quirk of its own. HubSpot sets Close date to the current date automatically when a deal moves into a closed won or closed lost stage, unless you turn that off in pipeline settings. A deal the customer signed on March 30 and a rep marked won on April 2 is April revenue in every Close date report. Multiply that by a sales team that updates on Mondays and quarter boundaries get soft.

Time zones add a second layer. Per HubSpot, date-based filters such as This month use the account’s time zone so every user sees the same records, while values from default date properties display in your local time zone. A deal closed late on the last day of a month can show one date in the report and another in the record, depending on who is looking.

Fiscal years are the third. An account’s fiscal year defaults to January through December, and custom reports apply a different fiscal year only when the Use fiscal year box is checked on the date filter. One report on fiscal quarters and one on calendar quarters will never match, and both will look correct.

The primary data source decides which records exist

In HubSpot’s custom report builder, the primary data source sets the population, and every other source hangs off it. With Contacts as primary and Deals as secondary, HubSpot’s documentation says the table will not include any deals that are not associated with a contact. Make Deals primary and those deals appear, grouped under a (No value) row. Same data, two answers.

Joins also multiply. A deal associated with three contacts appears three times in a contacts-and-deals report, and summing Amount triples its revenue. To count each deal once, make Deals the primary source for revenue questions, join only the primary company or contact where the report allows it, and group by Record ID when you need to see the rows collapse back to one per deal.

The rule of thumb we give revenue teams: the object you are counting is the primary data source. Revenue questions start from Deals. Lead questions start from Contacts. Account questions start from Companies.

Why is HubSpot attribution reporting wrong?

Usually because deals are missing what attribution needs. HubSpot’s deal create and revenue attribution reports, available in Marketing Hub Enterprise, include only deals in a closed won stage with at least one associated contact and known values for Amount, Create date and Close date. Sales activities count only when associated to both the contact and the deal. Every gap removes revenue from the report.

That makes attribution a data-completeness report in disguise. If a third of your closed-won deals have no associated contact, a third of your revenue cannot be attributed to anything, however good the model. Interactions from offline sources without tracking URLs that lead to pages carrying HubSpot’s tracking code are excluded as well.

Switching models, linear to U-shaped to W-shaped, changes which interactions get credit. It does not change how much revenue is eligible for credit. When marketing’s attributed revenue sits well below sales’ closed won, check eligibility before you debate models.

Duplicates and lifecycle stages quietly change the count

Duplicate contacts inflate contact and lead counts and split one buyer’s interactions across two records, which weakens attribution on both. Lifecycle stage moves only forward through HubSpot’s tools, such as forms, imports and workflows, so a report filtered on current stage counts something different from one filtered on the date a contact entered that stage. Pick one definition per metric.

HubSpot’s lifecycle documentation spells out the forward-only rule: to move a record backward you clear the value first, by hand or by workflow. It also keeps two families of date properties, the legacy Became a [stage] date and the newer Date entered and Date exited [stage]. Reports built on different families, or on current stage, will disagree about how many MQLs you had in May.

Duplicates have a longer tail. Every duplicate contact is a lead counted twice and an attribution path cut in half. We cover why they keep returning, and how to stop the inflow, in why HubSpot duplicates keep coming back. If a Salesforce sync is in the picture, start with why your Salesforce-HubSpot sync breeds duplicates.

One more quiet one: multi-currency portals. HubSpot keeps two amount properties: Amount, in the deal’s own currency, and Amount in company currency. Check which one each revenue report sums. Two reports that pick different ones will disagree whenever a deal is priced in another currency.

Which HubSpot number should you trust?

Trust the report that matches a written definition. For each number that reaches leadership, write down the primary object, the date property, the filters and the association rule, build exactly one report that follows it, and label the dashboard tile with the definition. Reconcile closed-won revenue to finance’s booked number every month. Gaps that survive reconciliation are data problems, not reporting problems.

  • Metric definition template
  • Name the metric the way leadership says it, for example new business closed won.
  • Primary data source: one object, Deals for revenue.
  • Date property: one, named on the tile (Close date for bookings, Create date for pipeline created).
  • Fiscal year: on or off, stated.
  • Filters: pipeline, deal type, team and the currency field, written out.
  • Association rule: primary company or contact only, if any secondary object is joined.
  • Owner: one person who answers when the number is questioned.
  • Reconciliation: a monthly check against finance, with the variance recorded.

The variance that remains after this exercise is the honest measure of your CRM data. It is also the number I rarely see teams track, because the definitional noise drowns it out. Validity’s State of CRM Data Management in 2025, a survey of 602 CRM users and admins across the US, UK and Australia, found 76% say less than half of their organization’s CRM data is accurate and complete.

Our free HubSpot audit is a quick first look at a portal. For a measured read, the AeolusGTM CRM Diagnostic connects read-only to HubSpot, Salesforce or Pipedrive and scores duplicates, completeness, ownership and pipeline hygiene, traced to the records behind each finding. If the forecast is the number in dispute, read why your HubSpot forecast is always wrong next.

Two reports that disagree are a gift: they show you a definition that never got made. You can keep settling it in Slack every month, or write it down once and make the next argument about the business instead of the report.