
A connected GHL sub-account with calendar access.
At least one active calendar in your GHL account.
From your ROASForm dashboard, navigate to Integrations in the sidebar.
Click the Connect button on the GoHighLevel card.
Authorize access in the GHL OAuth flow.
The card shows a green Connected badge once connected.
When clicking Disconnect, a confirmation modal appears explaining what will happen:
All locked calendar elements will be removed from your forms
Calendar endings will remain but become inactive
Existing bookings are not affected
In the form builder, click on an ending (or create a new one) and set its type to Calendar.
Choose GoHighLevel from the calendar provider dropdown.
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)
Hovering over the dot shows a tooltip confirming the status
Click Save to apply. The form builder will automatically handle contact field enforcement (see Section 5).
Tip: Use the
refresh button next to the dropdown to re-fetch your latest calendars if you've made changes in your GHL account.
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.
When a visitor completes your form and reaches a calendar ending:
Availability loads - The form fetches real-time availability from GHL
Visitor picks a slot - They choose a date and time from available slots
Booking is created - ROASForm creates the booking via the GHL API
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.
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.
The form automatically detects the visitor's local timezone and displays it alongside a GMT offset and a live "Current Time" label. All available slots are shown in the visitor's local time - ensuring they book at the correct time regardless of where they are.
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.
GHL requires at least one of email or phone to create a booking. ROASForm enforces this automatically.
When you save a GHL calendar ending:
Form state
What happens
Has both email + phone | Nothing changes |
Has only email | Email is marked |
Has only phone | Phone is marked |
Has neither | Both email + phone elements are auto-injected (both required) |
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.
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.
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"
When GHL is connected, ROASForm automatically creates or updates contacts in your GHL account when a form is submitted.
Specialized form elements are automatically mapped to the corresponding GHL contact fields:
Form Element
GHL Contact Field
Phone | Phone |
Website | Website |
Address | Address |
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.
Go to Integrations in the sidebar
Click the GoHighLevel card
Click Disconnect
A confirmation modal appears - confirm to proceed
What happens when you disconnect:
Calendar endings remain but become inactive (no calendar selected)
Existing bookings already made are not affected
Contact field guards (deletion/required) are lifted once no calendar endings remain
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.
When adding logic rules, some questions in the "jump to" dropdown may appear greyed out (disabled). This prevents jumping over required questions.
Tooltip explanation: Hovering over a disabled item shows a tooltip explaining why:
"Jumping here would skip 'New Email Question' which is required to be answered"
For GHL-enforced elements (e.g., contact fields required by a calendar ending), the tooltip explicitly identifies the integration:
"Jumping here would skip 'Phone Number' (required by GoHighLevel) which is required to be answered"
For multiple skipped questions:
"Jumping here would skip 'New Email Question', 'Phone Number' (required by GoHighLevel) which are required to be answered"
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: Reorder your questions so the required field comes before the jump source, or make the blocking question optional.
If a calendar ending shows a red warning badge 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.
Make sure the calendar is active in your GHL account
Click the
refresh button to re-fetch
Ensure your sub-account has calendar access
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.
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
A calendar ending requires at least one contact field to be mandatory. Add another required contact field first, or remove the calendar ending.