How to track deal ownership and time spent by actor in HubSpot?

Hello,

Together with a colleague I am looking to build a system in HubSpot that tracks the time deals spend in each pipeline stage, and more specifically, which actor is “on the clock” at any given moment and for how long. The goal is to learn from this data: for example, identifying when certain deals are sitting unusually long with our risk analysts, our sales reps, or with the customer themselves.

This would allow us to get faster alerts on slow-moving deals, but also to run analyses and draw broader conclusions. If deals are stacking up with our risk analyst team, we can escalate there immediately. If they’re sitting with sales reps, we can dig deeper — even down to the individual rep level — to see whether certain reps are simply slower to follow up, or whether customers are responding more slowly in general. Are we seeing that in trend data over longer periods? Certain times of year, or certain times of the month?

We’ve tried various approaches to build this: workflows, custom properties, different methods of time tracking. The core challenge we keep running into is distinguishing, at the deal level, between inbound emails, outbound emails, inbound calls, and outbound calls. Most of our attempts rely on contact-based workflows, but those can pick up earlier interactions with a contact that aren’t related to the specific deal in question.

This causes workflows to trigger incorrectly, time measurements start or stop at the wrong moment, which throws off the actor logic and breaks the entire system.

We’re curious whether you have any ideas or existing use cases where this has been solved. If so, we’d love to hear how. Or perhaps the conclusion is that this simply isn’t possible in HubSpot right now. We call this system a “chess clock” internally — though it may go by a different name elsewhere (Deal velocity tracker / Ownership time tracking).

Any help or direction would be greatly appreciated, as we’re currently stuck.

If you need some additional explaination please let me know!

Thanks in advance,

Hi @LuukHooijman and welcome, we are delighted to see you here!
Great question, thanks for asking the HubSpot Community!
Let’s consult our Top Experts: Hi @danmoyle, @Josh and @jforte do you have best practices or insights to share with @LuukHooijman, please?
Thanks so much and have a brilliant day!
BÊrangère

Hi @LuukHooijman,

Assuming two actors cannot be on the clock at the same time, what about a ticket and ticket pipeline. Let’s call it “chess clock”.

Note: my original thought was a custom object, but what I am looking for is the ability to report on “Cumulative time in…” which is not available in custom onbject reporting.
This “chess timer” ticket would be used for the purposes of tracking how much time the ticket associated with the deal is in each stage. It would be the responsibility of the actor to click the chess clock timer to say, I did my thing, your turn. Which essentially moves it between stages (which in this case is tracking whose court is this in now). You can then create cross object reports (deal and ticket) and report on how much time it spent for each responsible team/party.
You could definitely get fancier here and use workflows to change the ticket stage. You could also create properties (HubSpot User) to track which individual was assigned ownership vs team.
Again, a custom object would be preffered here, but the ticket would be my next option.
You could also use an app on the market place, like Stop Watch, but that would only allow you track active time vs passive as well.

Hope this helps!
Thanks for the ping @BÊrangèreL

Hi Josh,

Thank you for your reply. We realise this is a possible solution, but we don’t like relying on manual updates to get the data we need. We want a fully automated process in which the different parties don’t have to change properties or ticket statuses themselves. That way, for example, sales agents can’t manipulate the results, or accidentally forget to change the actor.

We want to build a system that is driven by activities on the deal, for example:

Deal enters the Analysis stage → Actor: Risk
Risk completes the analysis → Actor: Sales
Sales contacts the customer with questions from the analysis via outbound email or call → Actor: Customer
Customer responds to these questions → Actor: Sales

There can be multiple touchpoints between Sales and the customer, so the actor can move back and forth between those two several times.

Once Sales has captured all the answers and forwards them to Risk → Actor: Risk
The Risk team then either declines the application or creates a proposal → End of cycle.

Hopefully this clarifies our situation and what we’re trying to achieve.

If you have any ideas on how to translate this into workflows and custom properties, I’d love to hear them.

