Keen to get some thoughts on a complicated request.
In our business, Sales Reps are contantly 'working' thier portfolios e.g reqesting ownship of Companies and also asking for Companies to be removed from their portfolio.
When this happens (either ownership requests or unassignment requests) I am keen to know if there is an automatic way to reassign all records associated to that company to the new owner?
We also want to have specific rules in place for the record assignment.
I will try to explain in a table:
Scenario - Company A's Record is owned by Rep A, this company has associations to Deals, Tickets and Contacts. Some of these associations are owned by Rep A but some are owned by Rep B.
Some of these associations are also 'Open/Not closed won or lost' but some are also 'closed/closed won or lost'
Company Owner
Associations
Ownership
Status
Company A
Rep A
Deal
Rep A
Open
Deal
Rep A
Closed
Deal
Rep B
Open
Ticket
Rep A
Open
Ticket
Rep A
Closed
Ticket
Rep B
Open
Contact
Rep A
Contact
Rep B
When Company A's ownership is reassigned to Rep C this is what I want to happen:
Company New Owner
Associations
Ownership
Status
Post re assign Ownership
Company A
Rep C
Deal
Rep A
Open
Rep C
Deal
Rep A
Closed
Rep A
Deal
Rep B
Open
Rep B
Ticket
Rep A
Open
Rep C
Ticket
Rep A
Closed
Rep A
Ticket
Rep B
Open
Rep B
Contact
Rep A
Rep C
Contact
Rep B
Rep B
Everything that was owned by Rep A and is 'Open' to MOVE to Rep C.
Anything that was owned by Rep A but is 'Closed' is to STAY with Rep A. Evenything that was with Rep B is to STAY with Rep B.
Would a WF have the ability to do this kind of reassignment? Or are there other ways to complete this task without having to manually reassing every relevant association.
A workflow should be able to action this but it might be a relatively big set of conditions. I'd suggest a workflow per condition potentially to keep it simplier. These get complicated if you want to include exeptions so as long as you have very clear and defined rules on the process and automation this is possible.
Depending on what HubSpot subscription you have you could also lean on custom coded workflows. Basically you can use an API to find and update assocaited records etc using a script.
Happy to help you solve this if you need a hand, we've set up similar for our company (We have 6 ownership fields..... haha)
@TGibs02 I think I mixed up rep B and C from your example. You had said "Evenything that was with Rep B is to STAY with Rep B.", in my instructions I referred to C.
In any case, you have multiple options, including:
Hardcode conditions in either the company or the contact/deal/ticket workflows. You can decide that certain owners are exempted from getting any associated records by adding this as a condition in the company workflow or you could get more granular by deciding that certain users never get associated records of a specific object (no ticket, no deals, no contacts)
You can create an exemption property on the company object, e.g. "Do not trigger owner assignment on associated records" (single checkbox) to and exclude copmanies where this is ticket in the company-based workflow
You can create an exemption property on the contact/deal/ticket object, e.g. "Do not overwrite owner using automation" (single checkbox) and exclude records where this is ticked from the contact/deal/ticket workflows.
There are a lot more levers, these are the first ways that come to mind that handle exceptions.
In any case, the challenge will lie within finding ways to formalize and describe your exceptions. If everything happens on a "a human would have to look at this and decide" kind of basis, neither a low-code-solution (like workflows) nor actual custom code could solve this on a scalable basis.
Let me know if you have any follow-up questions!
Karsten Köhler HubSpot Freelancer | RevOps & CRM Consultant | Community Hall of Famer
Yes, this is possible and fairly straightforward, too, if you know what to do. No need for complicated conditions.
Create a custom contact, ticket, and deal property each of the type "HubSpot user", naming them "Company owner (contact object)", "Company owner (ticket object)", "Company owner (deal object)"
Create a company-based workflow that re-enrolls companies "When filter criteria is met" > "Company owner is known" (this will trigger the workflow whenever the company owner changes), then use three "Copy property value" workflow actions to copy the value from the company owner field into each field from step 1 (I've only drafted one step for the contact, you'd add the two other as well)
Create a contact-based workflow that enrolls contacts "When filter criteria is met" > "Company owner (contact object) is known AND Company owner (contact object) is none of Rep C", then use the "Copy property value" workflow action to copy the value from "Company owner (contact object)" into "Contact owner" – enable re-enrollment for "Company owner (contact object) is known"
Create a deal-based workflow that enrolls deals "When filter criteria is met" > "Company owner (deal object) is known AND Company owner (deal object) is none of Rep C AND Is closed lost it not equal to True AND Is closed won is not equal to true", then use the "Copy property value" workflow action to copy the value from "Company owner (deal object)" into "Deal owner" – enable re-enrollment for "Company owner (deal object) is known"
Create a ticket-based workflow that enrolls deals "When filter criteria is met" > "Company owner (ticket object) is known AND Company owner (ticket object) is none of Rep C AND Time to close is known", then use the "Copy property value" workflow action to copy the value from "Company owner (ticket object)" into "Ticket owner" – enable re-enrollment for "Company owner (ticket object) is known"
That's it 🙂 Essentially what you're doing is making the company owner information available on each object. You're then waiting for a change in that field, checking whether it's rep C or not and whether the deal or ticket is still open, and if so, you copy the information into the actual owner field. (It's not possible to enroll based on the owner of an associated object directly as re-enrollment is disabled then – however we need the re-enrollment to register repeated changes.)
Best regards
Karsten Köhler HubSpot Freelancer | RevOps & CRM Consultant | Community Hall of Famer
Wow Karsten, thanks so much for taking the time to write up that explanation. It's given me a lot to think about.
My only comment is that I would be reluctant to harcode a specific Rep e.g Rep C into a WF, there are instances where a Company could be associated to 10's of deals for example, all with different owners that are not the current company owner. Unless I am misunderstanding.
Maybe we could have a check box on each of the association records that looks at the new Company owner (object) property that you suggested setting up and the actual association owner and if it is the same set as true.
Then when the object based WFs you mentioned comes along it will only do the reassignment if the check box is yes and the other criteria is met?
@TGibs02 I think I mixed up rep B and C from your example. You had said "Evenything that was with Rep B is to STAY with Rep B.", in my instructions I referred to C.
In any case, you have multiple options, including:
Hardcode conditions in either the company or the contact/deal/ticket workflows. You can decide that certain owners are exempted from getting any associated records by adding this as a condition in the company workflow or you could get more granular by deciding that certain users never get associated records of a specific object (no ticket, no deals, no contacts)
You can create an exemption property on the company object, e.g. "Do not trigger owner assignment on associated records" (single checkbox) to and exclude copmanies where this is ticket in the company-based workflow
You can create an exemption property on the contact/deal/ticket object, e.g. "Do not overwrite owner using automation" (single checkbox) and exclude records where this is ticked from the contact/deal/ticket workflows.
There are a lot more levers, these are the first ways that come to mind that handle exceptions.
In any case, the challenge will lie within finding ways to formalize and describe your exceptions. If everything happens on a "a human would have to look at this and decide" kind of basis, neither a low-code-solution (like workflows) nor actual custom code could solve this on a scalable basis.
Let me know if you have any follow-up questions!
Karsten Köhler HubSpot Freelancer | RevOps & CRM Consultant | Community Hall of Famer
A workflow should be able to action this but it might be a relatively big set of conditions. I'd suggest a workflow per condition potentially to keep it simplier. These get complicated if you want to include exeptions so as long as you have very clear and defined rules on the process and automation this is possible.
Depending on what HubSpot subscription you have you could also lean on custom coded workflows. Basically you can use an API to find and update assocaited records etc using a script.
Happy to help you solve this if you need a hand, we've set up similar for our company (We have 6 ownership fields..... haha)