All modules
Module 14 · business · intermediate
GoHighLevel to n8n Bridge
After this module you can extend GoHighLevel with n8n: receive every new lead from a GHL workflow, qualify it with rules + AI, and write the result back to the contact as tags and a note.
What it does
A GoHighLevel workflow (trigger: Contact Created or Form Submitted) sends the lead to POST /webhook/ghl/lead. n8n:
- Normalizes either GHL webhook shape (Custom Webhook or standard Webhook with
customData). - Scores the lead instantly with transparent rules (business email, phone, detail, source, budget, urgency).
- Asks OpenAI how well the lead fits your offer (fit score, intent, budget, summary, next step).
- Blends both (40/60) into hot / warm / cold, then adds the tag (
ai-hot,ai-warm,ai-cold, plusai-qualified) and a qualification note to the contact via the LeadConnector API. - Responds with the result and branches hot leads to a sales alert.
?dry_run=true runs only steps 1–2 and writes nothing, so the module is fully testable without GHL or OpenAI.
GHL can then use the tags to trigger its own follow-up: hot leads into a "call now" pipeline stage, cold leads into a nurture sequence.
Flow
GHL Lead Webhook → Settings → Normalize GHL Payload → Has Contact ID? ─no→ 400
└yes→ Rule Score → Dry Run? ─yes──────────────┐
└no→ AI Qualify ──┴→ Combine Scores → Write to GHL? ─no→ Respond
└yes→ Add Tag → Add Note → Respond + Hot Lead? → Alert Sales
Verification status (n8n 2.43.6)
- Dry run: 14/14 checks without credentials (hot/warm/cold tiers, both GHL payload shapes, normalization, missing-id 400).
- GHL write-back: verified against a mock GoHighLevel API in n8n (AI step replaced by a fixed answer). It received
POST /contacts/{id}/tags{"tags":["ai-hot","ai-qualified"]}andPOST /contacts/{id}/notes{"body": …}withVersion: 2021-07-28and the Bearer token. The blended score was correct (0.4·90 + 0.6·85 = 87). - Not tested against real GoHighLevel or OpenAI. Endpoints follow third-party API references (no official page found in research); confirm with one real contact:
WITH_CREDS=1 GHL_CONTACT_ID=… ./test/test.sh.
Files
| File | Tier | Purpose |
|---|---|---|
| lesson.md | Free | Step-by-step build + GHL setup |
| workflow/starter.json | Free | Webhook, normalizer and rule scoring |
| workflow/learner.json | Learner | Finished bridge |
| workflow/code/ | Learner | Readable copies of the Code nodes |
| exercises.md | Learner | Practice tasks (incl. building a mock GHL API) |
| solutions.md | Learner | Exercise solutions |
| notes.md | Private | Learning log |
| sell/ | Private | Offer, video script, blog post |