ghl-cli-pro
v0.2.5
Published
GoHighLevel CLI — public API v2 plus internal API. Smart-routed, agent-ready.
Maintainers
Readme
GHL CLI Pro
Standalone GoHighLevel CLI. 70 modules, 197 commands across public API v2 and internal API. No external MCP dependency.
Install
npm install -g ghl-cli-pro
ghl --helpOr from source:
git clone https://github.com/revanthrevo/ghl-cli.git
cd ghl-cli
npm install
npm run build
./install.shQuick Start
# List contacts
ghl contacts list --limit 20
# Get a contact
ghl contacts get <contactId>
# Create a contact
ghl contacts create --first-name John --last-name Doe --email [email protected]
# Send an email
ghl conversations send --contact-id <id> --type Email --message "hello" --subject "Hi"
# List workflows
ghl workflows list
# List funnels
ghl funnels listSetup
Credentials are written to ~/.config/ghl-cli/config.json.
Zero-Touch Setup (Recommended)
The fastest way to get started. Works for both human users and AI agents.
# 1. Install the Chrome extension
# Copy the `extension/` folder into Chrome: chrome://extensions/ → Load unpacked
# 2. Start the CLI and let it guide you
ghl setup autoWhat happens: CLI starts a local listener. You log into GHL in Chrome, click "Setup" in the extension popup. Extension auto-captures your Firebase session, creates a Private Integration Token, and sends everything to CLI. Done.
Manual Setup Wizard
If the extension can't auto-create a Private Integration Token:
ghl setup wizardGuides you through:
- Location ID — Your GHL location identifier
- Private Integration Token (PIT) — From GHL Settings → Integrations
- Firebase Token — From Chrome extension or manual paste
License
# Activate a Gumroad license key
ghl license activate --key <GUMROAD-LICENSE-KEY>
# Check status
ghl license status
# Remove license
ghl license removeBuy a license at the Gumroad product page. Key is emailed automatically after purchase.
Modules
Contacts & CRM
contacts — Core contact operations
ghl contacts list [--query <q>] [--limit <n>]
ghl contacts get <contactId>
ghl contacts create [--first-name --last-name --email --phone] [--data <json>]
ghl contacts update <contactId> [--first-name --last-name --email --phone] [--data <json>]
ghl contacts delete <contactId>contacts-extra — Bulk operations and contact enrichment
ghl contacts count [--query <q>]
ghl contacts upsert [--first-name --last-name --email --phone] [--data <json>]
ghl contacts bulk-add-tags --contact-ids <csv> --tags <csv>
ghl contacts bulk-remove-tags --contact-ids <csv> --tags <csv>
ghl contacts bulk-delete --contact-ids <csv>
ghl contacts bulk-add-to-workflow --contact-ids <csv> --workflow-id <id>
ghl contacts add-tags <contactId> --tags <csv>
ghl contacts remove-tags <contactId> --tags <csv>
ghl contacts add-to-workflow <contactId> --workflow-id <id>
ghl contacts remove-from-workflow <contactId> --workflow-id <id>
ghl contacts notes list <contactId>
ghl contacts notes create <contactId> --body <text>
ghl contacts tasks list <contactId>
ghl contacts tasks create <contactId> --title --due-date [--data <json>]
ghl contacts appointments list <contactId>contacts-smart-lists — Smart list membership
ghl contacts smart-lists list [--limit <n>]tags — Tag management
ghl tags list
ghl tags create --name <name> [--data <json>]
ghl tags update <tagId> --name <name> [--data <json>]
ghl tags delete <tagId>custom-fields — Custom field definitions and folders
ghl custom-fields list --object-key <key> [--json]
ghl custom-fields get <id>
ghl custom-fields create --data-type --field-key --object-key --parent-id --show-in-forms true|false [--name --data <json>]
ghl custom-fields update <id> --data <json>
ghl custom-fields delete <id>
ghl custom-fields folders create --object-key --name [--data <json>]
ghl custom-fields folders update <id> --data <json>
ghl custom-fields folders delete <id>businesses — Business profiles
ghl businesses list [--limit <n>] [--skip <n>]
ghl businesses get <businessId>
ghl businesses create --name <name> [--data <json>]
ghl businesses update <businessId> --data <json>
ghl businesses delete <businessId>companies — Company records (read-only)
ghl companies get <companyId>associations — Contact associations
ghl associations list [--limit <n>]
ghl associations get <id>
ghl associations create --type --first-id --second-id [--data <json>]courses — Course catalog
ghl courses list
ghl courses get <courseId>Communication
conversations — Conversation inbox
ghl conversations list [--contact-id <id>] [--limit <n>]
ghl conversations get <conversationId>
ghl conversations send --contact-id <id> --type <SMS|Email|...> --message <text> [--data <json>]messages — Direct messaging with internal API
ghl messages list --contact-id <id> [--limit <n>]
ghl messages get <messageId>
ghl messages send --contact-id <id> --type <SMS|Email|...> --message <text> [--data <json>]
ghl messages send-internal --contact-id <id> --message <text> [--data <json>]
ghl messages templates list [--limit <n>]
ghl messages bulk --contact-ids <csv> --type <SMS|Email> --message <text>emails — Email templates and campaigns (read + schedule CRUD)
ghl emails templates list [--limit <n>] [--offset <n>]
ghl emails schedule list [--limit <n>] [--offset <n>]
ghl emails template delete <templateId>templates — Email template and campaign management
ghl templates list [--type email|sms|...] [--limit <n>]
ghl templates get <templateId>
ghl templates create --name --type [--data <json>]
ghl templates update <templateId> --data <json>
ghl templates delete <templateId>
ghl templates rename <templateId> --name <name>
ghl templates archive <templateId>
ghl templates campaigns list [--limit <n>]
ghl templates campaign create --name --data <json>notifications — Notification management
ghl notifications list [--limit <n>]
ghl notifications get <notificationId>
ghl notifications mark-read <notificationId>
ghl notifications delete <notificationId>notes — Contact notes
ghl notes list <contactId>
ghl notes create <contactId> --body <text>
ghl notes update <noteId> --body <text>
ghl notes delete <noteId>reviews — Reviews
ghl reviews list [--limit <n>]
ghl reviews get <reviewId>surveys — Surveys
ghl surveys list [--limit <n>] [--skip <n>] [--type <t>]
ghl surveys submissions [--survey-id <id>] [--limit <n>] [--page <n>] [--q <text>] [--start-at <date>] [--end-at <date>]forms — Form definitions, fields, and submissions
ghl forms list [--limit <n>]
ghl forms get <formId>
ghl forms create --name --data <json>
ghl forms update <formId> --data <json>
ghl forms delete <formId>
ghl forms submissions [--form-id <id>] [--start-at <date>] [--end-at <date>]
ghl forms fields list --form-id <id>
ghl forms fields create --form-id <id> --data <json>
ghl forms fields update <fieldId> --data <json>
ghl forms fields delete <fieldId>Sales
opportunities — Pipeline opportunities
ghl opportunities list [--query <q>] [--limit <n>] [--pipeline-id <id>]
ghl opportunities get <id>
ghl opportunities create --pipeline-id --name --status --contact-id [--data <json>]
ghl opportunities update <id> --data <json>
ghl opportunities delete <id>
ghl opportunities move <id> --stage <stageId>pipelines — Pipeline management
ghl pipelines list
ghl pipelines get <pipelineId>
ghl pipelines create --name --data <json>
ghl pipelines update <pipelineId> --data <json>
ghl pipelines delete <pipelineId>stages — Pipeline stages
ghl stages list [--pipeline-id <id>]
ghl stages get <stageId>
ghl stages create --pipeline-id --name --position [--data <json>]
ghl stages update <stageId> --data <json>
ghl stages delete <stageId>
ghl stages reorder --pipeline-id <id> --order <id1,id2,...>invoices — Invoice management
ghl invoices list [--limit <n>] [--offset <n>] [--status <s>]
ghl invoices get <invoiceId>
ghl invoices create --data <json>
ghl invoices send <invoiceId> --user-id <id> [--action email|sms]
ghl invoices void <invoiceId>estimates — Estimates
ghl estimates list
ghl estimates get <estimateId>
ghl estimates create --data <json>
ghl estimates update <estimateId> --data <json>
ghl estimates delete <estimateId>
ghl estimates send <estimateId> [--data <json>]proposals — Proposal documents and templates
ghl proposals documents list [--limit <n>] [--skip <n>]
ghl proposals documents send --data <json> (needs locationId, documentId, sentBy)
ghl proposals templates list
ghl proposals templates send --data <json> (needs templateId, userId, locationId, contactId)payments — Orders, transactions, subscriptions, coupons
ghl payments orders list
ghl payments orders get <orderId>
ghl payments transactions list
ghl payments transactions get <transactionId>
ghl payments subscriptions list
ghl payments subscriptions get <subscriptionId>
ghl payments coupons list
ghl payments coupons create --data <json> (needs altId, altType, name, code, discountType, discountValue, startDate)
ghl payments coupons update --data <json> (same fields plus id)
ghl payments coupons delete --data <json> (needs altId, altType, id)coupons — Unified coupon access
ghl coupons list [--limit <n>]
ghl coupons get <couponId>
ghl coupons create --data <json>
ghl coupons update <couponId> --data <json>
ghl coupons delete <couponId>links — Tracking links
ghl links list
ghl links get <linkId>
ghl links search [--query <q>] [--skip <n>] [--limit <n>]
ghl links create --name --redirect-to [--data <json>]
ghl links update <linkId> --name --redirect-to [--data <json>]
ghl links delete <linkId>memberships — Membership products and orders
ghl memberships list
ghl memberships get <membershipId>
ghl memberships create --name --data <json>
ghl memberships update <membershipId> --data <json>
ghl memberships delete <membershipId>
ghl memberships orders list <membershipId>Marketing
blogs — Blog posts and metadata
ghl blogs posts list --blog-id <id> [--limit <n>] [--offset <n>]
ghl blogs posts create --data <json>
ghl blogs posts update <postId> --data <json>
ghl blogs authors list
ghl blogs categories list
ghl blogs sites listproducts — Product catalog with prices and collections
ghl products list [--limit <n>] [--offset <n>]
ghl products get <productId>
ghl products create --name --product-type [--data <json>]
ghl products update <productId> --data <json>
ghl products delete <productId>
ghl products prices list <productId>
ghl products prices create <productId> --name --type --currency --amount [--data <json>]
ghl products collections listproducts-extra — Inventory and product orders
ghl products inventory list [--product-id <id>]
ghl products inventory update --product-id <id> --quantity <n>
ghl products orders list [--product-id <id>]
ghl products orders get <orderId>
ghl products orders create --data <json>
ghl products orders update <orderId> --data <json>
ghl products orders delete <orderId>
ghl products orders refund <orderId> [--data <json>]social — Social media accounts and posts
ghl social accounts [--limit <n>]
ghl social posts list [--limit <n>]
ghl social posts get <postId>
ghl social posts create --data <json>
ghl social posts update <postId> --data <json>
ghl social posts delete <postId>social-media-posting — Social posting (internal)
ghl social-media-posting accounts list
ghl social-media-posting posts listad-manager — Ad campaigns
ghl ad-manager ads listaffiliate-manager — Affiliate management
ghl affiliate-manager affiliates list
ghl affiliate-manager membership-offers listcampaigns — Email campaigns (read-only)
ghl campaigns list [--status <s>]Automation
workflows — Workflow automation (full CRUD + publish + clone)
ghl workflows list [--limit <n>] [--offset <n>]
ghl workflows get <id> [--json]
ghl workflows create <name> [--trigger <type>] [--action <type>] [--data <json>] [--dry-run] [--plan]
ghl workflows update <id> --data <json> [--dry-run]
ghl workflows publish <id>
ghl workflows clone <id> --name <name>funnels — Funnel pages and redirects
ghl funnels list [--type <t>] [--category <c>]
ghl funnels pages list <funnelId> --limit <n> --offset <n>
ghl funnels pages count <funnelId>
ghl funnels pages create <funnelId> --name <name> [--dry-run]
ghl funnels pages update <funnelId> <pageId> --name <name> [--dry-run]
ghl funnels pages delete <funnelId> <pageId> [--dry-run]
ghl funnels redirects list <funnelId>
ghl funnels redirects create <funnelId> --domain --path --target --action
ghl funnels redirects update <funnelId> <redirectId> --target --action
ghl funnels redirects delete <funnelId> <redirectId>builders — Composite asset builders
ghl build workflow <name> [--trigger <type>] [--action <type>] [--data <json>] [--plan] [--dry-run]
ghl build funnel <name> [--pages <n>] [--page-names <csv>] [--data <json>] [--plan] [--dry-run]
ghl build pipeline <name> [--stages <n>] [--stage-names <csv>] [--data <json>] [--plan] [--dry-run]snapshots — Snapshot management (agency-level)
ghl snapshots list --company-id <id>
ghl snapshots share --snapshot-id --share-type --company-id [--data <json>]
ghl snapshots status <snapshotId>
ghl snapshots status-for-location <snapshotId> <locationId>trigger-links — Trigger links
ghl trigger-links listInternal & Admin
users — User management
ghl users list [--location-id <id>]
ghl users get <userId>
ghl users create --data <json> (needs companyId, firstName, lastName, email, password, type, role, locationIds)
ghl users delete <userId>media — Media library
ghl media list --sort-by <field> --sort-order asc|desc --type file|folder [--limit <n>]
ghl media delete <id>objects — Custom objects (schemas + records)
ghl objects schemas list
ghl objects schemas get <key>
ghl objects records search --schema-key <key> [--limit <n>] [--data <json>]
ghl objects records get <schemaKey> <recordId>
ghl objects records create <schemaKey> --data <json>
ghl objects records delete <schemaKey> <recordId>webhooks — Webhook management
ghl webhooks list
ghl webhooks get <webhookId>
ghl webhooks create --url --events <csv> [--data <json>]
ghl webhooks update <webhookId> --data <json>
ghl webhooks delete <webhookId>phone-system — Phone system (internal)
ghl phone-system numbers list
ghl phone-system voice-token
ghl phone-system whatsapp subscriptionphones — Phone numbers
ghl phones list [--limit <n>]
ghl phones get <phoneId>voice-ai — Voice AI agents and sessions
ghl voice-ai agents list
ghl voice-ai copilot sessions list
ghl voice-ai ai-planconversation-ai — Conversation AI providers and actions
ghl conversation-ai providers list
ghl conversation-ai actions listsaas-api — SaaS billing and conversation AI billing
ghl saas-api billing config
ghl saas-api conversation-ai billingmarketplace — Marketplace scripts and products
ghl marketplace scripts list
ghl marketplace products listbrand-boards — Brand boards
ghl brand-boards listknowledge-base — Knowledge base articles
ghl knowledge-base listreports — Reporting endpoints
ghl reports list [--type <reportType>] [--start-date <date>] [--end-date <date>]
ghl reports get <reportId>
ghl reports contacts [--start-date <date>] [--end-date <date>]
ghl reports opportunities [--start-date <date>] [--end-date <date>]
ghl reports revenue [--start-date <date>] [--end-date <date>]
ghl reports campaigns [--start-date <date>] [--end-date <date>]
ghl reports conversations [--start-date <date>] [--end-date <date>]settings — Account settings
ghl settings get
ghl settings update --data <json>
ghl settings payment-methods list
ghl settings integrations list
ghl settings email list
ghl settings sms list
ghl settings notifications listaccount-health — Account health check
ghl account-health [--location <id>]smart-lists — Smart list management
ghl smart-lists list [--limit <n>]
ghl smart-lists get <smartListId>
ghl smart-lists create --name --data <json>
ghl smart-lists update <smartListId> --data <json>
ghl smart-lists delete <smartListId>
ghl smart-lists contacts create <smartListId> --contact-id <id>
ghl smart-lists contacts get <smartListId> <contactId>
ghl smart-lists contacts delete <smartListId> <contactId>documents — Document management
ghl documents list [--limit <n>]
ghl documents get <documentId>
ghl documents create --data <json>
ghl documents update <documentId> --data <json>
ghl documents delete <documentId>
ghl documents send <documentId> --data <json>tasks — Task management
ghl tasks list [--contact-id <id>] [--limit <n>]
ghl tasks get <taskId>
ghl tasks create --contact-id --title --due-date [--data <json>]
ghl tasks update <taskId> --data <json>
ghl tasks delete <taskId>Tools & Utilities
auth — Authentication
ghl auth listen # Pair with Chrome extension over loopback
ghl auth import --stdin # Read a captured session as JSON from stdinsetup — Setup and status
ghl setup wizard # Interactive setup wizard
ghl setup list # Setup statusdoctor — Diagnostics
ghl doctor [--location <id>] [--json]route — Natural language command router
ghl route "list all contacts in California"browser — Browser automation (via Chrome extension)
ghl browser login # Start browser session
ghl browser status # Check browser status
ghl browser close # Close browser session
ghl browser task <url> # Navigate and extract
ghl browser goto <url> # Navigate to URL
ghl browser screenshot # Take screenshot
ghl browser eval <js> # Execute JavaScriptskills — Agent skills marketplace
ghl skills list [--limit <n>]
ghl skills get <skillId>
ghl skills search <query>
ghl skills validate <skillId>learning — Self-learning layer
ghl learning stats
ghl learning health
ghl learning routes
ghl learning patterns
ghl learning suggest <command>
ghl learning queue
ghl learning feedbackaccounts — Account management
ghl accounts export [--location <id>] [--output <path>]
ghl accounts diff --location-a <id> --location-b <id>
ghl accounts audit [--location <id>]locations — Location management
ghl locations register --location-id <id> --api-key pit-... [--name <name>] [--company-id <id>]
ghl locations list [--json]
ghl locations switch <locationId>Global Flags
--json Machine-readable JSON output
--quiet Suppress progress notes
--location <id> Override active location
--dry-run Print write requests instead of sending
--all Paginate through all pages automatically
--csv Machine-readable CSV output
--verbose Debug loggingDev
npm test # Run test suite (598 tests)
npm run build # Compile TypeScript
npm run dev # Watch modeDocs
- ENDPOINTS.md — Verified internal API contracts
- PROGRESS.md — Development tracker
- TODO.md — Pending tasks
- BUGS.md — Known issues
License
MIT License — internal use only.
