How to Connect Google Calendar to GoHighLevel (2-Way Sync Setup)

by Fahim

Clients double-booking your calendar almost always comes down to one subtle mistake: connecting Google Calendar in sub-account integrations instead of linking it directly to the user profile. When you configure the connection at the sub-account level, GoHighLevel can write events to Google, but it completely fails to read your existing appointments to block out slots.

I set up 2-way Google Calendar sync on every new HighLevel sub-account I touch. Here is the exact walkthrough to connect your Google account, pick the right sync mode, configure conflict checks across multiple calendars, and verify that time blocks actually block your public booking widgets.

Close-up view of a synchronized digital calendar schedule on an office monitor
Close-up view of a synchronized digital calendar schedule on an office monitor

The Difference Between Sub-Account and User-Level Integration

HighLevel gives you two separate places to hook up a Google account. Knowing which one does what will save you hours of head-scratching:

  • Sub-Account Integrations (Settings > Integrations): Connects your Google account for Google Analytics tracking, Google Business Profile messaging, and Google Lead Form ads. This integration does not manage individual user calendar availability.
  • User Profile Integrations (Settings > My Staff / Profile): Connects a specific user’s Google Calendar. This handles true 2-way event syncing, checks for busy blocks, and generates dynamic Google Meet links for booked calls.

If you want incoming bookings to block your personal Google Calendar—and personal Google events (doctor appointments, focus blocks, internal syncs) to block your HighLevel booking widget—you have to configure this inside the user profile.

Step 1: Connect Google Calendar at the User Profile Level

First, link your Google Workspace or Gmail account to the individual user profile assigned to take calls.

  1. Log into your HighLevel sub-account and go to Settings > My Staff (or Settings > Profile if you are logged in as a standard user).
  2. Click Edit on the user profile you want to sync.
  3. Scroll down to the User Calendar Configuration section.
  4. Under Integrations, find Google and click Sign in with Google.
  5. Pick your Google account and grant all requested permissions. Make sure you check the box granting HighLevel permission to view, edit, and create events on your Google Calendar.

If you skip any permission scopes during the OAuth prompt, HighLevel will show a successful connection on the surface, but it’ll silently fail when reading busy slots or injecting events.

Step 2: Configure Conflict Checks and Primary Calendar Sync

Once authenticated, HighLevel shows two distinct dropdowns under Calendar Configuration: Primary Calendar and Check for Conflicts.

Here is how to set both up without causing sync loops:

  • Primary Calendar: The Google Calendar where HighLevel writes newly booked appointments. Select your main work calendar here and pick 2-way sync (or Linked, depending on your UI version) so changes made inside Google Calendar push back to HighLevel automatically.
  • Check for Conflicts: This dropdown lets you select multiple calendars under the authenticated Google account. If you keep a personal calendar, a shared team calendar, and a client project calendar, check them all. HighLevel will evaluate each one and pull availability accordingly.

For more details on setting up team members and multi-user configurations, check out our guide on round robin calendar setup in GoHighLevel.

Step 3: Choose Your Sync Option (2-Way vs 1-Way vs Smart Sync)

When selecting your Primary Calendar, HighLevel asks for a sync mode. Picking the wrong option here is the primary reason appointment updates fail to mirror properly across platforms.

Here is how each mode behaves under the hood according to the official HighLevel documentation:

  • Two-way: Any appointment booked through HighLevel gets written to Google. If you reschedule, edit, or delete that event inside Google Calendar, HighLevel updates the contact’s appointment record accordingly.
  • One-way: Events booked in HighLevel push to Google Calendar, but edits inside Google Calendar will not touch HighLevel records. (Personal Google events still block availability if selected under conflict checks).
  • Smart Sync: When an event created by HighLevel gets updated in Google Calendar, HighLevel updates the appointment record. But if you create an event directly in Google Calendar, HighLevel reads it strictly for conflict checking—it won’t create a dummy contact or CRM lead record.

For almost every setup, Two-way or Smart Sync is what you want. Go with Smart Sync if you have internal calendar events that shouldn’t pollute your CRM contacts table.

Step 4: Map the User to a HighLevel Calendar

Connecting your Google account to your user profile doesn’t automatically route bookings to you. You still need to assign that profile to an active HighLevel Calendar.

  1. Navigate to Calendars > Calendar Settings.
  2. Find your calendar, click the three dots (), and select Edit.
  3. Under the Team Members (or User Assignment) tab, make sure your user profile is added.
  4. Under the Meeting Location field, choose Google Meet if you want HighLevel to dynamically spin up Google Meet links for every booking via the Google Calendar API.
  5. Hit Save.