Hey there @LuukHooijman. In my experience and what I know about HubSpot capabilities (For instance, I know that for any deal, you can reliably report “time spent in each deal stage” via HubSpot’s standard deal-stage time reporting.. but this is stage-time, not actor-time as you asked for), here’s what I’m thinking. If you want fully automated ‘who’s on the clock’ by deal, HubSpot doesn’t give a clean native way to attribute inbound/outbound contact activities to a specific deal without misfires. Your described issue is exactly what happens with contact-based workflows.
​

What I know of HubSpot and what it does well natively is time-in-deal-stage reporting; if ‘actor = stage owner/team,’ you can map stages to actors and use the built-in ‘time in deal stage’ analytics. If you truly need actor-level clock swaps (Risk ↔ Sales ↔ Customer), @Josh’s ‘chess clock ticket’ is the closest pattern because tickets support cumulative time-in-stage reporting and can be associated to the deal for cross-object reporting. Then you can automate stage changes where possible and leave a single handoff action where HubSpot can’t infer intent. You could even give each actor a simple checkbox or button-like property and drive the ticket/deal via workflows when that gets checked when they say, “My job is done.” It’s manual, but depending on where they’re working within HubSpot, you could surface that property.
​

For auditability, you can also lean on record property history (deal owner/stage) to validate your handoffs, even if it’s not a perfect actor clock. I know it’s not a simple “here’s your solution for exactly what you need,” but I hope it’s helpful to keep thinking through HubSpot capabilities and workarounds.

Hi Dan,

Thanks for your response and suggestions. We appreciate the idea of a manual handoff, but we’d prefer an automated solution and are still working to find one. It’s not a matter of trust, we know our team would reliably check the box, but rather a question of timing. In our line of work and given the product we offer our clients, speed is everything.

We need to be able to measure this as accurately as possible, both to report to stakeholders and to support our sales agents as effectively as we can, whether that means prioritizing deals that have been sitting with a particular actor for too long, or acting on other signals as they emerge.

I still find it hard to believe there isn’t a straightforward solution for tracking inbound and outbound contact (calls and emails) within HubSpot. That said, perhaps the problem we’re trying to solve isn’t one that many companies encounter. We’ll continue searching for a fully (or at least largely) automated solution and will report back once we’ve found one. In the meantime, if anyone has ideas, we’re all ears.

One useful thing to note: we use Aircall as our VoIP provider. They also supply data on call outcomes, which we’re currently exploring as a way to at least cover our call tracking needs.

Hey @LuukHooijman , the reason your contact based workflows keep misfiring is exactly what you identified: activities on a contact aren’t scoped to a specific deal. If the contact has had any prior interactions or multiple deals, the workflow can’t tell which activity belongs to which deal. That’s the core limitation and no amount of workflow filter tweaking will fully fix it with standard actions.

The way around this is Operations Hub Professional’s custom coded workflow actions. You can write a small Node.js or Python snippet that runs inside a deal based workflow and queries the HubSpot Engagements API for activities specifically associated with that deal (not the contact broadly). Emails have an hs_email_direction property (“EMAIL” for outbound, “INCOMING_EMAIL” for inbound) and calls have hs_call_direction (“INBOUND”/“OUTBOUND”). So your custom code checks the most recent email or call on that specific deal, reads the direction, and sets your “Current Actor” deal property accordingly (Accounts Dashboard | HubSpot )

The flow would look something like: deal enters Analysis stage → workflow sets Actor = Risk (simple stage trigger, no code needed). Risk moves the deal forward → Actor = Sales. From there, the custom coded action re enrolls whenever a new activity is logged on the deal, checks direction, and flips Actor between Sales and Customer automatically. You’d pair that with date properties (“Actor changed at”) to build your time tracking. Since you’re using Aircall, their integration logs calls with direction data directly on the deal record, so that feeds right into the same logic.

It’s not a no code solution, but the code itself is pretty straightforward since it’s just API calls to check the latest engagement direction. And it gives you the deal scoped accuracy you need without any manual handoffs Note: This response was written based on my own experience and lightly reformatted with AI for clarity. (Workflows | Custom Code Actions - HubSpot docs )

Hope this helps

Hi Ruben,

Thanks again for your input, inspired by your suggestions we finally got this system to work in HubSpot with custom code. We used Node.js to do some API calling and help decide who a set actor is.

We have the full insights now that we were looking for!

Thanks