GoHighLevel Node
Upsert contacts, add tags, move pipeline stages, and create tasks inside GoHighLevel — all from a single automation node.
Connects to your GoHighLevel sub-account via OAuth and lets you create or update contacts, tag them, move them through pipeline stages, and assign tasks — without leaving FlowMaticX.
- Sync every inbound lead into GHL immediately so your sales team works from one CRM.
- Move a contact to a "Booked" pipeline stage after they schedule via Calendly.
---
| Field | Type | Required | Description |
|---|---|---|---|
| credentialId | OAuth connection | Yes | Your GHL OAuth account — connect at /workspace/credentials |
| action | enum | Yes | One of: upsert_contact, create_contact, add_tag, move_pipeline, create_task |
---
| Field | Type | Required | Description |
|---|---|---|---|
| firstName | string | No | Contact first name ({{lead.firstName}} works) |
| lastName | string | No | Contact last name |
| string | No* | Contact email — recommended | |
| phone | string | No* | E.164 format e.g. +447911123456 |
| tags | string | No | Comma-separated tags to apply on create |
| locationId | string | Yes | GHL sub-account Location ID (see below) |
At least one of email or phone is required for upsert to match an existing contact.
Output variable: {{variables.ghlContact}} — includes contactId, email, phone, firstName, lastName.
---
| Field | Type | Required | Description |
|---|---|---|---|
| contactId | string | Yes | GHL contact ID — use {{variables.ghlContact.contactId}} |
| tags | string | Yes | Comma-separated tags to add |
---
| Field | Type | Required | Description |
|---|---|---|---|
| contactId | string | Yes | GHL contact ID |
| pipelineId | string | Yes | ID of the GHL pipeline |
| stageId | string | Yes | ID of the target stage within the pipeline |
---
| Field | Type | Required | Description |
|---|---|---|---|
| contactId | string | Yes | GHL contact ID |
| title | string | Yes | Task title |
| dueDate | string | No | ISO 8601 datetime e.g. 2026-05-01T09:00:00Z |
| assignedTo | string | No | GHL user ID to assign the task to |
---
GHL dashboard → Settings → Business Profile → scroll to the very bottom → copy the string next to "Location ID" (looks like abc123xyz789).
GHL → Opportunities → select a pipeline → look at the URL:
https://app.gohighlevel.com/v2/location/.../opportunities/pipeline/PIPELINE_ID/...
Copy the segment after /pipeline/.
Use the GHL API: GET https://services.leadconnectorhq.com/opportunities/pipelines?locationId=YOUR_LOCATION_ID with your API key. Each pipeline object contains a stages array with id and name fields.
Alternatively: when you click a stage in the Kanban board, the URL updates to include the stage ID.
GHL → Contacts → open a contact → the URL contains /contacts/CONTACT_ID. Or use the output of an upsert_contact action: {{variables.ghlContact.contactId}}.
GHL → Settings → My Staff → click a team member → the URL contains the user ID.
---
| Variable | Description |
|---|---|
{{variables.ghlContact}} | Full contact object returned by upsert/create |
{{variables.ghlContact.contactId}} | GHL contact ID — pipe into subsequent nodes |
{{variables.ghlContact.email}} | Email as stored in GHL |
{{variables.ghlContact.phone}} | Phone as stored in GHL |
---
- Go to /workspace/credentials and click Connect GoHighLevel. Authorise the OAuth flow for the correct sub-account.
- Copy your Location ID from GHL → Settings → Business Profile.
- Add a GoHighLevel node to your automation canvas.
- Set Action to
upsert_contact. - Map
email→{{lead.email}},firstName→{{lead.firstName}}, etc. - Paste your Location ID into the
locationIdfield. - Save. Run a test lead through the automation and check GHL Contacts.
- Add a second GHL node after the first, set action to
add_tag, and use{{variables.ghlContact.contactId}}as the contact ID.
---
json
{
"action": "upsert_contact",
"credentialId": "cred_abc123",
"firstName": "{{lead.firstName}}",
"lastName": "{{lead.lastName}}",
"email": "{{lead.email}}",
"phone": "{{lead.phone}}",
"locationId": "abc123xyz789",
"tags": "inbound,flowmaticx"
}
---
- Always run upsert first. Store the result in
{{variables.ghlContact}}then reference{{variables.ghlContact.contactId}}in every subsequent GHL node — avoids hard-coding contact IDs. - locationId is mandatory for upsert/create. Missing it will throw a 400 from GHL's API.
- GHL OAuth tokens auto-refresh; you don't need to reconnect unless you revoke access in GHL.
- Tags are additive — they don't replace existing tags on the contact.
- The
dueDatefor tasks must be ISO 8601 with timezone; use2026-05-01T09:00:00Znot2026-05-01.