Connect n8n to GoHighLevel: The Complete Guide (3 Methods + Free Workflows)
I connect n8n to GoHighLevel almost every week — for restaurant ordering systems, lead pipelines and client automations. There are exactly three ways to do it, and most guides only cover one (often incorrectly). This page covers all three, when to use each, and gives you three importable n8n workflows to start from.
TL;DR: use the native HighLevel node for quick contact/opportunity operations, webhooks when GHL should trigger n8n (or the reverse), and the HTTP Request node with a Private Integration Token for everything else — it reaches the entire GHL API v2. AI agents get a fourth door via GHL’s MCP server.
Method 1 — the native HighLevel node
n8n ships a built-in HighLevel node. Add it to your canvas, create a HighLevel credential (OAuth2), and you get ready-made operations for contacts, opportunities and tasks without touching an endpoint.
Use it when: you need standard CRM operations — create/update contacts, move opportunities — and want them working in minutes.
Its limit: the node covers a subset of the API. Invoices, calendars, conversations, custom objects, payments — for those you’ll graduate to Method 3. Most of my production workflows end up on Method 3 for exactly this reason.
Method 2 — webhooks (GHL ⇄ n8n)
GHL → n8n
- In n8n, add a Webhook trigger node and copy its production URL.
- In your GHL workflow, add the Webhook action and paste the URL (method POST).
- Every contact that hits that workflow step is instantly POSTed to n8n with its fields — n8n takes over from there: enrich, score, sync to another system, anything.
A typical payload arrives under body in n8n, so a contact’s email is {{ $json.body.email }}. Fire a test contact through the GHL workflow once and pin the data in n8n — building against real payloads beats guessing every time.
n8n → GHL
GHL workflows can also start from an Inbound Webhook trigger: GHL gives you a URL, and your n8n HTTP Request node posts to it. Use this when you want the automation logic to live in GHL (SMS sequences, appointment bookings) but the trigger to come from your own systems — a new order, a form on a custom site, a payment event.
Use webhooks when: events should flow between the two systems in real time. This pair is the backbone of most of my client builds.
Method 3 — the full API v2 with a Private Integration Token
This is the method that does everything. GHL’s API v2 covers contacts, conversations, calendars, invoices, opportunities, payments and more — and the simplest way to authenticate server-to-server is a Private Integration Token (PIT).
- In the sub-account: Settings → Private Integrations → Create. Pick only the scopes you need (e.g.
contacts.write,conversations/message.write). - In n8n, use an HTTP Request node with two headers on every call:
Authorization: Bearer pit-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Version: 2021-07-28
That Version header is the step every broken tutorial misses — without it the API rejects the call. A contact upsert looks like this:
POST https://services.leadconnectorhq.com/contacts/upsert
{
"locationId": "YOUR_LOCATION_ID",
"email": "jane@example.com",
"phone": "+447700900123",
"firstName": "Jane",
"tags": ["ordered", "source:website"]
}
Use it when: you need anything the native node can’t do, or you want one consistent pattern across all your workflows. Store the token in an n8n credential (Header Auth), never inline, and prefer one PIT per sub-account so you can revoke cleanly.
Bonus — GHL’s MCP server for AI agents
If you’re building AI agents in n8n, GoHighLevel exposes an MCP (Model Context Protocol) server, which lets an n8n AI Agent node call GHL as a tool — look up a contact mid-conversation, book an appointment, add a tag — without you hand-wiring each endpoint. Connect it through the agent’s MCP client tool with your PIT, and treat it as Method 3 with the agent deciding when to call. For deterministic automations, stick to Methods 1–3; MCP shines when an LLM is in the loop.
Three free workflows to import
These are simplified versions of patterns running in my production client systems. Import into n8n (Workflow menu → Import from file), add your PIT and location ID, and they run on any plan including self-hosted:
No-show Follow-upGHL marks a no-show → n8n waits an hour → a rebooking SMS goes out via the conversations API.
Lead Scoring → TagScores incoming leads with transparent rules in a Code node and tags them hot/warm/cold in GHL for routing.
Which method should you pick?
| Scenario | Method | Why |
|---|---|---|
| Quick contact/opportunity ops | Native node | Working in minutes, no endpoints |
| GHL event should start an automation | Webhook (GHL → n8n) | Real-time, no polling |
| External event should start a GHL workflow | Inbound Webhook (n8n → GHL) | Keeps nurture logic in GHL |
| Invoices, calendars, conversations, payments | HTTP Request + PIT | Full API v2 coverage |
| AI agent needs GHL as a tool | MCP server | LLM decides when to call |
If you’d rather have this built for you — including the parts that never make it into tutorials, like retries, deduplication and error alerting — that’s what I do. See my GoHighLevel services or, for agencies, white-label fulfilment.
Frequently asked questions
Does n8n have a native GoHighLevel integration?
Yes — n8n ships a built-in HighLevel node that covers contacts, opportunities and tasks via OAuth2. For anything beyond that subset (invoices, calendars, conversations, custom objects) use the HTTP Request node with a Private Integration Token, which reaches the full GHL API v2.
What is a GoHighLevel Private Integration Token (PIT)?
A token you create per sub-account under Settings → Private Integrations. You choose its scopes, and n8n sends it as a Bearer token in the Authorization header together with the Version: 2021-07-28 header. It is the simplest reliable way to authenticate server-to-server calls.
Can GoHighLevel trigger an n8n workflow?
Yes. Add a Webhook action inside a GHL workflow and point it at an n8n Webhook trigger URL — GHL posts the contact and event data to n8n the moment the workflow step runs. The reverse direction works with GHL's Inbound Webhook trigger.
Do the downloadable workflows on this page work on the free n8n tier?
Yes. All three use only core nodes (Webhook, IF, Wait, Set, Code, HTTP Request), so they run on any n8n plan, including a self-hosted community instance.