Hi everyone!
I’m working on a Customer Health Score for a SaaS client and would love some input from other Solutions Partners on the best way to structure this in HubSpot.
The client has customers in the Grow project stage, with different engagement expectations depending on their tier (Tier 1, 2, or 3).
The health score needs to consider the number of sales activities completed within a specific timeframe, specifically:
-
1:1 sales emails
-
Meetings logged
-
Calls logged
The timeframe varies depending on the customer’s tier. For example, we may need to evaluate engagement over the previous 90 days for one tier.
The challenge
HubSpot’s default Number of times contacted property doesn’t work for this because it represents the lifetime number of times a company has been contacted, rather than the number of activities within a specific period.
I’m considering creating a custom number property and using workflows to increment the value whenever one of these sales activities is logged.
However, I’m not sure this is the best architecture — especially because I also need to account for existing activity from the previous 90 days when implementing this for existing customers.
Has anyone built something similar?
I’d particularly love to hear how you would approach:
-
Tracking the number of calls, meetings, and 1:1 emails within a rolling timeframe (e.g. the last 90 days).
-
Backfilling the activity count for existing records when the solution is first implemented.
-
Handling different engagement windows depending on the customer tier.
-
Avoiding the count becoming inaccurate over time as activities fall outside of the timeframe.
-
Whether you would recommend workflows + custom number properties, calculated properties, or another HubSpot-native approach.
I’m trying to keep this as native and maintainable in HubSpot as possible, rather than introducing an external tool just to calculate the engagement component.
Would really appreciate any approaches or examples from anyone who has implemented a similar health-score model. ![]()