Round-robin route HubSpot leads and notify reps in Slack using Make
Prerequisites
- Make account (Core plan or higher recommended)
- HubSpot connection configured in Make via OAuth
- Slack connection configured in Make
- A Make Data Store for round-robin state
- A mapping of HubSpot owner IDs to Slack user IDs
Step 1: Create a Data Store for the counter
Before building the scenario, create a Data Store to persist the round-robin index:
- Go to Data Stores in the left sidebar
- Click Add data store
- Name it
round_robin_state - Add a record structure with one field:
counter(Number) - Add an initial record with
counter=0
Make scenarios are stateless. The Data Store persists a value across scenario runs -- exactly what's needed for tracking which rep is next in the rotation.
Step 2: Add a Watch Contacts trigger
Create a new scenario. Add a HubSpot CRM -> Watch Contacts module:
- Connection: Your HubSpot OAuth connection
- Watch: New contacts
- Limit: 10
- Properties: Select
firstname,lastname,email,company,jobtitle,hubspot_owner_id
Step 3: Filter out already-assigned contacts
Add a Filter between the trigger and the next module:
- Condition:
hubspot_owner_id-> Does not exist (is empty)
Step 4: Read and update the round-robin counter
Add a Data Store -> Get a Record module:
- Data Store:
round_robin_state - Key: Your record ID
Then add a Tools -> Set Variable module to calculate the assigned rep:
- Variable name:
repIndex - Value:
{{1.counter % 4}}(replace 4 with the number of reps)
Add a Data Store -> Update a Record module to increment:
- counter:
{{1.counter + 1}}
Step 5: Map rep index to owner and Slack IDs
Add a Tools -> Switch module (or a Code module) to map the index to rep details:
| Index | Rep | HubSpot Owner ID | Slack User ID |
|---|---|---|---|
| 0 | Alice | 12345678 | U01AAAA |
| 1 | Bob | 23456789 | U02BBBB |
| 2 | Carol | 34567890 | U03CCCC |
| 3 | Dave | 45678901 | U04DDDD |
For each case, set variables: repName, hubspotOwnerId, slackUserId.
Make's Switch module works for a small team (under 8 reps). For larger teams, use a JavaScript Code module with an array lookup -- it's easier to maintain than a long switch with many cases.
Step 6: Update the contact owner in HubSpot
Add a HubSpot CRM -> Update a Contact module:
- Contact ID:
{{1.id}}(from the Watch Contacts trigger) - Contact Owner:
{{hubspotOwnerId}}
Step 7: Send a Slack DM
Add a Slack -> Create a Message module:
- Connection: Your Slack connection
- Channel ID:
{{slackUserId}}(DM by user ID) - Text:
🆕 *New Lead Assigned to You*
*{{1.firstname}} {{1.lastname}}* — {{1.jobtitle}} at {{1.company}}
Email: {{1.email}}
<https://app.hubspot.com/contacts/YOUR_PORTAL_ID/contact/{{1.id}}|View in HubSpot>Step 8: Schedule and activate
- Set the scenario schedule to Immediately (processes as soon as HubSpot emits the event)
- Toggle the scenario to Active
Cost
- Free plan: 1,000 credits/month. Each new lead uses ~5 credits (trigger + data store read/write + HubSpot update + Slack). Handles ~200 leads/month on free.
- Core plan: $10.59/mo for 10,000 credits. Handles ~2,000 leads/month.
Need help implementing this?
We build and optimize automation systems for mid-market businesses. Let's discuss the right approach for your team.