If your calendar still shows no available times after mapping your user, take a look at our guide on how to fix GoHighLevel calendar not showing available slots to track down schedule overlaps.

Testing the Sync and Inspecting Event Data

Never assume an integration works until you test it in both directions. Here is the quick verification checklist I run on every new build:

  1. Test Google → HighLevel: Open Google Calendar. Add a placeholder event titled “Focus Time” for tomorrow at 2:00 PM. Open your public HighLevel booking widget in an incognito window. Verify that the 2:00 PM slot is completely gone.
  2. Test HighLevel → Google: Book a dummy appointment on the widget using a secondary email. Open Google Calendar. Within 15 to 45 seconds, the new event should pop up with contact details and meeting links in the event body.
  3. Test Rescheduling: Drag the event in Google Calendar one hour forward. Refresh your HighLevel dashboard under Calendars > Appointments to confirm the appointment time updated cleanly.

When HighLevel pushes a calendar event, the internal system payload maps the appointment metadata straight into your calendar. Here is an example of the payload generated by HighLevel’s calendar engine:

{ "calendarId": "0e9f8a81-7d12-4c6e-9821-3b7c4f014abc", "contactId": "cnt_9876543210", "appointment": { "title": "Strategy Call with Alex Miller", "startTime": "2025-04-10T14:00:00-04:00", "endTime": "2025-04-10T14:30:00-04:00", "status": "confirmed", "meetingLocationType": "google_meet", "meetingUrl": "https://meet.google.com/abc-defg-hij", "source": "booking_widget" }, "syncStatus": { "provider": "google", "syncedAt": "2025-04-08T18:24:12Z", "googleEventId": "7k3m8p0r2v9w4x1y6z5q" }
}

This payload shows how HighLevel maps the Google Event ID back to the local CRM appointment record, keeping bidirectional syncs accurate over time.

Common Gotchas and Troubleshooting

If slots disappear entirely or bookings aren’t syncing across, check these three common tripwires:

1. The “All-Day Event” Lockout

When you create an all-day event in Google Calendar (like a holiday or reminder), Google defaults the availability status to “Busy”. HighLevel sees that and nukes your entire 8:00 AM to 5:00 PM availability for that day. To fix it, open the all-day event in Google Calendar, flip Show as from Busy to Free, and save.

2. Timezone Mismatches

If bookings land 3 hours off, your HighLevel account timezone, sub-account timezone, and Google Calendar timezone are out of sync. Check your sub-account timezone under Settings > Business Profile, user timezone under Settings > My Staff, and verify your Google Calendar timezone settings match.

3. Expired OAuth Tokens

Google OAuth tokens will get revoked if you change your Google Workspace password or cycle third-party security permissions. If sync randomly stops working, go back to Settings > My Staff > Edit User > User Calendar Configuration, disconnect Google, and re-authenticate.

If you’re dealing with team-wide availability problems, check out our guide on calendar conflict and hours setup.

Frequently Asked Questions

Can I check multiple Google accounts for one user profile?

No. A single HighLevel user profile can only authenticate against one Google account at a time. However, within that single Google account, you can select multiple sub-calendars (personal, work, or team calendars shared with you) under Check for Conflicts.

Does deleting an appointment in Google Calendar delete the contact in HighLevel?

No. Deleting an event in Google Calendar marks the appointment status as Cancelled or removes it from your calendar view in HighLevel, but the contact record and conversation history stay intact in the CRM.

Why are my HighLevel appointments not showing Google Meet links?

Check Calendars > Calendar Settings > Edit Calendar and make sure Meeting Location is explicitly set to Google Meet. If it’s blank or set to Custom, HighLevel creates a plain calendar entry without generating video meeting links.

How fast does the 2-way sync process changes?

Pushing from HighLevel to Google Calendar takes between 5 and 15 seconds. Pulling updates from Google Calendar back into HighLevel takes between 30 and 90 seconds depending on webhook queue latency on Google’s API side.

Next Steps for Your Booking System

Once 2-way sync is active, your availability handles itself automatically without the risk of overlapping appointments. From here, pair your calendar with automated reminders so people actually show up. You can also hook your calendar into our missed call text back workflow to capture missed callers and funnel them straight to your booking link.

all_in_one_marketing_tool