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.
- Deal hits Deal Stage = Won.
- 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.
- 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:
- Filter deals where CSM owner is unknown.
- Call the extension’s “round robin with availability” action with your list of CSMs.
- 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:
- 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.
- 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).
- 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):
- Trigger: Deal enters “Closed Won.”
- If Contract start date > today, Delay until date = Contract start date.
- Check: Deal owner is unknown OR CSM assignment complete is false.
- 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).
- Set Deal owner (or custom CSM owner) to the user returned by the action.
- 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!