# Connect GoHighLevel

You'll save visitors' answers to your GoHighLevel location and use their existing fields and tags to personalize your website.

Available on the Scale and Pro plans.

Connect GoHighLevel to save visitors' answers to the location that holds your contacts. You can use those answers in your follow-up, and use an identified contact's existing fields and tags to show them relevant content on your website.

## Connect GoHighLevel

You'll need permission to manage your RightMessage project's integration and authorize the intended GoHighLevel location or sub-account. The connection searches that location, not every contact across your agency.

Each RightMessage project connects to one email platform or CRM at a time. Review where you use an existing connection before replacing it.

1. Open your RightMessage project settings and choose **Integration**.
2. On **Email platforms & CRMs**, select **GoHighLevel**.
3. In **Overview**, click **Connect to GoHighLevel**.
4. Sign in to GoHighLevel if prompted. Choose the account or location that should supply this project's contacts and approve access.
5. Return to RightMessage and check for **Connected to GoHighLevel** and a healthy connection.

![GoHighLevel connection controls in RightMessage, with no credentials entered](https://rightmessage.com/help/screens/integrations-gohighlevel-connection.light.webp)

GoHighLevel uses OAuth. Authorization saves the location details, so you don't paste an API key, access token, refresh token, or Location ID into this screen. If you see **No location ID configured**, reconnect and include the intended location when authorizing. There's no separate Location ID field to fill in afterward.

Prepare a test contact in that location and a page with the [RightMessage snippet installed](https://rightmessage.com/help/everything-you-need-to-know-about-your-rightmessage-tracking-script).

## Recognize subscribers from email links

RightMessage reads `ghl_id` from a URL parameter or cookie. The value is the GoHighLevel contact ID, not the location ID.

Add it to your website links in GoHighLevel emails. For example, a link to [WorkForge](https://workforge.rightmessage.com) could be:

```text
https://workforge.rightmessage.com/solutions.html?ghl_id={{contact.id}}
```

Use your own page URL. GoHighLevel fills in `{{contact.id}}` with the recipient's contact ID at send time. Its [merge-field example](https://help.gohighlevel.com/support/solutions/articles/155000003103-how-to-use-the-copy-code-feature-in-countdown-timers) uses that same field. If the URL already has a query string, append `&ghl_id={{contact.id}}` instead of another `?`.

Send the email rather than testing the unresolved template. The delivered link needs to reach a page with RightMessage installed, and its ID must belong to the connected location.

1. Give your test contact a distinctive tag or field value in GoHighLevel.
2. Send them the email with the identifying link.
3. Open the delivered link in a fresh browser session.
4. Check the contact and their GoHighLevel data in the [on-site debugger](https://rightmessage.com/help/using-the-rightmessage-debugger).
5. Visit another page in the same browser without the parameter. RightMessage remembers that browser. Another browser or device needs its own identification.

A configured identifying Email question or RightMessage form can identify someone too. For an existing contact, the generic `email` parameter can look up a URL-encoded email address. Opening that link doesn't create a new GoHighLevel contact.

## Choose what to sync

RightMessage reads native contact details, custom fields, and tags. Map choice answers to custom fields or a tag per answer. Typed answers can use native or custom fields in the picker, with the native-field limitation below.

Custom fields must exist in GoHighLevel's field catalog. Typing a label in another tool doesn't make it a RightMessage destination.

1. Open **Questions**, select your question, and choose **Sync with GoHighLevel**.
2. For a choice question, select the field or tag option in **Sync mode**. Single-answer questions default to a field. Multiple-answer questions prefer tags when available.
3. In field mode, select **Destination** and fill in **Answer → value**. In tag mode, choose an existing tag for each answer. For a typed question, select a compatible field.
4. To collect new contacts, open the Email question's **Setup** and enable **Identify the visitor**. Choose **Create/Update contact** in **Contact action**, or **Add to tag** and select its destination.
5. Click **Publish** when you're ready to make the question and flow changes live.

You don't need a form or list for **Create/Update contact**. A tag action needs at least one destination. The connection doesn't offer a hosted-form or list signup destination. If you show a consent checkbox, leaving it unchecked keeps the response without identifying the visitor or sending data to GoHighLevel.

### Pick a field that accepts your answer

The native-field catalog includes **First Name**, **Last Name**, **Full Name**, **Email**, **Phone**, **Address**, **City**, **State**, **Postal Code**, **Website**, **Timezone**, **Company Name**, **Country**, and **Gender**. Email identifies the contact. Don't use a tag action to change it.

> **Use custom fields for dependable question updates**
>
> The current typed-question path doesn't consistently format native-field updates for GoHighLevel. Empty native values also aren't reliably sent, so clearing an answer may leave the old value in place. Use compatible custom fields for question answers, and check any native mapping on the actual contact.

For Name and Address questions, **One field per part** saves the collected parts to separate destinations. Choice questions use custom fields rather than the native-field group.

To create a text field, choose **New GoHighLevel custom field**, enter **Field Name** using letters, numbers, and underscores, then click **Create**. Create specialized field types in GoHighLevel first. Single-option and radio fields offer their existing options. Checkbox fields offer **Yes** and **No**. Other types appear as text, so check that numeric, date, and multiple-option fields accept your mapped values.

Follow [Map answers to contact fields and tags](https://rightmessage.com/help/synchronizing-contact-data-with-your-email-platform-or-crm) for multiple-answer values, tag removal, and switching modes. Keep answer tags separate from unrelated workflow tags. Save an **Other** answer's write-in to a separate field under **Save write-ins to GoHighLevel**.

This connection doesn't provide outgoing event or automation-enrollment actions, event-history conditions, or purchase-history conditions.

### Check fields sent with a tag action

When a tag action receives an existing contact ID, it adds the tags but doesn't apply accompanying custom or native field updates. It can still report those fields as updated. Check the fields on the GoHighLevel contact itself rather than relying on that report.

## Check the connection

1. On the live website, submit a mapped answer as your identified test contact.
2. Open that contact in the connected GoHighLevel location and check the field value or tag.
3. Submit a signup with a second email address you control.
4. Check that the contact action created a new record in the same location.

Matching mapped values can put an identified visitor into RightMessage segments on later visits. Passive synchronization preserves a nonempty GoHighLevel field, while a new answer submission can change it. This doesn't import all contacts or rewrite historical answers.

If a field or tag is missing from the picker, use **Clear Cache** in **Overview**, then reopen the picker. If authorization expires, use **Reconnect to GoHighLevel**. If the wrong contact or no contact appears, check the location, delivered ID, and any identity already remembered by the browser before changing mappings.

When GoHighLevel data reaches your website and the submitted answer reaches the intended contact, the connection is working. Use [Verify an integration change](https://rightmessage.com/help/verify-an-integration-change) for a repeatable check of existing contacts and new signups.
