Salesforce
Overview
Section titled “Overview”The Salesforce nodes connect your workflows to Salesforce through its REST API. Use them to automate your CRM: create a Lead when a form comes in, update an Opportunity as a process advances, query accounts with SOQL, or sync records by an external id (upsert).
There are six nodes, one per operation:
| Node | Operation | HTTP method |
|---|---|---|
Salesforce: Create record (salesforceCreateRecord) | Create a record | POST /sobjects/{sobject} |
Salesforce: Get record (salesforceGetRecord) | Read a record by id | GET /sobjects/{sobject}/{id} |
Salesforce: Update record (salesforceUpdateRecord) | Update fields | PATCH /sobjects/{sobject}/{id} |
Salesforce: Delete record (salesforceDeleteRecord) | Delete a record | DELETE /sobjects/{sobject}/{id} |
Salesforce: SOQL query (salesforceQuery) | Query with SOQL | GET /query?q=... |
Salesforce: Upsert record (salesforceUpsertRecord) | Create or update by external id | PATCH /sobjects/{sobject}/{extField}/{extValue} |
Credential
Section titled “Credential”The nodes use a Salesforce credential. Create it in Credentials → Add → Salesforce with these fields:
| Field | Description |
|---|---|
| login_url | https://login.salesforce.com (production) or https://test.salesforce.com (sandbox). |
| client_id | Your Connected App’s Consumer Key. |
| client_secret | Your Connected App’s Consumer Secret. |
| username | The Salesforce user. |
| password | The password concatenated with the security token (e.g. MyPass + AbCd1234...). |
Important: OAuth2 password flow
Section titled “Important: OAuth2 password flow”- Authentication uses the OAuth2 password flow: the engine requests a token from
POST {login_url}/services/oauth2/tokenand calls the API withAuthorization: Bearer {access_token}. The token is cached in memory (~2h) and refreshed automatically if it expires (401). - The
passwordis the password + the security token concatenated, with no separator. The security token is emailed to you from Setup → Reset My Security Token. - For a sandbox use
login_url = https://test.salesforce.com. PATCH(update/upsert) andDELETEreturn204with no body: the node treats it as success.- Queries use SOQL (e.g.
SELECT Id, Name FROM Account LIMIT 10). - Upsert uses an external id field (a field marked as External ID in Salesforce): if a record with that value exists it’s updated, otherwise it’s created.
You can verify the credential with the Test button, which fetches the OAuth2 token and shows the instance_url.
Salesforce: Create record (salesforceCreateRecord)
Section titled “Salesforce: Create record (salesforceCreateRecord)”| Parameter | Type | Required | Description |
|---|---|---|---|
| credentials_id | credential | Yes | Salesforce credential |
| sobject | text | Yes | Object (e.g. Account, Contact, Lead, Opportunity, Case) |
| fields | JSON | Yes | Record fields, e.g. {"Name":"ACME"} |
Output: { "id": "...", "success": true }.
Salesforce: Get record (salesforceGetRecord)
Section titled “Salesforce: Get record (salesforceGetRecord)”| Parameter | Type | Required | Description |
|---|---|---|---|
| credentials_id | credential | Yes | Salesforce credential |
| sobject | text | Yes | Object (e.g. Account) |
| record_id | text | Yes | Record id |
| fields | text | No | Fields to return, comma-separated (e.g. Name,Email). Empty = all |
Salesforce: Update record (salesforceUpdateRecord)
Section titled “Salesforce: Update record (salesforceUpdateRecord)”| Parameter | Type | Required | Description |
|---|---|---|---|
| credentials_id | credential | Yes | Salesforce credential |
| sobject | text | Yes | Object (e.g. Account) |
| record_id | text | Yes | id of the record to update |
| fields | JSON | Yes | Fields to update, e.g. {"Phone":"555"} |
Output: { "id": "...", "updated": true } (Salesforce responds 204).
Salesforce: Delete record (salesforceDeleteRecord)
Section titled “Salesforce: Delete record (salesforceDeleteRecord)”| Parameter | Type | Required | Description |
|---|---|---|---|
| credentials_id | credential | Yes | Salesforce credential |
| sobject | text | Yes | Object (e.g. Account) |
| record_id | text | Yes | id of the record to delete |
Output: { "id": "...", "deleted": true } (Salesforce responds 204).
Salesforce: SOQL query (salesforceQuery)
Section titled “Salesforce: SOQL query (salesforceQuery)”| Parameter | Type | Required | Description |
|---|---|---|---|
| credentials_id | credential | Yes | Salesforce credential |
| soql | textarea | Yes | SOQL query, e.g. SELECT Id, Name FROM Account LIMIT 10 |
Output: the array of records (records).
Salesforce: Upsert record (salesforceUpsertRecord)
Section titled “Salesforce: Upsert record (salesforceUpsertRecord)”| Parameter | Type | Required | Description |
|---|---|---|---|
| credentials_id | credential | Yes | Salesforce credential |
| sobject | text | Yes | Object (e.g. Account) |
| external_id_field | text | Yes | External id field (e.g. ExternalId__c) |
| external_id_value | text | Yes | External id value |
| fields | JSON | Yes | Record fields |
Output: { "id": "...", "success": true, "created": true|false }.
Example
Section titled “Example”Create a Lead from a form:
- Node: Salesforce: Create record
- sobject:
Lead - fields:
{ "LastName": "{{data.lastName}}", "Company": "{{data.company}}", "Email": "{{data.email}}"}Output:
{ "id": "00Q5g00000AbCdEFGH", "success": true}Error handling
Section titled “Error handling”Each node classifies errors so the engine knows whether a retry makes sense:
| Situation | Retryable | What to do |
|---|---|---|
| Validation (400) | No | Salesforce returns the reason ([{message, errorCode}], e.g. missing required field). Fix the data. |
| Not found (404) | No | The record or object doesn’t exist. Check the id and sobject. |
| Authentication (401/403) | No | After an automatic retry re-fetching the token it still fails: check the Connected App, the user, the password+security token, or permissions. |
| Server (5xx) | Yes | Temporary Salesforce error; retried automatically. |
| Rate limit (429/503) | Yes | Retry-After is honored and retried. |
| Network / Timeout | Yes | Transient issue; retried automatically. |
See also
Section titled “See also”- HubSpot and Monday — other CRMs.
- Jira (Atlassian), Asana, Trello, Notion and ClickUp — work management.
- Retry queue (DLQ) — how failed executions are retried.
- HTTP node — for Salesforce endpoints not covered by these nodes.