Skip to content
GoHighLevel

Connector · CRM and email lists

GoHighLevel, in every client’s workflows.

Add or update a contact, add tags to a contact, with the client’s own GoHighLevel account.

Triggers
0start a workflow
Actions
2steps in a workflow

Do it in GoHighLevel

A step with its own fields: values from the run go in by name, and what GoHighLevel answers is there for the next step.

  • Add or update a contactCreates the contact, or updates the one with the same email or phone (the sub-account’s duplicate rules).
  • Add tags to a contactAdds tags to a contact and keeps the ones it has: in GoHighLevel a tag added is what starts the sub-account’s own workflows. (The upsert’s Tag replaces every tag the contact has.)

Connect the client’s GoHighLevel

On the client’s page in Thrum: Add credential, type GoHighLevel private integration token.

In the client’s sub-account: Settings → Private Integrations → Create new integration → scopes contacts.write (and contacts.readonly) → copy the token. The Location ID is under Settings → Business Profile.

The key is stored encrypted and bound to that client: another client’s workflow cannot use it, and no template or pack copies it.

GoHighLevel’s API documentation

Via HTTP

Or by web request: create or update a contact, with a tag

Agencies run their clients’ CRM in HighLevel; the tag starts the client’s own HighLevel follow-up. The web request step, filled in: paste it, swap in the client’s ids, add their key.

  1. 01

    Add the client’s credential

    On the client’s page in Thrum: Add credential, type API key. In the client’s sub-account: Settings → Private Integrations → Create new integration → scope contacts.write → copy the token. The Location ID is under Settings → Business Profile.

    {
      "api_key": "pit-…"
    }
  2. 02

    Add a web request step

    Name it “Add to HighLevel”, set it as here, and pick the credential. Values in double braces are read from the run: here, the lead the form brought in.

    LOCATION_ID
    The sub-account’s id: Settings → Business Profile.
    {
      "method": "POST",
      "url": "https://services.leadconnectorhq.com/contacts/upsert",
      "headers": {
        "Authorization": "Bearer {{ credential.api_key }}",
        "Version": "2021-07-28",
        "Accept": "application/json"
      },
      "body": {
        "locationId": "LOCATION_ID",
        "name": "{{ lead.name }}",
        "email": "{{ lead.email }}",
        "phone": "{{ lead.phone }}",
        "tags": [
          "website lead"
        ],
        "source": "Website form"
      }
    }
  3. 03

    What goes out, and what comes back

    Upsert matches on email or phone, following the sub-account’s duplicate-contact setting.

    POST https://services.leadconnectorhq.com/contacts/upsert
    content-type: application/json
    authorization: Bearer ••••••••
    version: 2021-07-28
    accept: application/json
    
    {
      "locationId": "LOCATION_ID",
      "name": "Nadia Karim",
      "email": "nadia@example.com",
      "phone": "+447700900222",
      "tags": [
        "website lead"
      ],
      "source": "Website form"
    }
    200
    {
      "new": true,
      "contact": {
        "id": "seD4PfOuKoVMLkEZqohJ",
        "name": "Nadia Karim",
        "email": "nadia@example.com",
        "phone": "+447700900222",
        "locationId": "LOCATION_ID",
        "tags": [
          "website lead"
        ]
      },
      "traceId": "9f2c41d7e8a3"
    }

Watched like everything else

When GoHighLevel stops answering or refuses the client’s key, you hear about it, and your client does not.

A failing request
Tried 3 times, 5 seconds apart and doubling, only for errors a retry can fix
A service that asks for a pause
Given it, up to an hour
Requests at once, per account
2, per worker; the rest wait their turn
Timeout
15 seconds, unless the step sets its own
Private and internal addresses
Refused, on every redirect too
The client’s key
Encrypted, bound to the client, and kept out of every run record
A step that keeps failing
Marks the workflow Degraded and alerts you, not the client

GoHighLevel and its logo are trademarks of their owner, used here only to say what Thrum works with; no endorsement is implied.

Thrum is cooking.

Get early access and you’ll be among the first in. Early members get a launch perk.