GHL CRM — GoHighLevel Integration for OpenClaw
Complete GoHighLevel CRM integration. Manage contacts, pipelines, conversations, appointments, and workflows through the GHL API v2.
Quick Start
export GHL_API_KEY="your-private-integration-token"
export GHL_LOCATION_ID="your-location-id"
python3 {baseDir}/scripts/ghl_api.py contacts search "john@example.com"
Authentication
GHL uses Private Integration Tokens (API v2). Get yours from:
- Go to Settings → Integrations → Private Integrations in your GHL sub-account
- Create a new integration, enable the scopes you need
- Copy the API key — this is your
GHL_API_KEY
The GHL_LOCATION_ID is your sub-account/location ID (found in Settings → Business Info or the URL).
Base URL: https://services.leadconnectorhq.com
Auth header: Authorization: Bearer <GHL_API_KEY> + Version: 2021-07-28
Available Commands
Contact Management
# Search contacts by email, phone, or name
python3 {baseDir}/scripts/ghl_api.py contacts search "query"
# Get contact by ID
python3 {baseDir}/scripts/ghl_api.py contacts get <contactId>
# Create a new contact
python3 {baseDir}/scripts/ghl_api.py contacts create '{"firstName":"John","lastName":"Doe","email":"john@example.com","phone":"+15551234567"}'
# Update contact
python3 {baseDir}/scripts/ghl_api.py contacts update <contactId> '{"tags":["vip","hot-lead"]}'
# Delete contact
python3 {baseDir}/scripts/ghl_api.py contacts delete <contactId>
# List contacts (with optional limit)
python3 {baseDir}/scripts/ghl_api.py contacts list --limit 20
Pipeline & Opportunity Management
# List all pipelines
python3 {baseDir}/scripts/ghl_api.py pipelines list
# List opportunities in a pipeline
python3 {baseDir}/scripts/ghl_api.py opportunities list <pipelineId>
# Get opportunity details
python3 {baseDir}/scripts/ghl_api.py opportunities get <opportunityId>
# Create opportunity
python3 {baseDir}/scripts/ghl_api.py opportunities create '{"pipelineId":"...","stageId":"...","contactId":"...","name":"Deal Name","monetaryValue":5000}'
# Update opportunity (move stage, update value)
python3 {baseDir}/scripts/ghl_api.py opportunities update <opportunityId> '{"stageId":"new-stage-id","status":"won"}'
# Delete opportunity
python3 {baseDir}/scripts/ghl_api.py opportunities delete <opportunityId>
Conversations (SMS, Email, WhatsApp)
# List recent conversations
python3 {baseDir}/scripts/ghl_api.py conversations list
# Get conversation messages
python3 {baseDir}/scripts/ghl_api.py conversations get <conversationId>
# Send SMS
python3 {baseDir}/scripts/ghl_api.py conversations send-sms <contactId> "Hello! Following up on our call."
# Send email
python3 {baseDir}/scripts/ghl_api.py conversations send-email <contactId> '{"subject":"Follow Up","body":"<p>Hi there!</p>","emailFrom":"you@domain.com"}'
Calendar & Appointments
# List calendars
python3 {baseDir}/scripts/ghl_api.py calendars list
# Get free slots
python3 {baseDir}/scripts/ghl_api.py calendars slots <calendarId> --start 2026-02-16 --end 2026-02-17
# Create appointment
python3 {baseDir}/scripts/ghl_api.py appointments create '{"calendarId":"...","contactId":"...","startTime":"2026-02-16T10:00:00Z","endTime":"2026-02-16T10:30:00Z","title":"Discovery Call"}'
# List appointments
python3 {baseDir}/scripts/ghl_api.py appointments list <calendarId>
# Update appointment
python3 {baseDir}/scripts/ghl_api.py appointments update <appointmentId> '{"status":"confirmed"}'
# Delete appointment
python3 {baseDir}/scripts/ghl_api.py appointments delete <appointmentId>
Workflows
# Add contact to workflow
python3 {baseDir}/scripts/ghl_api.py workflows add-contact <workflowId> <contactId>
# Remove contact from workflow
python3 {baseDir}/scripts/ghl_api.py workflows remove-contact <workflowId> <contactId>
Key API Endpoints Reference
| Resource | Method | Endpoint |
|---|---|---|
| Search contacts | GET | /contacts/search?query=...&locationId=... |
| Get contact | GET | /contacts/{id} |
| Create contact | POST | /contacts/ |
| Update contact | PUT | /contacts/{id} |
| List pipelines | GET | /opportunities/pipelines?locationId=... |
| List opportunities | GET | /opportunities/search?location_id=...&pipeline_id=... |
| Create opportunity | POST | /opportunities/ |
| List conversations | GET | /conversations/search?locationId=... |
| Send message | POST | /conversations/messages |
| List calendars | GET | /calendars/?locationId=... |
| Get free slots | GET | /calendars/{id}/free-slots?startDate=...&endDate=... |
| Create appointment | POST | /calendars/events/appointments |
Rate Limits
GHL API v2 enforces rate limits:
- General: 100 requests/10 seconds per location
- Bulk operations: 10 requests/10 seconds
- The script auto-retries on 429 with exponential backoff (up to 3 retries)
Integration Patterns
Lead Capture → CRM Pipeline
- Capture lead via form/chatbot
contacts createwith lead dataopportunities createto add to pipelineworkflows add-contactto trigger nurture sequence
Appointment Booking Flow
calendars listto find the right calendarcalendars slotsto get availabilityappointments createto book the slot- GHL auto-sends confirmation via configured workflow
Follow-Up Automation
conversations listto find unresponded conversationscontacts getfor context- Generate follow-up with AI
conversations send-smsorsend-email
Credits
Built by M. Abidi | agxntsix.ai YouTube | GitHub Part of the AgxntSix Skill Suite for OpenClaw agents.
📅 Need help setting up OpenClaw for your business? Book a free consultation