Skip to main content

GoHighLevel integration

Updated over a week ago

This guide explains how partners can connect GoHighLevel (GHL) with a Newo.ai AI Employee and configure AI-powered booking, CRM sync, and pipeline automation.

Create a new project

Before connecting GoHighLevel, you need to create a new project in the Newo.ai Builder and add the GHL integration module. Use the following values when creating the project:

  • Idn: gohighlevel

  • Title: gohighlevel

  • Module: ghl_integration

To create a new project, follow the steps in Create a new project.

Authorize GoHighLevel with OAuth

The GoHighLevel OAuth authorization (ghl_oauth_code) is required to establish the connection between Newo.ai and GoHighLevel. The integration will not function without completing this one-time authorization flow. The OAuth process generates a single-use verification code that Newo.ai uses to create secure access tokens.

  1. Navigate to the Attributes page in the Builder and navigate to the GoHighLevel settings.

  2. In the ghl_oauth_code attribute, click the authorization link to open the GoHighLevel authorization page.

  3. Follow the onscreen prompts to log in, review app details, select the sub-account, and confirm the conversation provider.

  4. On the "Access Granted" screen, click the verification code to copy it. This code is single-use only.

  5. Return to the Builder. Paste the copied code into the ghl_oauth_code attribute field.

  6. Click Save.

  7. Click Publish All.

⚠️ CAUTION

The OAuth code is single-use. If it expires or fails, you must repeat the entire authorization flow to generate a new code.

πŸ—’οΈ NOTE

To reveal the ghl_oauth_code field, toggle Show Hidden on the AI Employee dashboard.

Calendar selection logic

The ghl_selection_type setting defines how your AI Employee selects a calendar during a booking conversation. This is the most critical integration setting because it controls the entire downstream booking flow.

Selection modes

Mode

Attribute value

Description

Best for

Single

Single

The AI Employee always uses the default booking calendar set in ghl_calendar. No dynamic selection occurs.

Single-service businesses (e.g., a dentist office with one appointment type).

Name

Name

The AI Employee listens for a service name during the conversation and selects the matching calendar. Requires AI selection instructions.

Multi-service businesses with distinct offerings (e.g., a salon offering "Haircut" and "Color Treatment").

Duration

Duration

The AI Employee detects the requested meeting length (e.g., 30 or 60 minutes) and selects the matching calendar. Requires one calendar per duration and AI selection instructions.

Businesses that differentiate appointments by length (e.g., a consultant offering 30-minute and 60-minute sessions).

❗❗ IMPORTANT

Calendar selection modes are mutually exclusive. You cannot combine Name and Duration logic. Choose one mode that best fits the business.

Example β€” Single mode: A dental clinic offers only general checkups. Set ghl_selection_type to Single and select a calendar in the ghl_calendar attribute. Every booking goes to that one calendar.

Example β€” Name mode: A spa offers "Massage" and "Facial" services, each with its own calendar in GoHighLevel. Set ghl_selection_type to Name. When a caller says "I'd like to book a massage," the AI Employee matches "Massage" to the corresponding calendar. The ghl_calendar attribute is ignored in this mode.

Example β€” Duration mode: A law firm offers 30-minute consultations and 60-minute strategy sessions, each with a separate calendar. Set ghl_selection_type to Duration. When a caller requests "a 30-minute consultation," the AI Employee selects the 30-minute calendar. The ghl_calendar attribute is ignored in this mode.

AI selection instructions

The ghl_selection_criteria setting provides the AI Employee with instructions on how to determine the correct calendar when ghl_selection_type is set to Name or Duration. This field is required for dynamic selection modes and is ignored in Single mode.

❗❗ IMPORTANT

The AI Employee must return one single value in plain text based on these instructions. Do not include explanations, extra formatting, or multiple values.

Example β€” Name mode instructions:

Identify the service the caller is requesting.
Available calendars: Consultation, Demo, Follow-Up.
Return only the exact calendar name.

In this example, if the caller says "I'd like a demo," the AI Employee returns Demo and selects the matching calendar.

Example β€” Duration mode instructions:

Extract the appointment duration in minutes from the conversation.
Return only the number: 30 or 60.

In this example, if the caller says "I need an hour-long session," the AI Employee returns 60 and selects the 60-minute calendar.

πŸ—’οΈ NOTE

Calendar names in your instructions must match GoHighLevel calendar names exactly. Even small differences (capitalization, spacing, punctuation) cause matching failures.

Save conversation history

The ghl_enable_client_history setting controls whether conversation transcripts are saved to the contact's Notes section in GoHighLevel.

This setting does not affect booking behavior or AI Employee logic. It is purely for record-keeping.

Value

Behavior

True

Transcripts are saved to the GoHighLevel contact record. Useful for debugging, quality review, and team visibility.

False

No conversation data is written to the contact record.

Example: An agency managing multiple client accounts enables this setting (True) during the initial rollout period so they can review AI Employee conversations and verify booking accuracy. After the integration is stable, they may choose to disable it.

Detect time zone from conversation

The ghl_use_timezone_from_conversation setting determines whether the AI Employee adapts availability to the caller's local time zone or uses the calendar's fixed time zone.

Value

Behavior

Best for

True

The AI Employee detects time zone cues from the conversation (e.g., "I'm in PST" or "Eastern time") and adjusts available slots accordingly.

Virtual or remote businesses that serve callers in multiple time zones.

