<!-- BusyBot node reference — https://busybot.net/tools/salesforce/ -->

> Node: Salesforce (`salesforce`) · Action (binary) · v1
> Category: Sales · Credentials: Salesforce OAuth2 (`salesforceOAuth2`)
> Updated: 2026-08-16

# Salesforce

> Manage Salesforce CRM records, attachments, and documents

## Overview

The Salesforce tool provides complete CRUD operations for 12 Salesforce resources: Lead, Contact, Account, Opportunity, Case, Task, Attachment, Custom Object, Document, Flow, Search (SOQL), and User. Attachment operations handle binary data: create/update uploads binary as base64 Body field, get retrieves attachment metadata. Document upload uses multipart form to create ContentVersion records. Supports OAuth2 authentication with manual token + refresh, SOQL query builder with conditions, pagination via nextRecordsUrl, upsert via external ID, custom fields, and campaign member management.

**Category:** Sales  
**Tool Name:** `salesforce`  
**Version:** 1

**Appearance:** Icon: `lucide-CircleDollarSign` | Color: `#00A1E0`

## Node Type

**Action (Binary)** — handles file/binary data operations

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **Salesforce OAuth2** credentials.
See the [Credentials Guide](https://busybot.net/credentials/salesforce-oauth2/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Account | `account` |
| Attachment | `attachment` |
| Case | `case` |
| Contact | `contact` |
| Custom Object | `customObject` |
| Document | `document` |
| Flow | `flow` |
| Lead | `lead` |
| Opportunity | `opportunity` |
| Search | `search` |
| Task | `task` |
| User | `user` |

### Operations

Which operations are available depends on the selected resource — see the parameter subsections below.

| Operation | Value | Description |
|-----------|-------|-------------|
| Add Note | `addNote` | Add a note to the selected record |
| Add to Campaign | `addToCampaign` | Add the record to a campaign |
| Create | `create` | Create a record of the selected resource |
| Delete | `delete` | Delete a record by ID |
| Get | `get` | Retrieve a single record by ID |
| Get Many | `getAll` | Retrieve many records |
| Get Summary | `getSummary` | Get the object metadata summary for the selected resource |
| Update | `update` | Update an existing record |
| Upsert | `upsert` | Create or update a record by external ID |
| Add Comment | `addComment` | Add comment to a case |
| Upload | `upload` | Upload a document (ContentVersion) |
| Invoke | `invoke` | Invoke an autolaunched flow |
| Query | `query` | Execute a SOQL query |

### Parameters

`Get Summary` takes no parameters of its own — Account, Attachment, Case, Contact, Lead, Opportunity and Task all offer it, and each uses only the shared settings listed under All Operations.

#### Account: Add Note

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Title | `string` | Yes | — | — |
| Options | `collection` | No | `{}` | — |
| — Body | `string` | No | — | — |
| — Is Private | `boolean` | No | `false` | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| Account ID (`accountId`) | `string` | Yes | — | — |

#### Account: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Name | `string` | Yes | — | — |
| Additional Fields | `collection` | No | `{}` | — |
| — Account Number | `string` | No | — | — |
| — Account Source | `string` | No | — | — |
| — Annual Revenue | `number` | No | `0` | — |
| — Billing City | `string` | No | — | — |
| — Billing Country | `string` | No | — | — |
| — Billing Postal Code | `string` | No | — | — |
| — Billing State | `string` | No | — | — |
| — Billing Street | `string` | No | — | — |
| — Custom Fields (JSON) | `json` | No | `{}` | — |
| — Description | `string` | No | — | — |
| — Fax | `string` | No | — | — |
| — Industry | `string` | No | — | — |
| — Jigsaw | `string` | No | — | — |
| — Number of Employees | `number` | No | `0` | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| — Parent ID | `string` | No | — | — |
| — Phone | `string` | No | — | — |
| — Record Type ID | `string` | No | — | — |
| — Shipping City | `string` | No | — | — |
| — Shipping Country | `string` | No | — | — |
| — Shipping Postal Code | `string` | No | — | — |
| — Shipping State | `string` | No | — | — |
| — Shipping Street | `string` | No | — | — |
| — SIC Description | `string` | No | — | — |
| — Type | `string` | No | — | — |
| — Website | `string` | No | — | — |

#### Account: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Account ID (`accountId`) | `string` | Yes | — | — |

#### Account: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Account ID (`accountId`) | `string` | Yes | — | — |

#### Account: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | — |
| Limit | `number` | No | `50` | _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | — |
| — Conditions (JSON) | `json` | No | `{}` | JSON: {"conditionValues":[{"field":"Name","operation":"equal","value":"Acme"}]} |
| — Fields | `string` | No | — | Comma-separated list of fields to return |

#### Account: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Account ID (`accountId`) | `string` | Yes | — | — |
| Update Fields | `collection` | No | `{}` | — |
| — Account Number | `string` | No | — | — |
| — Account Source | `string` | No | — | — |
| — Annual Revenue | `number` | No | `0` | — |
| — Billing City | `string` | No | — | — |
| — Billing Country | `string` | No | — | — |
| — Billing Postal Code | `string` | No | — | — |
| — Billing State | `string` | No | — | — |
| — Billing Street | `string` | No | — | — |
| — Custom Fields (JSON) | `json` | No | `{}` | — |
| — Description | `string` | No | — | — |
| — Fax | `string` | No | — | — |
| — Industry | `string` | No | — | — |
| — Jigsaw | `string` | No | — | — |
| — Name | `string` | No | — | — |
| — Number of Employees | `number` | No | `0` | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| — Parent ID | `string` | No | — | — |
| — Phone | `string` | No | — | — |
| — Record Type ID | `string` | No | — | — |
| — Shipping City | `string` | No | — | — |
| — Shipping Country | `string` | No | — | — |
| — Shipping Postal Code | `string` | No | — | — |
| — Shipping State | `string` | No | — | — |
| — Shipping Street | `string` | No | — | — |
| — SIC Description | `string` | No | — | — |
| — Type | `string` | No | — | — |
| — Website | `string` | No | — | — |

#### Account: Upsert

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| External ID Field | `string` | Yes | — | API name of the external ID field |
| External ID Value | `string` | Yes | — | — |
| Name | `string` | Yes | — | — |
| Additional Fields | `collection` | No | `{}` | — |
| — Account Number | `string` | No | — | — |
| — Account Source | `string` | No | — | — |
| — Annual Revenue | `number` | No | `0` | — |
| — Billing City | `string` | No | — | — |
| — Billing Country | `string` | No | — | — |
| — Billing Postal Code | `string` | No | — | — |
| — Billing State | `string` | No | — | — |
| — Billing Street | `string` | No | — | — |
| — Custom Fields (JSON) | `json` | No | `{}` | — |
| — Description | `string` | No | — | — |
| — Fax | `string` | No | — | — |
| — Industry | `string` | No | — | — |
| — Jigsaw | `string` | No | — | — |
| — Number of Employees | `number` | No | `0` | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| — Parent ID | `string` | No | — | — |
| — Phone | `string` | No | — | — |
| — Record Type ID | `string` | No | — | — |
| — Shipping City | `string` | No | — | — |
| — Shipping Country | `string` | No | — | — |
| — Shipping Postal Code | `string` | No | — | — |
| — Shipping State | `string` | No | — | — |
| — Shipping Street | `string` | No | — | — |
| — SIC Description | `string` | No | — | — |
| — Type | `string` | No | — | — |
| — Website | `string` | No | — | — |

#### Attachment: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Parent ID | `string` | Yes | — | — |
| Name | `string` | Yes | — | Filename (max 255 chars) |
| Binary Property | `string` | Yes | `data` | Name of the binary property containing the file to upload |
| Additional Fields | `collection` | No | `{}` | — |
| — Description | `string` | No | — | — |
| — Is Private | `boolean` | No | `false` | — |
| — Owner ID (`owner`) | `string` | No | — | — |

#### Attachment: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Attachment ID | `string` | Yes | — | — |

#### Attachment: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Attachment ID | `string` | Yes | — | — |

#### Attachment: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | — |
| Limit | `number` | No | `50` | _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | — |
| — Conditions (JSON) | `json` | No | `{}` | JSON: {"conditionValues":[{"field":"Name","operation":"equal","value":"Acme"}]} |
| — Fields | `string` | No | — | Comma-separated list of fields to return |

#### Attachment: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Attachment ID | `string` | Yes | — | — |
| Update Fields | `collection` | No | `{}` | — |
| — Binary Property | `string` | No | `data` | Name of the binary property to upload (optional) |
| — Description | `string` | No | — | — |
| — Is Private | `boolean` | No | `false` | — |
| — Name | `string` | No | — | — |
| — Owner ID (`owner`) | `string` | No | — | — |

#### Case: Add Comment

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Case ID | `string` | Yes | — | — |
| Comment Body | `string` | No | — | — |
| Is Published | `boolean` | No | `false` | — |

#### Case: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Type | `string` | Yes | — | — |
| Additional Fields | `collection` | No | `{}` | — |
| — Account ID (`accountId`) | `string` | No | — | — |
| — Contact ID | `string` | No | — | — |
| — Custom Fields (JSON) | `json` | No | `{}` | — |
| — Description | `string` | No | — | — |
| — Is Escalated | `boolean` | No | `false` | — |
| — Origin | `string` | No | — | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| — Parent ID | `string` | No | — | — |
| — Priority | `string` | No | — | — |
| — Reason | `string` | No | — | — |
| — Record Type ID | `string` | No | — | — |
| — Status | `string` | No | — | — |
| — Subject | `string` | No | — | — |
| — Supplied Company | `string` | No | — | — |
| — Supplied Email | `string` | No | — | — |
| — Supplied Name | `string` | No | — | — |
| — Supplied Phone | `string` | No | — | — |

#### Case: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Case ID | `string` | Yes | — | — |

#### Case: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Case ID | `string` | Yes | — | — |

#### Case: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | — |
| Limit | `number` | No | `50` | _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | — |
| — Conditions (JSON) | `json` | No | `{}` | JSON: {"conditionValues":[{"field":"Name","operation":"equal","value":"Acme"}]} |
| — Fields | `string` | No | — | Comma-separated list of fields to return |

#### Case: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Case ID | `string` | Yes | — | — |
| Update Fields | `collection` | No | `{}` | — |
| — Account ID (`accountId`) | `string` | No | — | — |
| — Contact ID | `string` | No | — | — |
| — Custom Fields (JSON) | `json` | No | `{}` | — |
| — Description | `string` | No | — | — |
| — Is Escalated | `boolean` | No | `false` | — |
| — Origin | `string` | No | — | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| — Parent ID | `string` | No | — | — |
| — Priority | `string` | No | — | — |
| — Reason | `string` | No | — | — |
| — Record Type ID | `string` | No | — | — |
| — Status | `string` | No | — | — |
| — Subject | `string` | No | — | — |
| — Supplied Company | `string` | No | — | — |
| — Supplied Email | `string` | No | — | — |
| — Supplied Name | `string` | No | — | — |
| — Supplied Phone | `string` | No | — | — |
| — Type | `string` | No | — | — |

#### Contact: Add Note

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Title | `string` | Yes | — | — |
| Options | `collection` | No | `{}` | — |
| — Body | `string` | No | — | — |
| — Is Private | `boolean` | No | `false` | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| Contact ID | `string` | Yes | — | — |

#### Contact: Add to Campaign

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Campaign ID | `string` | Yes | — | — |
| Options | `collection` | No | `{}` | — |
| — Status | `string` | No | — | — |
| Contact ID | `string` | Yes | — | — |

#### Contact: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Last Name | `string` | Yes | — | — |
| Additional Fields | `collection` | No | `{}` | — |
| — Account ID (`acconuntId`) | `string` | No | — | — |
| — Assistant Name | `string` | No | — | — |
| — Assistant Phone | `string` | No | — | — |
| — Birthdate | `string` | No | — | Date in YYYY-MM-DD format |
| — Custom Fields (JSON) | `json` | No | `{}` | — |
| — Department | `string` | No | — | — |
| — Description | `string` | No | — | — |
| — Email | `string` | No | — | — |
| — Email Bounced Date | `string` | No | — | — |
| — Email Bounced Reason | `string` | No | — | — |
| — Fax | `string` | No | — | — |
| — First Name (`firstName`) | `string` | No | — | — |
| — Home Phone | `string` | No | — | — |
| — Jigsaw | `string` | No | — | — |
| — Lead Source | `string` | No | — | — |
| — Mailing City | `string` | No | — | — |
| — Mailing Country | `string` | No | — | — |
| — Mailing Postal Code | `string` | No | — | — |
| — Mailing State | `string` | No | — | — |
| — Mailing Street | `string` | No | — | — |
| — Mobile Phone | `string` | No | — | — |
| — Other City | `string` | No | — | — |
| — Other Country | `string` | No | — | — |
| — Other Phone | `string` | No | — | — |
| — Other Postal Code | `string` | No | — | — |
| — Other State | `string` | No | — | — |
| — Other Street | `string` | No | — | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| — Phone | `string` | No | — | — |
| — Record Type ID | `string` | No | — | — |
| — Salutation | `string` | No | — | — |
| — Title | `string` | No | — | — |

#### Contact: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | — |

#### Contact: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | — |

#### Contact: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | — |
| Limit | `number` | No | `50` | _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | — |
| — Conditions (JSON) | `json` | No | `{}` | JSON: {"conditionValues":[{"field":"Name","operation":"equal","value":"Acme"}]} |
| — Fields | `string` | No | — | Comma-separated list of fields to return |

#### Contact: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Contact ID | `string` | Yes | — | — |
| Update Fields | `collection` | No | `{}` | — |
| — Account ID (`acconuntId`) | `string` | No | — | — |
| — Assistant Name | `string` | No | — | — |
| — Assistant Phone | `string` | No | — | — |
| — Birthdate | `string` | No | — | — |
| — Custom Fields (JSON) | `json` | No | `{}` | — |
| — Department | `string` | No | — | — |
| — Description | `string` | No | — | — |
| — Email | `string` | No | — | — |
| — Email Bounced Date | `string` | No | — | — |
| — Email Bounced Reason | `string` | No | — | — |
| — Fax | `string` | No | — | — |
| — First Name (`firstName`) | `string` | No | — | — |
| — Home Phone | `string` | No | — | — |
| — Jigsaw | `string` | No | — | — |
| — Last Name | `string` | No | — | — |
| — Lead Source | `string` | No | — | — |
| — Mailing City | `string` | No | — | — |
| — Mailing Country | `string` | No | — | — |
| — Mailing Postal Code | `string` | No | — | — |
| — Mailing State | `string` | No | — | — |
| — Mailing Street | `string` | No | — | — |
| — Mobile Phone | `string` | No | — | — |
| — Other City | `string` | No | — | — |
| — Other Country | `string` | No | — | — |
| — Other Phone | `string` | No | — | — |
| — Other Postal Code | `string` | No | — | — |
| — Other State | `string` | No | — | — |
| — Other Street | `string` | No | — | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| — Phone | `string` | No | — | — |
| — Record Type ID | `string` | No | — | — |
| — Salutation | `string` | No | — | — |
| — Title | `string` | No | — | — |

#### Contact: Upsert

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| External ID Field | `string` | Yes | — | API name of the external ID field |
| External ID Value | `string` | Yes | — | — |
| Last Name | `string` | Yes | — | — |
| Additional Fields | `collection` | No | `{}` | — |
| — Account ID (`acconuntId`) | `string` | No | — | — |
| — Assistant Name | `string` | No | — | — |
| — Assistant Phone | `string` | No | — | — |
| — Birthdate | `string` | No | — | Date in YYYY-MM-DD format |
| — Custom Fields (JSON) | `json` | No | `{}` | — |
| — Department | `string` | No | — | — |
| — Description | `string` | No | — | — |
| — Email | `string` | No | — | — |
| — Email Bounced Date | `string` | No | — | — |
| — Email Bounced Reason | `string` | No | — | — |
| — Fax | `string` | No | — | — |
| — First Name (`firstName`) | `string` | No | — | — |
| — Home Phone | `string` | No | — | — |
| — Jigsaw | `string` | No | — | — |
| — Lead Source | `string` | No | — | — |
| — Mailing City | `string` | No | — | — |
| — Mailing Country | `string` | No | — | — |
| — Mailing Postal Code | `string` | No | — | — |
| — Mailing State | `string` | No | — | — |
| — Mailing Street | `string` | No | — | — |
| — Mobile Phone | `string` | No | — | — |
| — Other City | `string` | No | — | — |
| — Other Country | `string` | No | — | — |
| — Other Phone | `string` | No | — | — |
| — Other Postal Code | `string` | No | — | — |
| — Other State | `string` | No | — | — |
| — Other Street | `string` | No | — | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| — Phone | `string` | No | — | — |
| — Record Type ID | `string` | No | — | — |
| — Salutation | `string` | No | — | — |
| — Title | `string` | No | — | — |

#### Custom Object: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Custom Object API Name | `string` | Yes | — | API name of the custom object (e.g. My_Object__c) |
| Custom Fields (JSON) | `json` | No | `{}` | JSON of field API name to value, e.g. {"My_Field__c": "value"} |
| Additional Fields | `collection` | No | `{}` | — |
| — Record Type ID | `string` | No | — | — |

#### Custom Object: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Custom Object API Name | `string` | Yes | — | API name of the custom object (e.g. My_Object__c) |
| Record ID | `string` | Yes | — | — |

#### Custom Object: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Custom Object API Name | `string` | Yes | — | API name of the custom object (e.g. My_Object__c) |
| Record ID | `string` | Yes | — | — |

#### Custom Object: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Custom Object API Name | `string` | Yes | — | API name of the custom object (e.g. My_Object__c) |
| Return All | `boolean` | No | `false` | — |
| Limit | `number` | No | `50` | _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | — |
| — Conditions (JSON) | `json` | No | `{}` | JSON: {"conditionValues":[{"field":"Name","operation":"equal","value":"Acme"}]} |
| — Fields | `string` | No | — | Comma-separated list of fields to return |

#### Custom Object: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Custom Object API Name | `string` | Yes | — | API name of the custom object (e.g. My_Object__c) |
| Record ID | `string` | Yes | — | — |
| Custom Fields (JSON) | `json` | No | `{}` | JSON of field API name to value, e.g. {"My_Field__c": "value"} |
| Update Fields | `collection` | No | `{}` | — |
| — Record Type ID | `string` | No | — | — |

#### Custom Object: Upsert

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| External ID Field | `string` | Yes | — | API name of the external ID field |
| External ID Value | `string` | Yes | — | — |
| Custom Object API Name | `string` | Yes | — | API name of the custom object (e.g. My_Object__c) |
| Custom Fields (JSON) | `json` | No | `{}` | JSON of field API name to value, e.g. {"My_Field__c": "value"} |
| Additional Fields | `collection` | No | `{}` | — |
| — Record Type ID | `string` | No | — | — |

#### Document: Upload

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Title | `string` | Yes | — | — |
| Binary Property | `string` | Yes | `data` | — |
| Additional Fields | `collection` | No | `{}` | — |
| — File Extension | `string` | No | — | Override file extension (e.g. pdf) |
| — Link To Object ID | `string` | No | — | ID of object to link document to (FirstPublishLocationId) |
| — Owner ID (`ownerId`) | `string` | No | — | — |

#### Flow: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | — |
| Limit | `number` | No | `50` | _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | — |
| — Conditions (JSON) | `json` | No | `{}` | JSON: {"conditionValues":[{"field":"Name","operation":"equal","value":"Acme"}]} |
| — Fields | `string` | No | — | Comma-separated list of fields to return |

#### Flow: Invoke

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| API Name | `string` | Yes | — | — |
| JSON Parameters | `boolean` | No | `false` | — |
| Input Variables (JSON) | `json` | No | `{}` | _(shown when JSON Parameters is `true`)_ |

#### Lead: Add Note

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Lead ID | `string` | Yes | — | — |
| Title | `string` | Yes | — | — |
| Options | `collection` | No | `{}` | — |
| — Body | `string` | No | — | — |
| — Is Private | `boolean` | No | `false` | — |
| — Owner ID (`owner`) | `string` | No | — | — |

#### Lead: Add to Campaign

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Lead ID | `string` | Yes | — | — |
| Campaign ID | `string` | Yes | — | — |
| Options | `collection` | No | `{}` | — |
| — Status | `string` | No | — | — |

#### Lead: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Company | `string` | Yes | — | Company name (required) |
| Last Name | `string` | Yes | — | Last name (required) |
| Additional Fields | `collection` | No | `{}` | — |
| — Annual Revenue | `number` | No | `0` | — |
| — City | `string` | No | — | — |
| — Country | `string` | No | — | — |
| — Custom Fields (JSON) | `json` | No | `{}` | JSON object of custom field values, e.g. {"My_Field__c": "value"} |
| — Description | `string` | No | — | — |
| — Email | `string` | No | — | — |
| — Fax | `string` | No | — | — |
| — First Name (`firstname`) | `string` | No | — | — |
| — Has Opted Out of Email | `boolean` | No | `false` | — |
| — Has Opted Out of Fax | `boolean` | No | `false` | — |
| — Industry | `string` | No | — | — |
| — Is Unread By Owner | `boolean` | No | `false` | — |
| — Jigsaw | `string` | No | — | — |
| — Lead Source | `string` | No | — | — |
| — Mobile Phone | `string` | No | — | — |
| — Number of Employees | `number` | No | `0` | — |
| — Owner ID (`owner`) | `string` | No | — | User or Queue ID |
| — Phone | `string` | No | — | — |
| — Postal Code | `string` | No | — | — |
| — Rating | `string` | No | — | — |
| — Record Type ID | `string` | No | — | — |
| — Salutation | `string` | No | — | — |
| — State | `string` | No | — | — |
| — Status | `string` | No | — | — |
| — Street | `string` | No | — | — |
| — Title | `string` | No | — | — |
| — Website | `string` | No | — | — |

#### Lead: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Lead ID | `string` | Yes | — | — |

#### Lead: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Lead ID | `string` | Yes | — | — |

#### Lead: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | — |
| Limit | `number` | No | `50` | _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | — |
| — Conditions (JSON) | `json` | No | `{}` | JSON: {"conditionValues":[{"field":"Name","operation":"equal","value":"Acme"}]} |
| — Fields | `string` | No | — | Comma-separated list of fields to return |

#### Lead: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Lead ID | `string` | Yes | — | — |
| Update Fields | `collection` | No | `{}` | — |
| — Annual Revenue | `number` | No | `0` | — |
| — City | `string` | No | — | — |
| — Company | `string` | No | — | — |
| — Country | `string` | No | — | — |
| — Custom Fields (JSON) | `json` | No | `{}` | — |
| — Description | `string` | No | — | — |
| — Email | `string` | No | — | — |
| — Fax | `string` | No | — | — |
| — First Name (`firstname`) | `string` | No | — | — |
| — Has Opted Out of Email | `boolean` | No | `false` | — |
| — Has Opted Out of Fax | `boolean` | No | `false` | — |
| — Industry | `string` | No | — | — |
| — Is Unread By Owner | `boolean` | No | `false` | — |
| — Jigsaw | `string` | No | — | — |
| — Last Name | `string` | No | — | — |
| — Lead Source | `string` | No | — | — |
| — Mobile Phone | `string` | No | — | — |
| — Number of Employees | `number` | No | `0` | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| — Phone | `string` | No | — | — |
| — Postal Code | `string` | No | — | — |
| — Rating | `string` | No | — | — |
| — Record Type ID | `string` | No | — | — |
| — Salutation | `string` | No | — | — |
| — State | `string` | No | — | — |
| — Status | `string` | No | — | — |
| — Street | `string` | No | — | — |
| — Title | `string` | No | — | — |
| — Website | `string` | No | — | — |

#### Lead: Upsert

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Company | `string` | Yes | — | Company name (required) |
| Last Name | `string` | Yes | — | Last name (required) |
| External ID Field | `string` | Yes | — | API name of the external ID field |
| External ID Value | `string` | Yes | — | — |
| Additional Fields | `collection` | No | `{}` | — |
| — Annual Revenue | `number` | No | `0` | — |
| — City | `string` | No | — | — |
| — Country | `string` | No | — | — |
| — Custom Fields (JSON) | `json` | No | `{}` | JSON object of custom field values, e.g. {"My_Field__c": "value"} |
| — Description | `string` | No | — | — |
| — Email | `string` | No | — | — |
| — Fax | `string` | No | — | — |
| — First Name (`firstname`) | `string` | No | — | — |
| — Has Opted Out of Email | `boolean` | No | `false` | — |
| — Has Opted Out of Fax | `boolean` | No | `false` | — |
| — Industry | `string` | No | — | — |
| — Is Unread By Owner | `boolean` | No | `false` | — |
| — Jigsaw | `string` | No | — | — |
| — Lead Source | `string` | No | — | — |
| — Mobile Phone | `string` | No | — | — |
| — Number of Employees | `number` | No | `0` | — |
| — Owner ID (`owner`) | `string` | No | — | User or Queue ID |
| — Phone | `string` | No | — | — |
| — Postal Code | `string` | No | — | — |
| — Rating | `string` | No | — | — |
| — Record Type ID | `string` | No | — | — |
| — Salutation | `string` | No | — | — |
| — State | `string` | No | — | — |
| — Status | `string` | No | — | — |
| — Street | `string` | No | — | — |
| — Title | `string` | No | — | — |
| — Website | `string` | No | — | — |

#### Opportunity: Add Note

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Title | `string` | Yes | — | — |
| Options | `collection` | No | `{}` | — |
| — Body | `string` | No | — | — |
| — Is Private | `boolean` | No | `false` | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| Opportunity ID | `string` | Yes | — | — |

#### Opportunity: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Name | `string` | Yes | — | — |
| Close Date | `string` | Yes | — | Date in YYYY-MM-DD format |
| Stage Name | `string` | Yes | — | — |
| Additional Fields | `collection` | No | `{}` | — |
| — Account ID (`accountId`) | `string` | No | — | — |
| — Amount | `number` | No | `0` | — |
| — Campaign ID | `string` | No | — | — |
| — Custom Fields (JSON) | `json` | No | `{}` | — |
| — Description | `string` | No | — | — |
| — Forecast Category | `string` | No | — | — |
| — Lead Source | `string` | No | — | — |
| — Next Step | `string` | No | — | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| — Pricebook2 ID | `string` | No | — | — |
| — Probability | `number` | No | `0` | — |
| — Type | `string` | No | — | — |

#### Opportunity: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Opportunity ID | `string` | Yes | — | — |

#### Opportunity: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Opportunity ID | `string` | Yes | — | — |

#### Opportunity: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | — |
| Limit | `number` | No | `50` | _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | — |
| — Conditions (JSON) | `json` | No | `{}` | JSON: {"conditionValues":[{"field":"Name","operation":"equal","value":"Acme"}]} |
| — Fields | `string` | No | — | Comma-separated list of fields to return |

#### Opportunity: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Opportunity ID | `string` | Yes | — | — |
| Update Fields | `collection` | No | `{}` | — |
| — Account ID (`accountId`) | `string` | No | — | — |
| — Amount | `number` | No | `0` | — |
| — Campaign ID | `string` | No | — | — |
| — Close Date | `string` | No | — | — |
| — Custom Fields (JSON) | `json` | No | `{}` | — |
| — Description | `string` | No | — | — |
| — Forecast Category | `string` | No | — | — |
| — Lead Source | `string` | No | — | — |
| — Name | `string` | No | — | — |
| — Next Step | `string` | No | — | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| — Pricebook2 ID | `string` | No | — | — |
| — Probability | `number` | No | `0` | — |
| — Stage Name | `string` | No | — | — |
| — Type | `string` | No | — | — |

#### Opportunity: Upsert

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| External ID Field | `string` | Yes | — | API name of the external ID field |
| External ID Value | `string` | Yes | — | — |
| Name | `string` | Yes | — | — |
| Close Date | `string` | Yes | — | Date in YYYY-MM-DD format |
| Stage Name | `string` | Yes | — | — |
| Additional Fields | `collection` | No | `{}` | — |
| — Account ID (`accountId`) | `string` | No | — | — |
| — Amount | `number` | No | `0` | — |
| — Campaign ID | `string` | No | — | — |
| — Custom Fields (JSON) | `json` | No | `{}` | — |
| — Description | `string` | No | — | — |
| — Forecast Category | `string` | No | — | — |
| — Lead Source | `string` | No | — | — |
| — Next Step | `string` | No | — | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| — Pricebook2 ID | `string` | No | — | — |
| — Probability | `number` | No | `0` | — |
| — Type | `string` | No | — | — |

#### Search: Query

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| SOQL Query | `string` | Yes | — | Raw SOQL query string |

#### Task: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Status | `string` | Yes | — | — |
| Additional Fields | `collection` | No | `{}` | — |
| — Activity Date | `string` | No | — | — |
| — Call Disposition | `string` | No | — | — |
| — Call Duration (Seconds) | `number` | No | `0` | — |
| — Call Object | `string` | No | — | — |
| — Call Type | `string` | No | — | — |
| — Custom Fields (JSON) | `json` | No | `{}` | — |
| — Description | `string` | No | — | — |
| — Is Reminder Set | `boolean` | No | `false` | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| — Priority | `string` | No | — | — |
| — Recurrence Type | `string` | No | — | — |
| — Reminder DateTime | `string` | No | — | — |
| — Subject | `string` | No | — | — |
| — Task Subtype | `string` | No | — | Maps to TaskSubtype field |
| — What ID | `string` | No | — | — |
| — Who ID | `string` | No | — | — |

#### Task: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID | `string` | Yes | — | — |

#### Task: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID | `string` | Yes | — | — |

#### Task: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | — |
| Limit | `number` | No | `50` | _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | — |
| — Conditions (JSON) | `json` | No | `{}` | JSON: {"conditionValues":[{"field":"Name","operation":"equal","value":"Acme"}]} |
| — Fields | `string` | No | — | Comma-separated list of fields to return |

#### Task: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID | `string` | Yes | — | — |
| Update Fields | `collection` | No | `{}` | — |
| — Activity Date | `string` | No | — | — |
| — Call Disposition | `string` | No | — | — |
| — Call Duration (Seconds) | `number` | No | `0` | — |
| — Call Object | `string` | No | — | — |
| — Call Type | `string` | No | — | — |
| — Custom Fields (JSON) | `json` | No | `{}` | — |
| — Description | `string` | No | — | — |
| — Is Reminder Set | `boolean` | No | `false` | — |
| — Owner ID (`owner`) | `string` | No | — | — |
| — Priority | `string` | No | — | — |
| — Status | `string` | No | — | — |
| — Subject | `string` | No | — | — |
| — Task Subtype | `string` | No | — | — |
| — What ID | `string` | No | — | — |
| — Who ID | `string` | No | — | — |

#### User: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User ID | `string` | Yes | — | — |

#### User: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | — |
| Limit | `number` | No | `50` | _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | — |
| — Conditions (JSON) | `json` | No | `{}` | JSON: {"conditionValues":[{"field":"Name","operation":"equal","value":"Acme"}]} |
| — Fields | `string` | No | — | Comma-separated list of fields to return |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Salesforce Account | `credential` | No | — | Connect your Salesforce account via OAuth2. |
| Max Concurrency | `number` | No | `10` | Maximum number of items to process concurrently |

## Output Data

The node **replaces** the item JSON with the Salesforce response. Fields that arrived on the input item are not carried through, so capture anything you still need in an earlier node or merge it back downstream. Binary data on the input item is forwarded to the output item unchanged.

Every operation produces **exactly one output item per input item** — including Get Many and Query, whose matching records arrive as an array on that single item rather than as one item per record. Use a Split Out node on `records` when you want one item per record. A node run with no input items produces no output items.

These shapes are built by the node itself:

| Operation | Output item JSON |
|-----------|------------------|
| `getAll` on Account, Attachment, Case, Contact, Custom Object, Lead, Opportunity, Task, User | `{ "records": [ … ] }` |
| `getAll` on Flow | `{ "actions": [ … ] }` — trimmed to Limit unless Return All is on |
| `query` | `{ "records": [ … ] }` |
| `delete`, and any `update` or `upsert` that Salesforce answers with no content | `{ "errors": [], "success": true }` |

```json
{
  "errors": [],
  "success": true
}
```

Every other operation — `create`, `get`, `getSummary`, `addNote`, `addToCampaign`, `addComment`, `invoke` and `upload` — puts the Salesforce REST response on the item exactly as the API returned it. The node does not add, rename or reshape those fields, so what you can reference downstream is whatever your Salesforce org sends back for that object.

Two behaviors worth knowing before you build on the output:

- **Get Many follows pagination for you.** With Return All on, every page of the query result is fetched and all records land in the one `records` array; with it off, the Limit is applied as a SOQL `LIMIT`.
- **Attachment Get returns the attachment record, not the file.** It gives you the attachment's Salesforce fields; it does not download the file contents into binary data.

Reference the result downstream by expression, for example `{{ $json.records }}` after a Get Many or `{{ $json.success }}` after a Delete.

## Usage Examples

- Create a new lead in Salesforce
- Upload an attachment to a Salesforce record
- Upload a document to Salesforce Content
- Query Salesforce records with SOQL
- Update an opportunity stage
- Invoke a Salesforce Flow

## Example Configuration

Create a lead from the fields on the incoming item:

```json
{
  "type": "salesforce",
  "parameters": {
    "resource": "lead",
    "operation": "create",
    "company": "{{ $json.company }}",
    "lastname": "{{ $json.lastName }}",
    "additionalFields": {
      "firstname": "{{ $json.firstName }}",
      "email": "{{ $json.email }}",
      "phone": "{{ $json.phone }}",
      "status": "Open - Not Contacted"
    }
  }
}
```

Create or update an opportunity keyed on your own external ID, so re-running the workflow does not duplicate records:

```json
{
  "type": "salesforce",
  "parameters": {
    "resource": "opportunity",
    "operation": "upsert",
    "externalId": "External_ID__c",
    "externalIdValue": "{{ $json.dealRef }}",
    "name": "{{ $json.dealName }}",
    "closeDate": "{{ $json.closeDate }}",
    "stageName": "Prospecting",
    "additionalFields": {
      "amount": 100000,
      "probability": 25
    }
  }
}
```

Attach a file produced by an upstream node to a Salesforce record:

```json
{
  "type": "salesforce",
  "parameters": {
    "resource": "attachment",
    "operation": "create",
    "parentId": "{{ $json.accountId }}",
    "name": "contract.pdf",
    "binaryPropertyName": "data",
    "additionalFields": {
      "description": "Signed contract",
      "isPrivate": false
    }
  }
}
```

List leads with a field list and a filter — Conditions (JSON) takes a `conditionValues` array, one entry per condition:

```json
{
  "type": "salesforce",
  "parameters": {
    "resource": "lead",
    "operation": "getAll",
    "returnAll": false,
    "limit": 50,
    "options": {
      "fields": "Id,Name,Email,Company,Status",
      "conditionsUi": "{\"conditionValues\":[{\"field\":\"Status\",\"operation\":\"equal\",\"value\":\"Open - Not Contacted\"}]}"
    }
  }
}
```

Run a SOQL query directly:

```json
{
  "type": "salesforce",
  "parameters": {
    "resource": "search",
    "operation": "query",
    "query": "SELECT Id, Name, Email FROM Contact WHERE LastName = '{{ $json.lastName }}' LIMIT 10"
  }
}
```

### Error Handling

| Mode | Behavior |
|------|----------|
| **stop** | Halts workflow on first error |
| **continue** | Skips failed items, passes successful ones through |
| **errorPort** | Routes failed items to Error output port |

## Tips

Manage Salesforce CRM records, attachments, and documents with full CRUD and binary upload/download support.

### Common Patterns

### Standard CRUD Operations

Most Salesforce resources support standard CRUD operations:
1. **Create**: Requires resource-specific required fields + optional additionalFields
2. **Get**: Requires the resource ID
3. **Update**: Requires the resource ID + updateFields collection
4. **Delete**: Requires only the resource ID
5. **Get All**: Supports pagination with returnAll/limit and filtering with options

### Upsert Pattern

For resources supporting upsert (leads, contacts, accounts, opportunities, custom objects):
1. Specify the external ID field name in `externalId`
2. Provide the external ID value in `externalIdValue`
3. Include required fields for creation
4. Use `additionalFields` for optional fields

### Binary File Operations

For attachments and documents:
1. Set `binaryPropertyName` to reference the workflow property containing the file data
2. Provide appropriate metadata (name, title, etc.)
3. Use `additionalFields` for optional properties like description or privacy settings

### Custom Object Operations

When working with custom objects:
1. Always specify the `customObject` API name (ending in `__c`)
2. Use `customFieldsUi` JSON for custom field values
3. Standard Salesforce fields can still be used in additionalFields/updateFields