> ## 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.

# GoHighLevel contact sync

> Sync GoHighLevel sub-account contacts with Retell AI: field mappings, post-call analysis write-back, and conversation logging as contact notes.

Contact sync imports the connected sub-account's contacts into Retell, writes [post-call analysis](/features/post-call-analysis-overview) results and field updates back, and logs each conversation as a note on the contact. This page covers the GoHighLevel-specific behavior; [CRM integrations](/integrations/crm-overview) explains the four data flows all CRM providers share.

Contact sync requires a [connected GoHighLevel sub-account](/integrations/gohighlevel). Integration tools work without it — see [GoHighLevel agent functions](/integrations/gohighlevel-functions).

## Required scopes

Contact sync uses the Private Integration's scopes, granted in [Step 1 of connecting](/integrations/gohighlevel#step-1-create-a-private-integration-token):

| Scope                             | Used for                                           |
| --------------------------------- | -------------------------------------------------- |
| `contacts.readonly`               | Importing contacts                                 |
| `contacts.write`                  | Outbound sync and logging conversations as notes   |
| `locations/customFields.readonly` | Reading custom field definitions for field mapping |

A missing scope never flags the connection when sync is what hits it; the affected part of sync silently stops working. A tool call behaves differently — see [required scopes](/integrations/gohighlevel-functions#required-scopes) on the agent functions page.

## Set up contact sync

After the connection test passes, click **Set up contact sync** to open the field mapping dialog, then map the GoHighLevel fields you want to import and the Retell fields you want to write back. For a connection made earlier, the same dialog opens from the **Connected** tab: open the connection's settings and click **Set up contact sync**.

Retell pre-fills one mapping in each direction: GoHighLevel `phone` to Retell `phone_number`. Phone number is how contacts are matched between the two systems, so it stays mapped and can't be removed. See [CRM data mappings](/integrations/crm-mappings) for how to map the rest, create custom fields, and choose update modes.

To log conversations to GoHighLevel, turn on **Log activities automatically** on the **Sync to GoHighLevel** tab.

## Verify it worked

* Open **Contacts**. After the first sync, the sub-account's contacts appear with correctly formatted phone numbers and your mapped fields populated.
* The first sync is a full scan of every contact that has the mapped phone field, so a large sub-account takes a while. After that, Retell polls every 5 minutes (as of August 2026) and imports only contacts modified since the last run.

<Note>
  Contacts with no value in the mapped phone field are excluded from the sync entirely, as are contacts whose number can't be parsed into a valid E.164 number.
</Note>

## How are conversations logged in GoHighLevel?

Each call or chat becomes a **note** on the matched contact, carrying the conversation ID, the from and to numbers, the disconnection reason for calls, and the summary. Retell uses notes for two reasons: the history sits in the contact's Notes panel, and logging needs only the [scopes above](#required-scopes). It doesn't write to GoHighLevel's Conversations call log.

Retell logs activity only for contacts imported from the currently connected CRM. A conversation with a number that doesn't match a synced contact produces no note.

## FAQ

<AccordionGroup>
  <Accordion title="Does Retell create or delete contacts in GoHighLevel?">
    By default it only updates contacts that already exist, and it never deletes them. Turn on **Create new contacts in CRM** on the **Sync to GoHighLevel** tab to have Retell create a contact after a conversation when the matched contact isn't linked to one yet. Your agent can also create contacts through the **Create Contact** [tool](/integrations/gohighlevel-functions), but that's an explicit tool call, not sync.
  </Accordion>
</AccordionGroup>

## Next steps

<CardGroup cols={2}>
  <Card title="CRM data mappings" icon="arrows-left-right" href="/integrations/crm-mappings">
    Map GoHighLevel fields to Retell contacts, choose update modes, and control what syncs back.
  </Card>

  <Card title="Build contact memory" icon="brain" href="/integrations/build-contact-memory">
    Accumulate what your agents learn across conversations into the contact record.
  </Card>

  <Card title="Dynamic variables" icon="code" href="/build/dynamic-variables">
    Reference synced contact fields from your agent's prompt.
  </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>
</CardGroup>
