
A connected GHL sub-account with calendar access.
At least one active calendar in your GHL account.
From your ROASForm dashboard, navigate to Connect > Integrations.
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:
Lead syncing to GoHighLevel will stop
Calendar bookings through GoHighLevel will stop working
Existing submissions and 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)
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.
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 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.
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.
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
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 Connect > Integrations
Click Manage on the GoHighLevel card
Click Disconnect
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
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). 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.
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.
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.
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.