> ## Documentation Index
> Fetch the complete documentation index at: https://docs.retellai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect GoHighLevel

> Connect GoHighLevel to Retell AI with a Private Integration token and Location ID: the scopes to grant, where each value lives, and how to verify.

Connecting GoHighLevel takes a Private Integration token and the sub-account's Location ID. One connection covers both [contact sync](/integrations/gohighlevel-contact-sync) and [agent functions](/integrations/gohighlevel-functions): your agents work the sub-account's contacts, tags, and opportunities, and Retell keeps the records current. This page covers the GoHighLevel-side setup and the connection itself.

<Note>
  A GoHighLevel connection is scoped to **one sub-account (location)**. An agency managing several locations connects each one separately.
</Note>

## When to use it

Connect GoHighLevel when it's your system of record and you want your agents working from it without anyone copying data between tools. It's the right choice when you want to:

* **Call or text people who already exist in GoHighLevel.** Contacts sync into Retell automatically, so your agent greets callers by name and knows their pipeline stage instead of asking.
* **Fire GoHighLevel workflows from conversation outcomes.** The **Add Contact Tags** tool tags the contact — tags are what GoHighLevel workflows trigger on, so a "booked" or "interested" tag can kick off your existing follow-up automation.
* **Work deals from the phone.** Your agent can list a contact's opportunities, move one to a different pipeline stage, or create a new one when a caller qualifies.
* **Book the sub-account's calendars.** The same connection reads free slots and books, reschedules, or cancels appointments, so one integration covers both the caller's record and their appointment.

