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

# Connect GoHighLevel

> Connect your GoHighLevel sub-account so your agent can find contacts, book appointments, send messages and open opportunities.

GoHighLevel is the most complete integration in Ryvo and the only one that asks for an extra step. Connected properly, your agent works inside your CRM while it talks: it finds the contact by phone, books the appointment on your calendar, leaves a note about what was agreed and opens the opportunity in your pipeline.

Connected badly, the card says **Connected** and your agent cannot book anything. That is why this guide insists so much on step 5.

<Warning>
  GoHighLevel is the **only** app in the catalog that asks for details after the OAuth. If you close that dialog without filling in the **Sub-account**, the "Book an appointment" action does not even show up in the builder. It is not an error you can see: it is simply absent.
</Warning>

## What you need first

* A **GoHighLevel** account and, above all, a user who **belongs to the sub-account** you want to use. An agency user will not work, and the reason is below.
* Your **sub-account id** (the *Location ID*). You will type it by hand, so have it ready. It lives in GoHighLevel under **Settings › Business Profile**.
* The **Starter** plan or higher, with the Engine module active.
* If you plan to use opportunities, know which **pipeline** they should land in.

## How to connect it

<Steps>
  <Step title="Open Settings › Integrations">
    In the portal, go to **Settings** and then **Integrations**. Find the **GoHighLevel** card.
  </Step>

  <Step title="Click Connect app">
    GoHighLevel's screen opens in a new window.
  </Step>

  <Step title="Pick the SUB-ACCOUNT, not the agency">
    On GoHighLevel's screen, select the sub-account your agent should use and sign in with a user that belongs to it. This is where most connections break: if you are unsure, read "Why the agency does not work" before authorizing.
  </Step>

  <Step title="Come back to Ryvo">
    You land back on the Integrations screen on your own and the card turns to **Connected**.
  </Step>

  <Step title="Fill in what the app needs from you">
    The **What GoHighLevel needs from you** dialog opens right away. The important part lives there, explained in the next section. If you click **Later**, the screen leaves a notice with a **Complete** button so you can pick it up again.
  </Step>
</Steps>

## GoHighLevel's settings, field by field

Your agent cannot guess these mid-conversation, and the model never sees them: you save them once and they travel with every call to GoHighLevel.

<Steps>
  <Step title="Sub-account (typed by hand)">
    This is the id of the GoHighLevel sub-account where your CRM lives. It is the **only** value you have to go and find, because our connection provider hands it back to us truncated and we cannot read it in full.

    **Where to find it**: in GoHighLevel, open the sub-account, go to **Settings** and then **Business Profile**. The **Location ID** is on that screen and copies with one click. You can also read it in the address bar while you browse inside the sub-account, in the `/location/<id>/` part.

    Paste it as is, with no spaces.
  </Step>

  <Step title="Calendar (fills itself in)">
    As soon as the Sub-account is set, this field stops being greyed out and loads **your real calendars** by name. Pick the calendar your agent should book into.

    Without it there is no "Find free slots" and no "Book an appointment".
  </Step>

  <Step title="Pipeline (fills itself in)">
    Same as the calendar: it comes from your own account once the Sub-account is there. Pick the pipeline new opportunities should land in.

    You only need it if you are going to use the opportunity actions. While it is empty, those actions are not offered.
  </Step>

  <Step title="Save">
    Click **Save**. Saving also updates the agents already using this integration, so you do not have to publish them again for this.
  </Step>
</Steps>

You can change any of the three later from **Settings › Integrations › GoHighLevel › View actions**: the same fields sit above the list of actions, and every action that is not usable yet tells you exactly what it is missing.

## Why the agency does not work

GoHighLevel hands out two kinds of access and only one of them works for what your agent needs:

* If the person authorizing belongs to the **sub-account**, the access can read contacts, calendars, conversations and opportunities. That is the good one.
* If the person authorizing is an **agency user**, GoHighLevel hands out agency access. With it, every sub-account endpoint answers "not allowed": not a single contact, calendar or conversation.

