Guide

GoHighLevel calendars and booking links: getting them right

GoHighLevel’s calendar module looks like a ten-minute job. It is not. Get it wrong and you get double-bookings, surveys booked in quote slots, and customers in the wrong timezone confirming appointments your team never sees.

Here’s the setup order that works.

1. Team calendars first, booking calendars second

Before you build a single customer-facing booking page, connect your team’s personal calendars (Google or Outlook) via Settings → Calendars → Integrations. GoHighLevel checks availability against real calendars, so if an engineer’s site visit isn’t in their connected calendar, GHL doesn’t know about it and will happily book a call over it.

This is the single most common cause of double-bookings — not a bug, a missing integration.

2. One calendar per type of appointment, not per staff member

The temptation is to make “Dave’s Calendar”, “Sarah’s Calendar”. Don’t — make “15-minute discovery call”, “60-minute site survey”, “Installer visit”. Then assign staff to each appointment type.

Why: when Dave leaves and Sarah takes over, you edit one calendar’s staff assignment. You don’t rebuild the booking link, redo every workflow that references it, or hunt down every email template that contains it.

3. Set the resource mode deliberately

When you create the calendar, GHL asks how to assign the appointment:

  • Round-robin — spreads bookings across the team. Good for sales calls where any rep will do.
  • Collective — everyone in the group must be free. Good for surveys that need two people.
  • Individual assignment — the picker chooses who they book with. Good when customers book a specific engineer by name.

Round-robin with a single team member and no connected personal calendar is how “the same bloke got booked in three places at once” happens.

4. Guard rails on the booking window

In the calendar settings:

  • Minimum notice — at least 2 hours. Zero-notice bookings arrive while your phone is on silent.
  • Buffer time — 10-15 minutes between appointments, unless you genuinely enjoy back-to-backs with no notes time.
  • Daily maximum — cap it. Your future self will thank you.
  • Working hours per staff member — set them inside the calendar, not just on the connected calendar, or GHL will offer slots your connected calendar says you’re busy.

5. Timezones

Set your account timezone and each calendar’s timezone to the same thing. For a UK business, everything Europe/London. The classic disaster: account set to UTC, calendar set to GMT, customer sees a slot an hour out from the one your team expects. It’s not a bug, it’s two dropdowns nobody checked.

6. Then wire it into the pipeline

The booking link is only useful where customers actually see it:

  • New-lead instant reply SMS contains the discovery-call link
  • Quote email contains the survey link
  • Won-stage workflow sends the job-booking link

Use the calendar’s own placeholders ({{booking_link}} etc.) rather than pasting raw URLs, so if you ever rebuild the calendar you don’t have to edit every template.

Sanity checks before you go live

  1. Book a test appointment from an incognito window — does the confirmation email arrive, with the right timezone?
  2. Add a fake event to a connected personal calendar — does the booking page now hide that slot?
  3. Cancel the test appointment — does the cancellation workflow fire and free the slot?

Ten minutes of testing beats a month of “sorry, we double-booked you” phone calls.

← All guides