Automations

GoHighLevel Node

8 min readnode-ghl

Upsert contacts, add tags, move pipeline stages, and create tasks inside GoHighLevel — all from a single automation node.

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

When to use it
  • 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.

---

Required fields (all actions)
FieldTypeRequiredDescription
credentialIdOAuth connectionYesYour GHL OAuth account — connect at /workspace/credentials
actionenumYesOne of: upsert_contact, create_contact, add_tag, move_pipeline, create_task

---

Action: upsertcontact / createcontact
FieldTypeRequiredDescription
firstNamestringNoContact first name ({{lead.firstName}} works)
lastNamestringNoContact last name
emailstringNo*Contact email — recommended
phonestringNo*E.164 format e.g. +447911123456
tagsstringNoComma-separated tags to apply on create
locationIdstringYesGHL 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.

---

Action: add_tag
FieldTypeRequiredDescription
contactIdstringYesGHL contact ID — use {{variables.ghlContact.contactId}}
tagsstringYesComma-separated tags to add

---

Action: move_pipeline
FieldTypeRequiredDescription
contactIdstringYesGHL contact ID
pipelineIdstringYesID of the GHL pipeline
stageIdstringYesID of the target stage within the pipeline

---

Action: create_task
FieldTypeRequiredDescription
contactIdstringYesGHL contact ID
titlestringYesTask title
dueDatestringNoISO 8601 datetime e.g. 2026-05-01T09:00:00Z
assignedTostringNoGHL user ID to assign the task to

---

How to find GHL IDs
Location ID

GHL dashboard → SettingsBusiness Profile → scroll to the very bottom → copy the string next to "Location ID" (looks like abc123xyz789).

Pipeline ID

GHL → Opportunities → select a pipeline → look at the URL:
https://app.gohighlevel.com/v2/location/.../opportunities/pipeline/PIPELINE_ID/...
Copy the segment after /pipeline/.

Stage ID

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.

Contact ID

GHL → Contacts → open a contact → the URL contains /contacts/CONTACT_ID. Or use the output of an upsert_contact action: {{variables.ghlContact.contactId}}.

User ID (for task assignment)

GHL → SettingsMy Staff → click a team member → the URL contains the user ID.

---

Variables available
VariableDescription
{{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

---

Step-by-step setup
  1. Go to /workspace/credentials and click Connect GoHighLevel. Authorise the OAuth flow for the correct sub-account.
  2. Copy your Location ID from GHL → Settings → Business Profile.
  3. Add a GoHighLevel node to your automation canvas.
  4. Set Action to upsert_contact.
  5. Map email{{lead.email}}, firstName{{lead.firstName}}, etc.
  6. Paste your Location ID into the locationId field.
  7. Save. Run a test lead through the automation and check GHL Contacts.
  8. Add a second GHL node after the first, set action to add_tag, and use {{variables.ghlContact.contactId}} as the contact ID.

---

Example config

json { "action": "upsert_contact", "credentialId": "cred_abc123", "firstName": "{{lead.firstName}}", "lastName": "{{lead.lastName}}", "email": "{{lead.email}}", "phone": "{{lead.phone}}", "locationId": "abc123xyz789", "tags": "inbound,flowmaticx" }

---

Tips & gotchas
  • 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 dueDate for tasks must be ISO 8601 with timezone; use 2026-05-01T09:00:00Z not 2026-05-01.