Two reps get triple-booked at 2:00 PM while your third rep sits with an empty calendar all afternoon. It is messy, frustrating, and usually comes down to a couple of misconfigured settings inside GoHighLevel.
HighLevel handles team scheduling natively, but if your user availability, sync directions, or queue logic are out of order, you will get phantom availability or leads bounced between the wrong reps. Here is how I set up and debug Round Robin calendars so routing actually works as expected.

Pick Your Distribution Logic: Equal Distribution vs. Priority
HighLevel gives you two distinct algorithms for routing appointments across your team: Optimize for Availability and Optimize for Equal Distribution.
Here is how they actually behave under the hood:
- Optimize for Availability: The widget shows every open slot across all assigned reps. If Rep A is booked, the slot stays open as long as Rep B or Rep C is free. When multiple reps are free at the exact same time, GHL picks whoever has the higher priority weight (High, Medium, Low).
- Optimize for Equal Distribution: GHL tracks how many appointments each user has received over a set window (e.g., last 24 hours, last 7 days, or all time). When a prospect books, GHL gives the call to the rep with the lowest total booking count in that window.
Use Optimize for Availability if your main goal is speed-to-lead and offering the widest range of times. Pick Optimize for Equal Distribution if you need fair lead distribution and commission balance across a sales floor.
Step 1: Connect Team Member Calendars and Check Permissions
Before touching the calendar builder, every single rep needs their Google Workspace or Microsoft Outlook calendar synced to their individual GHL user profile. Skip this, and HighLevel cannot read external busy events—meaning you will get double-booked.
Have each team member (or an admin) complete these steps:
- Head to Settings > My Profile.
- Scroll down to Integrations and connect their Google or Outlook account.
- Under Calendar Configuration, pick their Primary Calendar (where new GHL bookings land).
- Under Check for Conflicts, select every secondary calendar (personal calendars, shared team calendars) that should block out their working time.
If you manage multiple sub-accounts, make sure each user has proper permissions under sub-account user roles and permissions. If a user lacks appointment permissions, GHL will quietly drop them from the routing pool.
Step 2: Create and Configure the Round Robin Calendar
Once individual integrations are set up, build the team calendar asset:
- Go to Calendars > Calendar Settings.
- Click Create Calendar in the top right.
- Select Round Robin.
Now configure your team parameters on the Team Members tab:
- Add Team Members: Select everyone who should take calls from this calendar.
- Set Priority: Assign Low, Medium, or High priority to each user. If two reps are open at 10:00 AM under Availability optimization, GHL routes the call to the higher-priority user.
- Meeting Location: Set custom meeting links per user (their individual Zoom static link, Google Meet URL, or phone number). Choose Custom and paste their link if you are not using HighLevel’s native video tool.
Check the official HighLevel Round Robin documentation if you need to set up complex multi-location routing rules.
Step 3: Define Slot Duration, Buffers, and Working Hours
Click over to the Availability tab to control how slots render on your booking widget:
- Slot Duration: The actual length of the call (e.g., 30 minutes).
- Slot Interval: How frequently slots start (e.g., every 15 minutes vs. every 30 minutes).
- Buffer Duration: Padding before and after meetings. A 10-minute post-meeting buffer prevents back-to-back calls from running over.
- Minimum Scheduling Notice: Prevents leads from booking calls 5 minutes from now. Set this to at least 2 to 4 hours.
If your calendar still shows empty slots when users are actually busy, check our guide on configuring calendar buffer time and minimum notice to debug overlapping constraints.
Under User Availability, set each rep’s working hours. If Rep A works 8:00 AM to 4:00 PM EST and Rep B works 10:00 AM to 6:00 PM EST, define their schedules individually. The widget will adjust availability automatically as the day moves along.
Step 4: Automate Contact Assignment via Workflows
When an appointment is booked on a Round Robin calendar, HighLevel attaches the assigned user to the appointment. But it does not always update the Assigned User on the Contact Record by default. If you want that rep to own the contact record and receive incoming SMS alerts, you need a workflow.
Here is how to set it up:
- Go to Automation > Workflows and click Create Workflow > Start from Scratch.
- Add the trigger: Customer Booked Appointment.
- Filter by In Calendar and select your Round Robin calendar.
- Add an action: Assign to User.
- Set the assignment type to Assigned User from Calendar (this dynamically assigns the contact to whoever got the Round Robin booking).
- Add internal notifications (SMS or Email) to alert that rep immediately.
Here is what the payload looks like when HighLevel fires a calendar webhook to your endpoints:
{ "type": "AppointmentBooking", "locationId": "loc_abc123xyz", "calendarId": "cal_rr_sales_demo", "appointment": { "id": "apt_987654321", "startTime": "2026-04-10T14:00:00-04:00", "endTime": "2026-04-10T14:30:00-04:00", "status": "confirmed", "assignedUserId": "usr_rep_mike_456", "userEmail": "mike@agency.com", "userName": "Mike Sanders", "meetingUrl": "https://zoom.us/j/1234567890" }, "contact": { "id": "cnt_555888999", "firstName": "Alex", "lastName": "Taylor", "email": "alex@example.com", "phone": "+15552345678" }
}If you need to pass custom contact data or calendar metadata to an external API, check out our guide on sending custom values and contact fields in HighLevel webhooks.
The Gotcha: How to Fix Ghost Availability and Mismatched Timezones
The most common issue during setup: a rep gets booked for a time slot where they already had a doctor’s appointment on their personal Google Calendar. This almost always comes down to sync direction or event types.
Check these three settings:
- Two-Way Sync vs. One-Way Sync: In Settings > My Profile > Calendar Configuration, ensure the integration mode is set to Two-way. If set to One-way, GHL writes events to Google Calendar but will not read external events to block out time.
- Check for Conflicts: In the user’s profile settings, make sure their primary personal calendar is checked in the conflict dropdown list.
- All-Day Events: Google Calendar defaults all-day events to “Free”. If a rep creates an “Out of Office” placeholder as an all-day event, they must explicitly mark the event status as Busy in Google Calendar; otherwise, GHL treats their entire day as available.
If you run into persistent blank screens or missing times, read through our detailed breakdown on how to fix GoHighLevel calendar not showing available slots.
How to Test Your Round Robin Queue with Mock Bookings
Do not embed your calendar on a live funnel without testing the distribution logic first. Here is the test routine I run on every new team setup:
- Open an incognito window and go to the public URL of your Round Robin calendar.
- Book an appointment for tomorrow at 10:00 AM using a test email (e.g.,
test1@example.com). - Check Calendars > Appointments in GHL to verify which rep got the booking.
- Open a second incognito window and book the exact same slot (tomorrow at 10:00 AM) using
test2@example.com. - Verify that GHL assigned the second booking to the next rep in line based on your priority weights or equal distribution counter.
- Confirm the assigned rep received their internal notification with their unique meeting URL.
To streamline bookings for returning leads on landing pages, you can also pre-populate contact details on GoHighLevel booking pages.
Frequently Asked Questions
What happens if all team members are busy at a specific time?
The time slot disappears entirely. If every assigned rep has a calendar conflict or is outside their configured working hours, GHL hides that slot automatically.
Can I assign different call lengths to different reps on the same Round Robin calendar?
No. Slot duration, slot intervals, and buffer times live at the calendar level. If senior reps need 45-minute discovery calls and junior reps handle 15-minute qualification calls, you must build two separate Round Robin calendars.
Does HighLevel track no-shows against Equal Distribution counters?
No. GHL increments the counter as soon as the appointment is created. If an appointment is later marked as “Cancelled” or “No-Show”, the algorithm does not automatically decrement the counter for that rep unless you manually reassign or wait out the lookback window.
Can I add external reps who do not have a HighLevel user account?
No. Everyone in the Round Robin pool must be an active User in that HighLevel sub-account with a linked primary calendar. You can invite them with restricted permissions so they only see their own assigned contacts and appointments.
Next Steps for Your Team Booking Stack
Now that your Round Robin calendar routes calls cleanly, make sure your automated reminders do not wake prospects up in the middle of the night. Check out our guide on configuring SMS quiet hours and sending windows to keep reminders restricted to normal daytime hours.

