Package Information
Documentation
n8n-nodes-epic-ghl-subaccount
Open in Obsidian:
obsidian://open?vault=Epic%20Tech%20Software&file=projects/epic-dashboards/n8n-nodes-epic-ghl-subaccount/README
An Epic Dashboards–owned n8n community node for the GoHighLevel API, scoped to a single sub-account (location).
It authenticates directly into one sub-account via its own OAuth2 credential — the user picks one location on GHL's "Choose Location" consent screen, and the returned token is already location-scoped. There is no agency → location token exchange.
This is the ED-owned recreation of the internal n8n-nodes-boomerang-subaccount node, rebranded so the Epic Dashboards spinout does not depend on the agency package. Same GHL logic, Epic identifiers:
| Internal (agency) | This package (ED-owned) | |
|---|---|---|
| npm name | n8n-nodes-boomerang-subaccount |
n8n-nodes-epic-ghl-subaccount |
| Node type | boomerangSubaccount |
epicSubaccount |
| Node label | "Boomerang Subaccount" | "Epic Subaccount" |
| Credential | boomerangSubaccountOAuth2Api |
epicSubaccountOAuth2Api |
| Credential label | "Boomerang Subaccount OAuth2" | "Epic Subaccount OAuth2" |
Resources
Appointment · Calendar · Contact · Custom Field · Custom Value · Funnel · Invoice ·
Media · Note · Opportunity · Pipeline · Template · Trigger Link · User · Workflow.
For the founding-cohort funnel the relevant piece is Contact → Create or Update (upserts by email; matches the GHL contact-identity model the funnel relies on) plus Custom Field for reading the location's field IDs.
Added in 0.2.0 — marketing-asset surfaces
Added so the marketing command center can reach GHL through this node rather than
raw HTTP calls. Everything GHL-facing goes through here; if an endpoint is missing,
add it to this node rather than hand-rolling an HTTP Request node.
| Resource | Operations | Endpoint | Notes |
|---|---|---|---|
| Trigger Link | list · create · update · upsert · delete | /links/ |
Native GHL trigger links — per-contact click tracking + "Link Clicked" workflow triggers. upsert with no ID matches on name, so a repeated push updates instead of duplicating. |
| Custom Value | list · get · create · update · upsert · delete | /locations/{id}/customValues |
The {{custom_values.*}} tokens. upsert matches on name when no ID is given. |
| Media | list · upload | /medias/files, /medias/upload-file |
Upload takes a hosted URL (GHL fetches it) or an n8n binary property. |
| Funnel | list · listPages | /funnels/funnel/list, /funnels/page |
Read-only — GHL exposes no funnel/page create; building stays visual-builder-only. |
| Template | list · get · create · update · upsert | /locations/{id}/templates (list) · /emails/locations/{id}/templates[/{id}] |
Email templates take the full HTML (editorType html), subject line and preview text. upsert matches by exact name when no ID is given. Scopes emails/templates.* (0.3.0). |
| Calendar | list · get | /calendars/ |
Uses the older 2021-04-15 Version header. |
0.2.0 also adds funnels/funnel.readonly + funnels/page.readonly to the credential's
scope list. Re-authorize the credential after upgrading — an existing token was minted
without the funnel scopes and will 401 on the Funnel resource until reconnected.
Credential setup (GHL Marketplace OAuth app)
Unlike a Private Integration Token, this node uses OAuth2, so it needs a GHL Marketplace app:
- In the GHL Marketplace developer area, create an app (or reuse one) and enable the scopes the node uses (contacts, opportunities, custom fields, etc. — see
dist/credentials/EpicSubaccountOAuth2Api.credentials.js). - Add n8n's OAuth2 redirect URL as an allowed redirect on the app:
https://epic-tech-software-n8n-u70487.vm.elestio.app/rest/oauth2-credential/callback - In n8n → Credentials → New → "Epic Subaccount OAuth2", paste the app's Client ID and Client Secret, then Connect. On the GHL "Choose Location" screen, pick the sub-account this credential should operate on.
- The location ID is auto-read from the token. Only fill the Location ID (Override) field if n8n reports it can't determine the location.
Install into n8n (self-hosted, elestio)
Community nodes install by npm package name once the package is published. Until then, install it locally.
Option A — publish, then install by name (recommended once stable):
cd projects/epic-dashboards/n8n-nodes-epic-ghl-subaccount
npm publish --access public
# then in n8n: Settings → Community Nodes → Install → n8n-nodes-epic-ghl-subaccount
Option B — local install onto the elestio n8n (no npm publish):
Copy this folder into the n8n instance's custom-nodes directory (~/.n8n/custom/ or the N8N_CUSTOM_EXTENSIONS path) and restart n8n. The package ships prebuilt dist/, so no build step is required.
Building from source
This package ships prebuilt dist/ only — there is no TypeScript source in this folder. The canonical .ts source lives in the internal node repo (theCamArsenault-Boomerang/node-construction-site). If you need source-level maintenance, fork that repo and re-apply the Boomerang→Epic rebrand (node type, credential name, display names, icon), then npm run build.
Where this fits in the founding funnel
The founding-application n8n workflow (ED — Founding Application Intake, id 8aICHL2lBRHelEwS) currently writes to GHL via a raw HTTP Request node using a Private Integration Token — that path works today and needs no OAuth app.
This node is the reusable, typed alternative: once the OAuth app above is set up, the workflow's HTTP node can be swapped for an Epic Subaccount → Contact → Create or Update node, and the same credential is then reusable across every future ED ↔ GHL workflow (opportunities, notes, pipelines, etc.). Swapping is optional — do it when you want the OAuth-app path instead of the PIT.
0.3.1 (2026-09-06)
- Template create/get/update/upsert send
Version: v3— the email templates endpoints are API v3 and answer 404 "Cannot GET/POST" to the default2021-07-28header.
0.3.0 (2026-09-06)
- Template:
create,update,upsert,getfor email templates on the documented Emails API (/emails/locations/{locationId}/templates). - Credential scopes:
emails/templates.readonly,emails/templates.write,emails/campaigns.readonly,emails/campaigns.write,emails/stats.readonly,locations/templates.readonly. - Re-authorize the credential after upgrading. A token minted before 0.3.0 does not carry the new scopes and every template write returns 404/401 until the credential is reconnected.