Deal is "Won"/Logo Activation -> Proper CSM assignment

Hello. We curretnly have a workflow set up in hubspot that does the following:

  1. sales updates the ‘deal stage’ to ‘won’
  2. hubspot workflow auto assigns the new accounts to the CSMs based on a ‘random distribution percentage’

As a startup, this initially was working fine but we are quickly outgrowing this simplified workflow. Our team has grown and we now need to consider other variables when auto assigning accounts to our CSMs in hubspot.

We need to take into consideration employee PTO/OOO as well as contract start dates that are in the future (for example, the deal is won on Feb 15th but the contract start date is March 1). We are utilizing calendly for scheduling purposes.

Assuming the team would manually manage their OOO in calendly, has anyone built out a workflow to honor these variables (PTO, future start dates AND distribution percentages)? If not, any guidance on setting up a workflow that first and foremost checks/honors OOO?

Hi @AKessler and a big warm welcome, we are delighted to have you here! :orange_heart:
Great question, thanks for asking the HubSpot Community!
I’d love to put you in touch with our Top Experts: Hi @karstenkoehler, @danmoyle and @HubDoPete can you think of ways to achieve this, to help @AKessler, please?
Thanks so much in advance for your valuable insights and have a wonderful day!
Bérangère

Thank you- curious what solutions folks have come up with

Welcome to the Community @AKessler! So, I haven’t built this out as you describe, in part because it wasn’t a need, but also because I don’t think it’s exactly possile as you lay it out. However, in some research, I do think you can get very close by combining a CSM availability flag in HubSpot, logic for future start dates, and either a third‑party round‑robin action or an external automation (Zapier/Make). Here’s what I learned (and would try to build) with some searching and AI research.

Step 1

First thing is to model availability in HubSpot. Because HubSpot can’t read Calendly PTO directly for routing, you need a property on the User/Owner or on a proxy object. I’d start with creating a custom user property (or a central custom object) like: CSM availability (Dropdown: Available / OOO / Limited) or simple boolean OOO = true/false. Then you’ll have each CSM manually update this whenever they go on PTO or OOO (you can link this to an internal form or a simple internal process).

Step 2

Next we want to work to respect future contract start dates. You don’t want deals with a March 1 start date to be “owned” by a CSM on Feb 15. Here’s what that should look like in practice.

  1. Deal hits Deal Stage = Won.
  2. Workflow checks:
    • If Contract start date is in the future, put the deal into a wait step “Until contract start date.”
    • If Contract start date is today or in the past, proceed immediately.
  3. Only after the wait, run the assignment logic so that the CSM who receives it is actually active around that start date.

You can also create a Deal task for the owner with due date = contract start date if you want a human follow‑up synced to that date.

Step 3

Time to implement an OOO‑aware round robin. The way I see it, you have a couple of options here.

First option: Stay fully inside HubSpot with an extension. Unfortunately, native “Rotate record to owner” doesn’t check user availability or PTO. There are small workflow extensions (e.g., the Daeda “Out of Office” round‑robin action) that:

  • Take a list of owners.
  • Skip users who are outside working hours or set as out‑of‑office/unavailable.
  • Return the next available owner in the rotation.​

Then, in your workflow (after the wait until contract start date), you’ll:

  1. Filter deals where CSM owner is unknown.
  2. Call the extension’s “round robin with availability” action with your list of CSMs.
  3. Write the result into the Deal owner / CSM owner property.​

Ideally, this gives you round‑robin distribution percentages and the ‘automatic skip’ of unavailable or OOO CSMs, based on your HubSpot “OOO / availability” settings or the extension’s availability logic.

You other option is to stick with Calendly and add an external router like Zapier, Make, or Tray. Calendly’s native HubSpot integration will create/update contacts and log meetings, but it doesn’t reassign owners on existing records and doesn’t do availability‑aware routing by itself. If you want Calendly OOO to be the single source of truth, here’s what I found could possibly work:

  1. Use Calendly’s “Routing + HubSpot” and/or its Zapier/Make integration to detect when a CSM’s calendar is unavailable or when a booking happens.
  2. In Zapier/Make, you can:
    • Read the Calendly user’s availability or event host.
    • Update a HubSpot OOO or Availability property for that CSM when they mark time off in Calendly (or when they flip a status).
  3. For assignment:
    • Trigger on Deal stage = Won in HubSpot.
    • Look up all CSMs with Availability = Available.
    • Apply your own weighted/random distribution logic in Zapier/Make.
    • Update the deal’s owner in HubSpot via API.

This way, the workflow “honors” Calendly PTO indirectly because PTO → availability flag → router skips them.

Step 4

Here’s where we get to incorporate distribution percentages. In order to do that, preserving your random distribution percentage, here’s your logical options.

If you use a third‑party round‑robin action, most support even or weighted distribution out of the box or via “grouping” of owners.

Or if you use Zapier/Make, store each CSM’s weight in HubSpot (example: CSM load weight = 1, 2, 3). Then the router script chooses an owner randomly but weighted by this field among only the available CSMs. You can also combine this with capacity‑based rules (like “cap at 30 active accounts”) by checking count of open accounts per CSM before assigning.

Final step (Step 5)

Let’s put it all together in an example workflow. In HubSpot (using an availability‑aware round‑robin extension):

  1. Trigger: Deal enters “Closed Won.”
  2. If Contract start date > today, Delay until date = Contract start date.
  3. Check: Deal owner is unknown OR CSM assignment complete is false.
  4. Branch: “Is there at least one CSM with Availability = Available?”
    • Yes → use the Out‑of‑Office Round Robin action with your CSM list.
    • No → optional fallback (assign to a default queue/user or delay 1 day and recheck).
  5. Set Deal owner (or custom CSM owner) to the user returned by the action.
  6. Create internal notification / task scheduled on Contract start date.

I believe this setup should help. It honors PTO / OOO first, it doesn’t prematurely assign future‑start contracts, and it does maintain a balanced distribution across the team.

Hopefully that helps!

For deal stage “Won” triggering proper CSM assignment, the cleanest way is a simple workflow on the deal object:

  • Enrollment: Deal stage is any of “Won”
  • Action: Delay by 1 day (to let any post-win automation settle)
  • Then: Copy property value from Deal Owner (or whoever closes) to a custom “CSM Owner” property
  • Or use branch logic: if Deal Owner is in Sales team A → assign to CSM group X, etc.

If CSMs are tied to company properties (like industry or region), pull from the associated company instead of the deal owner.

This avoids overcomplicating with playbooks or sequences. Test with a small batch first to confirm no loops. Works reliably in most setups I’ve seen.

Hey AKessler - I’ve seen a couple people struggling with this exact scenario, so I rolled my solution into an App called Smart Lead & Ticket Routing.
I believe the Round Robin action does exactly what you want - which is a round-robin but skipping users who are unavailable/out of office.

You’ll need to get the OOO information from Calendly into HubSpot though - if that ends up being a problem let me know, I’m sure I can add something to the app to sync things up.