False

The AI Employee presents availability using the calendar's configured time zone only.

Local businesses with a fixed physical location (e.g., dental clinics, restaurants, local service providers).

Pre-load availability on start

The ghl_check_availability_on_conversation_start setting allows the AI Employee to proactively suggest open time slots at the beginning of a call, rather than waiting for the caller to ask.

This setting only works when ghl_selection_type is set to Single. In Single mode, the AI Employee knows which calendar to check before the conversation begins, so it can pre-load slots immediately.

⚠️ CAUTION

Enabling this setting with Name or Duration logic causes the AI Employee to suggest availability from the default calendar before the correct calendar has been identified. This results in incorrect slot suggestions.

Sync call status

The ghl_sync_conversation setting controls whether final call outcomes (completed, busy, no-answer, etc.) are synced back to GoHighLevel after a conversation ends.

This setting is optional. Enable it only if you use GoHighLevel workflows that are triggered by call status changes.

Value

Behavior

True

Call status is synced to GoHighLevel when the conversation ends. Enables workflow triggers based on call outcomes.

False

No call status data is sent to GoHighLevel.

Example: An agency builds a GoHighLevel workflow that sends a follow-up SMS when a call status is "no-answer." They set ghl_sync_conversation to True so the call outcome data is available to trigger the workflow.

Pipeline automation

Pipeline automation allows the AI Employee to update opportunity stages in GoHighLevel after a conversation ends. This feature requires four related settings.

Enable pipeline updates

Set ghl_update_pipeline to True to allow the AI Employee to move opportunities through pipeline stages. When set to False, all other pipeline settings are ignored.

Select a pipeline

The ghl_pipeline_item setting specifies which GoHighLevel pipeline the AI Employee should update. Select the pipeline from the dropdown that corresponds to the business process you want to automate.

Review pipeline stages

The ghl_pipeline_stages field is a read-only JSON list of all stages configured in the selected pipeline. Use the exact stage names shown here when writing your stage selection rules.

Example value:

[
  "New Lead",
  "Appointment Scheduled",
  "Appointment Completed",
  "Closed Won",
  "Closed Lost"
]

Define stage selection rules

The ghl_pipeline_criteria setting maps conversation outcomes to pipeline stages. Write clear rules that tell the AI Employee which stage to assign based on what happened during the call.

Example instructions:

If the appointment was successfully scheduled, move to "Appointment Scheduled".
If the caller declined to book, move to "Closed Lost".
If the caller requested a callback, move to "New Lead".

πŸ—’οΈ NOTE

Stage names in your rules must match the names in ghl_pipeline_stages exactly.

Publish and refresh

Changes to the following settings do not take effect until you click Publish All in the Newo.ai Builder:

  • ghl_selection_type

  • ghl_calendar

  • ghl_selection_criteria

Example scenario: Bright Smile Dental Clinic

Bright Smile Dental Clinic is a local dental office in Austin, Texas. They offer one appointment type (general checkup) and want the AI Employee to handle booking calls.

Configuration:

  1. In GoHighLevel, they create a calendar named "General Checkup."

  2. They complete the OAuth flow, copying the verification code and pasting it into the ghl_oauth_code field in the Newo.ai Portal.

  3. They configure the following settings:

Setting

Value

Reason

ghl_selection_type

Single

Only one appointment type.

ghl_calendar

General Checkup

The only calendar in their account.

ghl_selection_criteria

(left blank)

Not required for Single mode.

ghl_enable_client_history

True

To review call transcripts during the first month.

ghl_use_timezone_from_conversation

False

Local business; all appointments are in Central Time.

ghl_check_availability_on_conversation_start

True

The AI Employee proactively offers available slots.

ghl_sync_conversation

False

They do not use call-status workflows.

ghl_update_pipeline

False

They do not use pipeline automation.

  1. Save all configured settings.

  2. They click Publish All.

  3. They place a test call. The AI Employee answers, offers available times for the General Checkup calendar, confirms a slot, and creates the booking in GoHighLevel.

Example scenario: Acme Software

Acme Software is a B2B software company that offers product demos and consultations. They want the AI Employee to book the correct meeting type based on what the caller requests.

Configuration:

  1. In GoHighLevel, they create separate calendars: "Demo" and "Consultation."

  2. They complete the OAuth flow, copying the verification code and pasting it into the ghl_oauth_code field in the Builder.

  3. They configure the following settings:

Setting

Value

Reason

ghl_selection_type

Name

Multiple meeting types require dynamic calendar selection.

ghl_calendar

(ignored)

Not used in Name mode.

ghl_selection_criteria

Identify the meeting type the caller is requesting. Available calendars: Demo, Consultation. Return only the exact calendar name.

Instructions for the AI Employee to match the meeting type.

ghl_enable_client_history

True

To review call transcripts.

ghl_use_timezone_from_conversation

True

Serves clients in multiple time zones.

ghl_check_availability_on_conversation_start

False

Cannot pre-load until the meeting type is identified.

ghl_sync_conversation

False

They do not use call-status workflows.

ghl_update_pipeline

False

They do not use pipeline automation.

  1. Save all configured settings.

  2. They click Publish All.

  3. They place a test call. When a caller says "I'd like to schedule a demo," the AI Employee identifies the meeting type, selects the "Demo" calendar, checks availability, and creates the booking.

Did this answer your question?