company logo

Help center

All collectionsCalendars & IntegrationsGoHighLevel Calendar Integration

GoHighLevel Calendar Integration

Connect your GoHighLevel (GHL) calendar to ROASForm and let your form visitors book appointments directly, no redirects, no extra steps

Jovan StojanovicยทOctober 9, 2026

Requirements

  • A connected GHL sub-account with calendar access.

  • At least one active calendar in your GHL account.

Connecting Your GHL Account

  1. From your ROASForm dashboard, navigate to Connect > Integrations.

  2. Click the Connect button on the GoHighLevel card.

  3. Authorize access in the GHL OAuth flow.

  4. The card shows a green Connected badge once connected.

Disconnect Confirmation

When clicking Disconnect, a confirmation modal appears explaining what will happen:

  • Lead syncing to GoHighLevel will stop

  • Calendar bookings through GoHighLevel will stop working

  • Existing submissions and bookings are not affected

Adding a Calendar to Your Form

Step 1) Create or Edit a Form Ending

In the form builder, click on an ending (or create a new one) and set its type to Calendar.

Step 2) Select GoHighLevel as the Provider

Choose GoHighLevel from the calendar provider dropdown.

Step 3) Pick a Calendar

Select the GHL calendar you want visitors to book into. Each calendar shows:

  • A green dot for active calendars or a red dot for inactive calendars (inactive calendars are disabled and cannot be selected)

Step 4) Save

Click Save to apply. The form builder will automatically handle contact field enforcement (see Contact Field Enforcement below).

Tip: Use the ๐Ÿ”„ refresh button next to the dropdown to re-fetch your latest calendars if you've made changes in your GHL account.

Multiple Endings

You can have multiple calendar endings in the same form, even mixing GHL with Calendly. Use scoring to route leads to different calendars based on their answers.

How Booking Works

When a visitor completes your form and reaches a calendar ending:

  1. Availability loads: The form fetches real-time availability from GHL

  2. Visitor picks a slot: They choose a date and time from available slots

  3. Booking is created: ROASForm creates the booking via the GHL API

  4. Confirmation: The visitor sees a confirmation, and both they and the host receive calendar invites

The booking happens server-side through the GHL API. The visitor never leaves your form: there's no redirect to an external booking page.

Live Preview in the Form Builder

The form builder shows real availability from your GHL calendar, not mock data. You can browse dates and time slots directly in the builder to verify your calendar is working correctly before publishing.

Tip: Preview mode doesn't create real bookings. You can safely click through the calendar without affecting your schedule.

Timezone Detection

The form automatically detects the visitor's local timezone and shows it with its UTC offset, for example "Sarajevo (UTC+02:00)", with the visitor's current time next to it. All available slots are shown in the visitor's local time, ensuring they book at the correct time regardless of where they are.

Slot Duration

The slot length is determined by your GHL calendar configuration. ROASForm reads the slot duration automatically from the calendar settings: no manual configuration needed in the form builder.

Contact Field Enforcement

GHL requires at least one of email or phone to create a booking. ROASForm enforces this automatically.

Auto-Injection Rules

When you save a GHL calendar ending:

Form state

What happens

Has both email + phone

Nothing changes

Has only email

Email is marked required (no phone added)

Has only phone

Phone is marked required (no email added)

Has neither

Both email + phone elements are auto-injected (both required)

Deletion Guard

You cannot delete the last remaining email or phone element while a GHL calendar ending exists. A toast notification identifies which ending requires it:

"At least one email or phone element is required by calendar ending: Calendar 2"

You can delete one contact field as long as the other remains.

Required Toggle Guard

You cannot toggle required off on the last remaining required email or phone element:

"At least one required email or phone element is needed by calendar ending: Calendar 2"

You can toggle required off on one field as long as the other is still required.

Multiple Calendar Endings

If multiple calendar endings exist, the toast messages list all affected endings:

"At least one email or phone element is required by calendar ending: Calendar 2, Calendar 3"

CRM Contact Sync

When GHL is connected, ROASForm automatically creates or updates contacts in your GHL account when a form is submitted.

Auto-Mapped Fields

When you add an Email, Phone, Website or Address question to a form that already has GoHighLevel selected, its mapping is filled in for you:

Form Element

GHL Contact Field

Email

Email

Phone

Phone

Website

Website

Address

Address

Custom Field Mapping

You can map any form element to a GHL contact field (standard or custom) using the integration mapping panel in each element's settings. This lets you sync data like company name, city, or any custom fields you've created in your GHL location.

Disconnecting Your Calendar

  1. Go to Connect > Integrations

  2. Click Manage on the GoHighLevel card

  3. Click Disconnect

  4. A confirmation modal appears: confirm to proceed

What happens when you disconnect:

  • Calendar endings stay in your forms with their calendar still selected. Visitors who reach one see Scheduling Unavailable until you reconnect.

  • Existing bookings already made are not affected

Graceful Degradation

If GHL is disconnected after a form is published, the system handles it gracefully:

  • The form submission is still recorded normally: no data is lost

  • The frontend displays a "Scheduling Unavailable" panel with the message: "We are currently unable to accept bookings online right now. Please check back later or contact us directly." along with a Try again button

  • You can reconnect GHL at any time to restore full calendar functionality, no form changes needed

Note: The visitor still reaches the calendar screen (it is not bypassed). They see a clear error state rather than a broken or empty calendar.

Logic Jump Guards

When adding logic rules, some questions in the "jump to" dropdown may appear greyed out (disabled). Only questions a calendar ending needs block a jump: for GoHighLevel, Email or Phone, and only when no other Email or Phone question sits outside the skipped range. Other required questions can be skipped.

Tooltip explanation: Hovering over a disabled item shows a tooltip headed Required by "<ending name>": followed by a bulleted list of the questions that jump would skip.

Ending Validation

Calendar endings in the "jump to" dropdown may also appear disabled if the ending itself has configuration issues (e.g., missing calendar selection or missing required contact fields). A tooltip explains the specific issue.

To unlock a target: Move that contact question earlier, so it comes before the jump source, or fix the ending.

Troubleshooting

Calendar ending shows a warning icon

If a calendar ending shows a red warning icon and a red-tinted row in the sidebar, it means the ending has a configuration issue. Common causes:

  • No calendar is selected

  • Required contact fields (email or phone) are missing from the form

Open the calendar settings modal to view the specific issue and resolve it.

Calendars not showing up

  • Make sure the calendar is active in your GHL account

  • Click the ๐Ÿ”„ refresh button to re-fetch

  • Ensure your sub-account has calendar access

"This time slot was just booked by someone else. Please select another time."

Another visitor booked the same slot before your visitor could confirm. The form will display an error and the visitor can choose a different time.

Can't delete email / phone element

A calendar ending requires at least one contact field. The toast notification tells you which ending. To remove the restriction:

  • Delete or change the calendar ending, or

  • Add another email or phone element before deleting the current one

Can't toggle "required" off on a contact field

A calendar ending requires at least one contact field to be mandatory. Add another required contact field first, or remove the calendar ending.

Did this answer your question?
๐Ÿ˜ž
๐Ÿ˜
๐Ÿ˜