← All integration guides

Send RecordJoy Video Events to GoHighLevel with n8n

When you finish this guide, every RecordJoy event will upsert a GoHighLevel contact, add a note with the video link, and apply an event tag (like video-completed) that can trigger your GoHighLevel Workflows.

flowchart LR A[RecordJoy] -->|"event JSON"| B["n8n Webhook node"] B --> C["GHL: upsert contact"] C --> D["GHL: add note"] D --> E["GHL: add tag"] E --> F[(GoHighLevel)] F -->|"tag trigger"| G["GHL Workflow"]

Shortcut: RecordJoy ships an importable version — docs/recipes/n8n-gohighlevel.json. The steps below build it by hand.

Prerequisites

Estimated time

25 minutes

Steps

Part A — the webhook

  1. In n8n, click + Add workflow and name it RecordJoy → GHL.
  2. Add a Webhook node: HTTP Method POST, Path recordjoy-ghl.
  3. Click Save, then switch the Active toggle on.
  4. Open the Webhook node and copy the Production URL.

🖥️ What you should see: a URL like https://your-instance.app.n8n.cloud/webhook/recordjoy-ghl.

<!-- SCREENSHOT: n8n-workflow-active-production-url.png -->
  1. In recordjoy.ai → dashboard sidebar → CRM Integration: paste the URL, tick your events, click Save, then Send test event.
  2. In n8n's Executions tab, confirm an execution arrived with "event": "recording.test" under body.

Part B — upsert the contact

  1. Add an HTTP Request node connected to the Webhook node; name it Upsert Contact.
  2. Configure:
    • Method: POST
    • URL: https://services.leadconnectorhq.com/contacts/upsert
    • Authentication: Predefined Credential TypeHighLevel OAuth2
    • Send Headers: on — add header Version = 2021-07-28
    • Body Content Type: JSON, Specify Body: Using JSON
  3. Paste this as the JSON body (replace YOUR_LOCATION_ID):
={{ { "locationId": "YOUR_LOCATION_ID", "email": $json.body.recording.sentTo || $json.body.recording.createdBy, "name": $json.body.recording.sentTo || $json.body.recording.createdBy } }}

Contact rule: this maps sentTo with a createdBy fallback. For inbound recording.received events (portal submissions), use sentBy.

  1. Execute the step and confirm the output contains contact.id.

🖥️ What you should see: a response with a contact object containing an id string.

<!-- SCREENSHOT: n8n-ghl-upsert-output.png -->

Part C — add the note

  1. Add another HTTP Request node connected to Upsert Contact; name it Add Note. Same credential; same Version header.
  2. Configure: Method POST, URL:
=https://services.leadconnectorhq.com/contacts/{{ $json.contact.id }}/notes
  1. Body JSON:
={{ { "body": "RecordJoy " + $('Webhook').item.json.body.event + " — " + ($('Webhook').item.json.body.recording.description || "") + " — watch: " + $('Webhook').item.json.body.recording.viewUrl + " (watched " + ($('Webhook').item.json.body.recording.watchedTimes || 0) + "x)" } }}

Part D — add the tag

  1. Add a third HTTP Request node connected to Add Note; name it Add Tag. Same credential; same Version header.
  2. Configure: Method POST, URL:
=https://services.leadconnectorhq.com/contacts/{{ $('Upsert Contact').item.json.contact.id }}/tags
  1. Body JSON (derives the tag from the event, e.g. video-completed):
={{ { "tags": [ "video-" + $('Webhook').item.json.body.event.split(".")[1] ] } }}
  1. Click Save and confirm the workflow is Active.
  2. Optional: in GoHighLevel, create a Workflow with a Contact Tag trigger on video-completed to alert your rep or start a campaign.

Verification

  1. In RecordJoy → CRM Integration, click Send test event.
  2. In n8n Executions, confirm a green run through all four nodes.
  3. In GoHighLevel → Contacts, open the contact matching your account email.

🖥️ What you should see: the contact has a video-test tag and a note containing recording.test with a recordjoy.ai/view/... link.

<!-- SCREENSHOT: ghl-contact-tag-note.png -->

Troubleshooting

ProblemFix
401/403 from LeadConnectorThe Version: 2021-07-28 header is missing, or the OAuth credential lacks contact scopes. Add the header to every HTTP node and reconnect the credential.
"locationId is required"Replace YOUR_LOCATION_ID in the upsert body with your actual sub-account id.
Tag added but the GHL Workflow doesn't fireThe trigger tag must match exactly (e.g., video-completed) and the Workflow must be Published.

Ready to connect?

Your webhook settings live in Dashboard → CRM Integration.