Ryvo detects this on the way back from the OAuth and will not let you believe it worked: the card turns to **Error** and says, in plain words, to connect again from a user that belongs to the sub-account. Nothing in Ryvo fixes this, the connection has to be redone from the right user.

## What your agent can do once it is connected

**Contacts**

| Action                             | What it does in the conversation                                                              |
| ---------------------------------- | --------------------------------------------------------------------------------------------- |
| **Find contact by phone or email** | Finds the person at the start of the call, to know whether they are already a customer.       |
| **Create or update contact**       | Saves the person in the CRM. If they already exist it updates them, so it does not duplicate. |
| **View a contact**                 | Reads the full record to confirm details before changing them.                                |
| **Tag contact**                    | Marks the outcome of the conversation, for example interested or no answer.                   |
| **Remove tags**                    | Removes tags that no longer apply.                                                            |
| **Leave a note on the contact**    | Writes down what was agreed, for whoever follows up.                                          |
| **View the contact's tasks**       | Lists open items when the person asks how their case is going.                                |

**Calendar**

| Action                                  | What it does in the conversation                            | Needs                    |
| --------------------------------------- | ----------------------------------------------------------- | ------------------------ |
| **Find free slots**                     | Checks which slots are open before offering an appointment. | Calendar                 |
| **Book an appointment**                 | Books the appointment after seeing the slot is free.        | Calendar and Sub-account |
| **Reschedule or cancel an appointment** | Moves the time of an existing appointment, or cancels it.   |                          |
| **View the contact's appointments**     | Lists a person's appointments, to confirm when theirs is.   |                          |
| **Check the calendar**                  | Reads everything booked in a date range.                    | Sub-account              |

**Conversations**

| Action                | What it does in the conversation                                                                         | Needs       |
| --------------------- | -------------------------------------------------------------------------------------------------------- | ----------- |
| **Send message**      | Sends an SMS, email, WhatsApp, RCS, Instagram or Facebook message to the contact, to confirm in writing. |             |
| **Find conversation** | Finds earlier conversations, to know whether the person has been contacted before.                       | Sub-account |
| **Read messages**     | Picks up the thread without asking the person to repeat themselves.                                      |             |

**Opportunities**

| Action                           | What it does in the conversation                            | Needs                    |
| -------------------------------- | ----------------------------------------------------------- | ------------------------ |
| **Create or update opportunity** | Opens the opportunity when the person shows buying intent.  | Sub-account and Pipeline |
| **View opportunity**             | Reads which stage it is in before moving it.                |                          |
| **Close opportunity**            | Marks it won, lost or abandoned when the conversation ends. |                          |

Actions are turned on one by one in the [**Tools**](/guides/agents/tools) section of each agent's builder, with a cap of **10 integration actions per agent**. In the **View actions** list, the ones still missing a value are flagged with **Missing a value** and tell you which one.

## What to do if something fails

| What you see                                                                      | What happened                                                    | What to do                                                                                               |
| --------------------------------------------------------------------------------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| The card says **Connected** but "Book an appointment" is missing from the builder | The **Sub-account** or the **Calendar** is empty                 | Open **View actions** and fill in the fields at the top. The action shows up as soon as you save         |
| The card turns to **Error** and mentions an agency account                        | You authorized with an agency user instead of a sub-account user | Click **Reconnect** and authorize with a user that belongs to the sub-account you want                   |
| The **Calendar** dropdown loads nothing                                           | The **Sub-account** is empty or the id has a typo                | Check the Location ID in GoHighLevel under Settings › Business Profile and paste it again without spaces |
| You reconnected with a different user and everything stayed just as broken        | You clicked **Reconnect** on a connection still marked as active | Click **Disconnect** first, then **Connect app**: that way the OAuth starts from scratch                 |
| The opportunity actions are not offered                                           | The **Pipeline** is empty                                        | Fill it in under **View actions**. Only the opportunity actions depend on it                             |
