Send RecordJoy Video Events to Salesforce with n8n
When you finish this guide, every RecordJoy event will find the matching Salesforce Contact by email and log a completed Task with the video link.
flowchart LR A[RecordJoy] -->|"event JSON"| B["n8n Webhook node"] B --> C["Salesforce: find contact"] C --> D["Salesforce: create Task"] D --> E[(Salesforce)]
Shortcut: RecordJoy ships an importable version —
docs/recipes/n8n-salesforce.json. The steps below build it by hand with n8n's native Salesforce node (simpler than raw HTTP).
Prerequisites
- An n8n instance reachable over HTTPS
- Salesforce credentials with API access (n8n's Salesforce OAuth2 credential walks you through the connection)
- RecordJoy account (any plan)
Estimated time
25 minutes
Steps
Part A — the webhook
- In n8n, click + Add workflow and name it
RecordJoy → Salesforce. - Add a Webhook node: HTTP Method
POST, Pathrecordjoy-salesforce. - Click Save, then switch the Active toggle on.
- Open the Webhook node and copy the Production URL.
<!-- SCREENSHOT: n8n-workflow-active-production-url.png -->🖥️ What you should see: a URL like
https://your-instance.app.n8n.cloud/webhook/recordjoy-salesforce.
- In
recordjoy.ai→ dashboard sidebar → CRM Integration: paste the URL, tick your events, click Save, then Send test event. - In n8n's Executions tab, confirm an execution arrived with
"event": "recording.test"underbody.
Part B — find the contact
- Add a Salesforce node connected to the Webhook node; name it
Find Contact. - Create/select your Salesforce OAuth2 API credential and sign in when prompted.
- Configure:
- Resource:
Search - Query:
- Resource:
=SELECT Id FROM Contact WHERE Email = '{{ $json.body.recording.sentTo || $json.body.recording.createdBy }}'
Contact rule: this maps
sentTowith acreatedByfallback. For inboundrecording.receivedevents usesentBy(and consider creating a Lead when no contact matches).
- Execute the step with a pinned test execution and confirm an
Id(starting003) is returned when the contact exists.
<!-- SCREENSHOT: n8n-salesforce-find-output.png -->🖥️ What you should see: output rows with an
Idfield like0035g00000XXXXX.
Part C — create the Task
- Add another Salesforce node connected to
Find Contact; name itCreate Task. - Configure:
- Resource:
Task - Operation:
Create - Status:
Completed - Subject:
=RecordJoy {{ $('Webhook').item.json.body.event }} — {{ $('Webhook').item.json.body.recording.description }} - Under Additional Fields, add:
- Description:
=Watch: {{ $('Webhook').item.json.body.recording.viewUrl }} (watched {{ $('Webhook').item.json.body.recording.watchedTimes }}x) - Who ID:
={{ $json.Id }}(the contact id from Find Contact)
- Description:
- Resource:
- Click Save and confirm the workflow is Active.
Verification
- In RecordJoy → CRM Integration, click Send test event.
- In n8n Executions, confirm a green run through all nodes.
- In Salesforce, open the Contact matching your account email → Activity.
<!-- SCREENSHOT: salesforce-task-on-activity.png -->🖥️ What you should see: a completed Task titled
RecordJoy recording.test — ...with the view link in the description.
Troubleshooting
| Problem | Fix |
|---|---|
| Find Contact returns nothing and the Task step errors | No contact has that email. Add an IF node after Find Contact to skip (or create a Lead) when empty — or test with an email that exists in Salesforce. |
| OAuth connection fails on self-hosted n8n | Your n8n callback URL must be HTTPS and whitelisted in the Salesforce Connected App. Check n8n's credential screen for the exact callback to register. |
| Task created but unassigned to the contact | Who ID must come from the Find Contact node ($json.Id), not a webhook field. Remap it. |
Ready to connect?
Your webhook settings live in Dashboard → CRM Integration.