Skip to content

Salesforce

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:

NodeOperationHTTP method
Salesforce: Create record (salesforceCreateRecord)Create a recordPOST /sobjects/{sobject}
Salesforce: Get record (salesforceGetRecord)Read a record by idGET /sobjects/{sobject}/{id}
Salesforce: Update record (salesforceUpdateRecord)Update fieldsPATCH /sobjects/{sobject}/{id}
Salesforce: Delete record (salesforceDeleteRecord)Delete a recordDELETE /sobjects/{sobject}/{id}
Salesforce: SOQL query (salesforceQuery)Query with SOQLGET /query?q=...
Salesforce: Upsert record (salesforceUpsertRecord)Create or update by external idPATCH /sobjects/{sobject}/{extField}/{extValue}

The nodes use a Salesforce credential. Create it in Credentials → Add → Salesforce with these fields:

FieldDescription
login_urlhttps://login.salesforce.com (production) or https://test.salesforce.com (sandbox).
client_idYour Connected App’s Consumer Key.
client_secretYour Connected App’s Consumer Secret.
usernameThe Salesforce user.
passwordThe password concatenated with the security token (e.g. MyPass + AbCd1234...).
  • Authentication uses the OAuth2 password flow: the engine requests a token from POST {login_url}/services/oauth2/token and calls the API with Authorization: Bearer {access_token}. The token is cached in memory (~2h) and refreshed automatically if it expires (401).
  • The password is 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) and DELETE return 204 with 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)”
ParameterTypeRequiredDescription
credentials_idcredentialYesSalesforce credential
sobjecttextYesObject (e.g. Account, Contact, Lead, Opportunity, Case)
fieldsJSONYesRecord fields, e.g. {"Name":"ACME"}

Output: { "id": "...", "success": true }.

Salesforce: Get record (salesforceGetRecord)

Section titled “Salesforce: Get record (salesforceGetRecord)”
ParameterTypeRequiredDescription
credentials_idcredentialYesSalesforce credential
sobjecttextYesObject (e.g. Account)
record_idtextYesRecord id
fieldstextNoFields to return, comma-separated (e.g. Name,Email). Empty = all

Salesforce: Update record (salesforceUpdateRecord)

Section titled “Salesforce: Update record (salesforceUpdateRecord)”
ParameterTypeRequiredDescription
credentials_idcredentialYesSalesforce credential
sobjecttextYesObject (e.g. Account)
record_idtextYesid of the record to update
fieldsJSONYesFields to update, e.g. {"Phone":"555"}

Output: { "id": "...", "updated": true } (Salesforce responds 204).

Salesforce: Delete record (salesforceDeleteRecord)

Section titled “Salesforce: Delete record (salesforceDeleteRecord)”
ParameterTypeRequiredDescription
credentials_idcredentialYesSalesforce credential
sobjecttextYesObject (e.g. Account)
record_idtextYesid of the record to delete

Output: { "id": "...", "deleted": true } (Salesforce responds 204).

ParameterTypeRequiredDescription
credentials_idcredentialYesSalesforce credential
soqltextareaYesSOQL 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)”
ParameterTypeRequiredDescription
credentials_idcredentialYesSalesforce credential
sobjecttextYesObject (e.g. Account)
external_id_fieldtextYesExternal id field (e.g. ExternalId__c)
external_id_valuetextYesExternal id value
fieldsJSONYesRecord fields

Output: { "id": "...", "success": true, "created": true|false }.

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
}

Each node classifies errors so the engine knows whether a retry makes sense:

SituationRetryableWhat to do
Validation (400)NoSalesforce returns the reason ([{message, errorCode}], e.g. missing required field). Fix the data.
Not found (404)NoThe record or object doesn’t exist. Check the id and sobject.
Authentication (401/403)NoAfter an automatic retry re-fetching the token it still fails: check the Connected App, the user, the password+security token, or permissions.
Server (5xx)YesTemporary Salesforce error; retried automatically.
Rate limit (429/503)YesRetry-After is honored and retried.
Network / TimeoutYesTransient issue; retried automatically.