
GoHighLevel Google Calendar & Outlook Sync Guide (2026)
GoHighLevel Google Calendar & Outlook Sync Guide (2026)
By Dr Priya Jaganathan, GoHighLevel Certified Admin · HL Growth Partner, Australia · Updated 8 August 2026 · 10 min read
Quick verdict: GoHighLevel syncs two-way with one primary linked Google or Outlook calendar per user — bookings write into it, and events in it block your GHL availability. The setting most people miss is conflict calendars: any extra calendars (personal, shared, second work account) must be added as check-for-availability calendars, or GHL will happily book over them. Connect per user under My Profile → Integrations, then verify both settings before you trust it.
On this page: How the integration works · Connecting Google & Outlook · Linked vs conflict calendars · Round-robin teams · Invitee experience · Mixed Google/Outlook teams · Troubleshooting · Common mistakes · FAQ · Related articles
The GoHighLevel Google Calendar integration works brilliantly when configured properly and causes embarrassing double-bookings when it is not. Having audited well over a hundred sub-accounts, calendar misconfiguration is in my top three findings every time — usually because someone connected a calendar once, assumed sync meant “everything everywhere”, and never touched the conflict-calendar settings.
This guide covers the full setup for both Google Calendar and Outlook/Office 365: how the connection works, what actually syncs in each direction, how to configure availability checking for round-robin teams, and how to troubleshoot the handful of issues that generate 90% of the support tickets I see from Australian agencies. If you are still deciding on your booking stack, my comparison of Calendly vs GoHighLevel calendars is a useful companion read.
How the GoHighLevel Google Calendar integration works
GHL's calendar sync is a per-user, OAuth-based connection. Each user in a sub-account connects their own Google or Outlook account, then nominates two things:
The primary linked calendar
This is the single calendar GHL writes to. When a contact books through any GHL calendar that includes you as a team member, the appointment is created as an event on this calendar — with the contact's name, appointment details and (if configured) the meeting link. Reschedules and cancellations made in GHL update or remove that event. Sync is two-way for this calendar: if you delete or move the event in Google, GHL registers the change against the appointment.
Conflict (check-for-availability) calendars
These are additional calendars GHL reads but never writes to. Events on them block your availability so slots do not appear to invitees, but no bookings land there. This is where personal calendars, shared team calendars and secondary work accounts belong. One-way, read-only.
That distinction — one write target, many read targets — is the entire mental model. Almost every HighLevel calendar sync problem traces back to someone misunderstanding it.
Connecting Google Calendar and Outlook step by step
Google Calendar
Log in as the user whose calendar you are connecting (not as the agency admin on their behalf — the OAuth token belongs to the logged-in profile). Go to My Profile → Integrations, click Connect next to Google, and approve the OAuth consent screen. Grant all requested permissions; if you untick calendar scopes, the connection will appear successful but sync will silently fail. Once connected, choose your Linked Calendar from the dropdown, then tick every additional calendar you want checked for conflicts. Google's own documentation on sharing and secondary calendars is worth a skim if your account has several — see the Google Calendar Help Centre.
Outlook / Office 365
Same path: My Profile → Integrations → Outlook, sign in with the Microsoft 365 account, and accept the permissions prompt. Note that if your organisation restricts third-party app consent in Entra ID (common in corporate tenants), an admin must approve the LeadConnector app before users can connect. After connecting, select the linked calendar and conflict calendars exactly as with Google. Full platform documentation lives at the GoHighLevel Help Centre.
Then assign the user to a calendar
Connecting your profile does nothing by itself — the user must also be added as a team member on the relevant GHL calendar (Calendars → Calendar Settings → Team & Event Setup). GHL then intersects the calendar's availability windows with the user's connected-calendar busy times to produce the slots invitees actually see. If you are still building your booking setup from scratch, start with my guide to GoHighLevel calendars, booking and round robin.
Linked calendar vs conflict calendars: the sync behaviour matrix
Here is exactly what happens in each configuration. Pin this table somewhere your team can see it.
| Configuration | Blocks GHL availability? | Where do bookings land? | Sync direction |
|---|---|---|---|
| Primary linked calendar | Yes — busy events remove slots | GHL writes appointments here | Two-way |
| Conflict (check-for-availability) calendar | Yes — busy events remove slots | Never — read-only | One-way (calendar → GHL) |
| Calendar on the account but not selected | No — GHL ignores it entirely | Nowhere | None |
| No calendar connected at all | No — only GHL's own appointments block slots | GHL calendar only (in-app) | None |
Two behaviours worth calling out. First, events marked Free in Google or Outlook do not block availability — only Busy events do. Staff who mark tentative personal commitments as Free will get booked over them. Second, all-day events follow the same rule: an all-day event set to Free (Google's default for all-day events) blocks nothing.
Per-user connections for round-robin teams
Round-robin calendars distribute bookings across team members, which means every single member needs their own connected calendar. GHL checks each user's busy times individually and only offers a slot if at least one assigned member is free. One team member with a disconnected or unconfigured calendar poisons the pool: GHL treats them as always available, they win bookings in the rotation, and they get double-booked.
My checklist for teams:
- Every team member connects under their own login at My Profile → Integrations — never a shared “bookings@” account for everyone.
- Each member sets a linked calendar and adds their personal calendar as a conflict calendar. Sales reps with school pickups and gym sessions on a personal Gmail account are the classic double-booking source.
- Verify equal-vs-optimised distribution settings match your intent — I cover the mechanics in round-robin calendars for teams.
- Re-check connections after any password change or Google Workspace security event, because OAuth tokens get revoked silently.
If you route leads across multiple calendars based on custom fields or pipeline stage, the same per-user rules apply at every hop — see multi-calendar routing logic for the full pattern.
What the invitee sees
When a contact books, they receive a native calendar invite from the connected account — a real Google or Outlook invitation that puts the appointment on their calendar with reminders they will actually notice. If the GHL calendar's meeting location is set to Google Meet and the assigned user has Google connected, GHL generates the Meet link automatically and embeds it in the event and the invite. Outlook users get the equivalent via Teams links, or Zoom through the user's Zoom integration.
One caution: if you also send your own confirmation emails through Workflows (triggered on Appointment Booked), the invitee receives both the calendar invite and your branded email. That is fine — desirable, even — but make sure the details match. Timezone-mismatched times between the invite and your workflow email destroys trust instantly. My guide to appointment reminder workflows covers the sequencing that halves no-show rates without duplicating the native invite.
When your team uses a mix of Google and Outlook
Perfectly fine, and common in Australian professional-services firms. Because connections are per user, one rep can link Outlook while another links Google — GHL does not care, and round robin works across both. The practical constraints:
- Meet links only generate for Google-connected users. On a mixed round robin, do not set the location to Google Meet, or Outlook users' bookings will have no link. Use Zoom (per-user Zoom connections) or a static location instead, so every booking behaves identically.
- One provider per user. A user can hold Google and Outlook connections, but only one calendar is the linked (write) calendar. If someone genuinely lives in both, link the calendar they treat as source of truth and add the other as a conflict calendar.
- Standardise busy/free conventions. Outlook's “tentative” status and Google's “Free” events behave differently for availability blocking — agree as a team that anything real is marked Busy.
Troubleshooting the four most common sync failures
Events not blocking availability
Work down this list in order: the event is on a calendar not selected as linked or conflict; the event is marked Free rather than Busy; the OAuth connection has expired; or the user is not actually a team member on the GHL calendar in question. Nine times out of ten it is the first two. Test by creating a Busy event tomorrow at 10am and checking whether the slot disappears from the booking widget.
Timezone mismatches (AEST/AEDT)
Three timezones must agree: the sub-account timezone (Settings → Business Profile), the user's timezone, and the Google/Outlook calendar timezone. Set all three to a named zone like Australia/Sydney or Australia/Brisbane — never a fixed GMT+10 offset, which will not follow the daylight-saving switch each October and April. Queensland businesses serving southern-state clients get bitten by this every single DST changeover: bookings drift one hour because somewhere in the chain a static offset is hiding. Also enable “show slots in the contact's timezone” on the calendar widget so a Perth invitee books 2pm AWST, not 2pm AEST.
Disconnected OAuth
Password changes, Workspace policy updates and Microsoft conditional-access rules all revoke tokens silently. The symptom: new bookings stay in GHL only, and personal events stop blocking slots. GHL shows a reconnect warning under My Profile → Integrations, but users rarely look, so I build a monthly admin task to eyeball every user's integration status — five minutes that prevents the worst category of double-booking.
Duplicate events and double invites
If an invitee receives two events — one calendar invite and a separate Zoom invitation — you have two systems both firing. Pick one owner: let GHL's calendar invite carry the Zoom/Meet link, and switch off Zoom's own email notifications for GHL-created meetings. Similarly, if a staff member sees the same appointment twice on their calendar, they usually have their linked calendar also ticked somewhere as a secondary sync target, or an old Zapier automation is writing events in parallel with the native sync. Kill the duplicate writer; the native integration should be the only thing creating events.
Common mistakes to avoid
- Connecting only a linked calendar and skipping conflict calendars — personal commitments never block availability, and double-bookings follow.
- One shared calendar account for the whole team — round robin cannot check individual availability, and every booking lands on one person's calendar.
- Leaving events marked Free (especially all-day events) and expecting them to block slots.
- Using fixed GMT offsets instead of named Australian timezones, which breaks at every AEST/AEDT changeover.
- Never re-checking OAuth status after password resets or Workspace security changes — the sync dies silently.
- Running a parallel Zapier or Zoom automation that also creates events, producing duplicate invites and confused clients.
If you want your booking calendars, round robins and reminder workflows configured so double-bookings never happen, book a strategy call with the HL Growth Partner team.
Frequently asked questions
Is the GoHighLevel Google Calendar sync one-way or two-way?
The primary linked calendar syncs two-way: GHL writes bookings to it, and changes made in Google (deleting or moving the event) flow back to the GHL appointment. Conflict calendars are strictly one-way and read-only — GHL reads busy times to block availability but never creates events on them.
Can each team member connect their own calendar in one sub-account?
Yes, and for round-robin calendars they must. Connections are made per user under My Profile → Integrations, so every user in the sub-account holds their own OAuth connection, their own linked calendar and their own conflict calendars. GHL checks each member's availability individually when distributing bookings.
Why are my Google Calendar events not blocking availability in GHL?
Usually one of four causes: the calendar holding the event is not selected as the linked or a conflict calendar; the event is marked Free instead of Busy; the OAuth connection has expired and needs reconnecting; or the user is not assigned as a team member on that GHL calendar. Check them in that order.
Does GoHighLevel work with Outlook and Office 365 calendars?
Yes. Outlook/Office 365 connects the same way as Google under My Profile → Integrations, with the same linked-calendar and conflict-calendar model. Corporate Microsoft 365 tenants may need an Entra ID admin to approve the LeadConnector app before users can complete the OAuth flow.
Why are appointment times wrong after daylight saving starts?
Somewhere in the chain a timezone is set as a fixed GMT offset (like GMT+10) instead of a named zone (like Australia/Sydney). Named zones follow the AEDT/AEST switch automatically; fixed offsets do not. Align the sub-account timezone, the user timezone and the Google or Outlook calendar timezone to the same named zone.
