Round-robin route HubSpot leads and notify reps in Slack using Make

medium complexityCost: $10-29/mo

Prerequisites

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:

  1. Go to Data Stores in the left sidebar
  2. Click Add data store
  3. Name it round_robin_state
  4. Add a record structure with one field: counter (Number)
  5. Add an initial record with counter = 0
Why a Data Store?

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:

IndexRepHubSpot Owner IDSlack User ID
0Alice12345678U01AAAA
1Bob23456789U02BBBB
2Carol34567890U03CCCC
3Dave45678901U04DDDD

For each case, set variables: repName, hubspotOwnerId, slackUserId.

Switch vs. Code module

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.