Your agents can also look up and manage contacts, tasks, notes, and a contact's appointments through [integration tools](/integrations/gohighlevel-functions#available-tools), and book the sub-account's [calendars](/integrations/gohighlevel-functions#book-the-sub-account-s-calendars).

For example, an agency runs a med spa location's inbound line on Retell. The agent looks up the caller, answers from their record, tags them `booked` after scheduling, and the location's existing GoHighLevel workflow sends the confirmation text. Nothing about the workflow changes.

## Prerequisites

* Admin access to the GoHighLevel **sub-account** you want to connect. Private Integrations exist at both the agency and sub-account level, but Retell's connection is location-scoped, so create the token inside the sub-account.

## Step 1: Create a Private Integration token

<Steps>
  <Step title="Open Private Integrations">
    In the sub-account, go to **Settings > Private Integrations** (under **Other Settings**) and click **Create new Integration**. Name it something descriptive, for example `Retell AI`.

    <Note>
      If **Private Integrations** isn't in the Settings menu, enable the feature under **Settings > Labs** (agency or sub-account view) first. By default admins can create Private Integrations; access can be restricted per user under **Roles & Permissions** (**Settings > Team** at the agency, **Settings > My Staff** in a sub-account).
    </Note>
  </Step>

  <Step title="Select scopes">
    On the **Scopes** tab, open the **Select scopes** dropdown. Each of its entries pairs a label with the scope's slug, like "View Contacts - contacts.readonly", and the list is searchable, so search by the slugs below.

    <Frame caption="The Scopes tab of a GoHighLevel Private Integration, with the searchable scope picker open.">
      <div style={{ aspectRatio: '16 / 9', width: '100%', background: 'rgba(128,128,128,0.15)', display: 'flex', alignItems: 'center', justifyContent: 'center', borderRadius: '8px', overflow: 'hidden' }}>
        <img src="https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/gohighlevel-private-integration-scopes.png?fit=max&auto=format&n=eQ17pyeTZnmNJIsQ&q=85&s=d4ffc67b935e031b0accb9f010e49079" alt="GoHighLevel's Private Integrations page on the Scopes tab, reached from Settings > Private Integrations in the sub-account sidebar. The Select scopes dropdown is highlighted with a blue ring and open, showing a searchable list of 157 scopes where each entry pairs a label with its slug, such as View Calendars - calendars.readonly. A Select all option and a counter reading 0 of 157 selected sit at the top of the list." style={{ maxWidth: '100%', maxHeight: '100%', objectFit: 'contain' }} data-og-width="1620" width="1620" data-og-height="830" height="830" data-path="images/integration/gohighlevel-private-integration-scopes.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/gohighlevel-private-integration-scopes.png?w=280&fit=max&auto=format&n=eQ17pyeTZnmNJIsQ&q=85&s=435f9d66215dc35ce91d2b83472406e9 280w, https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/gohighlevel-private-integration-scopes.png?w=560&fit=max&auto=format&n=eQ17pyeTZnmNJIsQ&q=85&s=b476332a1bac37a4ba26a16d4235c8c4 560w, https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/gohighlevel-private-integration-scopes.png?w=840&fit=max&auto=format&n=eQ17pyeTZnmNJIsQ&q=85&s=ee88a9d1b81481fefc0d7facda4757ad 840w, https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/gohighlevel-private-integration-scopes.png?w=1100&fit=max&auto=format&n=eQ17pyeTZnmNJIsQ&q=85&s=875cbcc8bf16cc730459ef1017a8cde3 1100w, https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/gohighlevel-private-integration-scopes.png?w=1650&fit=max&auto=format&n=eQ17pyeTZnmNJIsQ&q=85&s=478c1df40d72fa877c7dab2805354ff0 1650w, https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/gohighlevel-private-integration-scopes.png?w=2500&fit=max&auto=format&n=eQ17pyeTZnmNJIsQ&q=85&s=4aec7a6e5f4e361edb2dff46a475fa4b 2500w" />
      </div>
    </Frame>

    Grant the scopes covering what Retell uses. At minimum:

    | Scope                                                                           | Required for                                                                                                                                                             |
    | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    | `contacts.readonly` and `contacts.write`                                        | Contact sync, the connection test, contact lookups and updates, tags, tasks, notes, and listing a contact's appointments                                                 |
    | `opportunities.readonly` and `opportunities.write`                              | Listing, creating, and updating opportunities, and reading pipelines                                                                                                     |
    | `locations/customFields.readonly`                                               | Reading custom field definitions so you can map custom fields                                                                                                            |
    | `calendars.readonly`, `calendars/events.readonly`, and `calendars/events.write` | The [calendar tools](/integrations/gohighlevel-functions#book-the-sub-account-s-calendars): checking availability, and booking, rescheduling, or cancelling appointments |

    <Warning>
      Grant the scopes up front. Without `contacts.readonly` the connection test itself fails. And when a tool call later hits a missing scope, GoHighLevel returns the same authorization error it returns for a revoked token, so the connection can end up flagged with a **Connection error** tag.
    </Warning>
  </Step>

  <Step title="Copy the token">
    Save the integration and copy the token right away; GoHighLevel shows it only at creation.
  </Step>
</Steps>

## Step 2: Find the Location ID

The Location ID identifies the sub-account. Read it in the sub-account under **Settings > Business Profile**, or from your browser's address bar while inside the sub-account — it's the string after `/location/` in the URL, for example `ve9EPM428h8vShlRW1KT`.

<Frame caption="Business Profile settings in the sub-account, with the Location ID at the top of General Information.">
  <div style={{ aspectRatio: '16 / 9', width: '100%', background: 'rgba(128,128,128,0.15)', display: 'flex', alignItems: 'center', justifyContent: 'center', borderRadius: '8px', overflow: 'hidden' }}>
    <img src="https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/gohighlevel-location-id.png?fit=max&auto=format&n=eQ17pyeTZnmNJIsQ&q=85&s=78da6d6fdbc55cb84b11e144f63a8790" alt="GoHighLevel's Business Profile Settings page. In the left Settings sidebar, Business Profile is highlighted under My Business. In the General Information card, the Location ID field is highlighted at the top right with a copy button beside it; the ID value and the business contact and address details are redacted." style={{ maxWidth: '100%', maxHeight: '100%', objectFit: 'contain' }} width="1792" height="830" data-path="images/integration/gohighlevel-location-id.png" />
  </div>
</Frame>

## Step 3: Connect GoHighLevel in Retell

<Steps>
  <Step title="Add the connection">
    In the Retell Dashboard, open **Integrations**, select the **Available** tab, find **GoHighLevel**, and click **Connect** (**Add Account** if a connection already exists).
  </Step>

  <Step title="Enter the credentials">
    Fill in the fields:

    | Field               | Value                                                                                                        |
    | ------------------- | ------------------------------------------------------------------------------------------------------------ |
    | **Connection name** | Alias for this connection; prefilled with `GoHighLevel - API key`. The location's name makes a better alias. |
    | **API key**         | The Private Integration token from Step 1.                                                                   |
    | **Location ID**     | The sub-account ID from Step 2.                                                                              |

    Click **Connect** (**Add Account** if a connection already exists). Retell tests the credentials by searching the sub-account's contacts. On success the dialog offers **Set up contact sync**.

    <Frame caption="The GoHighLevel connection dialog: token as the API key, plus the sub-account's Location ID.">
      <div style={{ aspectRatio: '16 / 9', width: '100%', background: 'rgba(128,128,128,0.15)', display: 'flex', alignItems: 'center', justifyContent: 'center', borderRadius: '8px', overflow: 'hidden' }}>
        <img src="https://mintcdn.com/retellai/eQ17pyeTZnmNJIsQ/images/integration/gohighlevel-connect-dialog.png?fit=max&auto=format&n=eQ17pyeTZnmNJIsQ&q=85&s=fd003ba6c3a9d4bbeda117b5c0d76a03" alt="Retell's GoHighLevel connection dialog on its Connect tab, with a Functions tab beside it. It has a Connection name field prefilled with GoHighLevel - API key, an API Key field, and a Location ID field showing the example placeholder ve9EPM428h8vShlRW1KT, above a Need help finding your credentials link and Cancel and Add Account buttons." style={{ maxWidth: '100%', maxHeight: '100%', objectFit: 'contain' }} width="1206" height="1006" data-path="images/integration/gohighlevel-connect-dialog.png" />
      </div>
    </Frame>
  </Step>

  <Step title="Verify it worked">
    On the **Connected** tab, the GoHighLevel connection shows as connected. See [GoHighLevel contact sync](/integrations/gohighlevel-contact-sync) to import the sub-account's contacts, or start using [agent functions](/integrations/gohighlevel-functions) right away.
  </Step>
</Steps>

## Manage the token

* **Change scopes anytime.** Edit the Private Integration's scopes without regenerating the token — additions take effect immediately.
* **Rotate on your schedule.** Open the integration under **Settings > Private Integrations** to rotate its token; GoHighLevel recommends doing so every 90 days. **Rotate and expire this token later** keeps the old token valid for 7 days while you swap the credential over; **Rotate and expire this token now** kills it immediately, so Retell fails until it has the new one.
* **Reconnect after rotating.** On the **Connected** tab, open the connection's settings, paste the new token over the masked one, and click **Reconnect**. Retell verifies the new token before saving, and your field mappings and synced contacts are untouched.

## Troubleshooting

<AccordionGroup>
  <Accordion title="Connecting fails with an authorization error">
    Confirm you pasted a **Private Integration token** from the same sub-account whose Location ID you entered, not an agency-level key or a legacy API key. A token from one location can't act on another.
  </Accordion>

  <Accordion title="The connection errored after working for a while">
    Retell flags a connection as errored when GoHighLevel rejects the credentials — usually a deleted or rotated token, though a tool call that hits a missing scope reports the same way. Open the connection's settings, paste a current token (or grant the missing scope), and click **Reconnect**.
  </Accordion>
</AccordionGroup>

## FAQ

<AccordionGroup>
  <Accordion title="Can I connect multiple sub-accounts?">
    Yes, one connection per location, each with its own token and Location ID. Only one CRM connection in your workspace can drive [contact sync](/integrations/gohighlevel-contact-sync) at a time, across every provider — the **Contact sync** toggle in a connection's settings decides which one. Integration tools work on every connection.
  </Accordion>
</AccordionGroup>

## Next steps

<CardGroup cols={2}>
  <Card title="GoHighLevel contact sync" icon="rotate" href="/integrations/gohighlevel-contact-sync">
    Import the sub-account's contacts, write analysis results back, and log conversations as notes.
  </Card>

  <Card title="GoHighLevel agent functions" icon="wrench" href="/integrations/gohighlevel-functions">
    Look up callers, add tags that fire workflows, and work opportunities mid-conversation.
  </Card>

  <Card title="CRM integrations" icon="database" href="/integrations/crm-overview">
    How contact sync, analysis mapping, and activity logging work across CRM providers.
  </Card>

  <Card title="Integrations overview" icon="plug" href="/integrations/overview">
    See every provider Retell connects to and how integration tools work.
  </Card>
</CardGroup>
