Salesforce Upsert

In this article


The Salesforce Upsert Snap is a Write-type Snap that provides the functionality to upsert (that is, a simple update or insert procedure of) object records in Salesforce in Bulk API or REST API mode. The Snap in Salesforce Bulk API mode submits batch jobs and sends the batch job information to the output view for the Salesforce Poller Snap. More specifically, the Salesforce Upsert Snap should not be thought of as the combination of the Salesforce Update and Salesforce Create Snaps.

The Salesforce Upsert Snap operates exclusively on the external ID field, not on the Salesforce-generated record ID. If a record for a given external ID exists, the record is updated with the input record data. If no record exists for a given external ID, a new record is created with the input record data. The external ID is used as the unique record identifier from an external system and can be useful when you want to synchronize an external system to

To create a new external ID field for an Account object:

  1. Log in to your Salesforce account.
  2. Go to App Setup > Customize > Account > Fields > New. 
  3. Follow the instructions and create a new custom field. 
You must select the External ID checkbox. The Snap in REST API mode upserts Salesforce objects and returns results synchronously without the need for the Salesforce Poller Snap.



Limitations and Known Issues

  • This Snap performs batch processing, that is, a batch of input documents are processed for each HTTP request sent to Salesforce. Values of all the expression-enabled fields must remain constant during the Snap execution or validation. Hence, all expression fields can support Pipeline parameters only when they are expression-enabled. The input data parameters are not supported for expression fields, for example, $serviceVersion.

Support for Ultra Pipelines

Works in Ultra Pipelines.

Snap Input and Output

Input/OutputType of Views Number of ViewsExamples of Upstream/Downstream SnapsDescription
  • Mapper 
  • Copy
Each document contains Map data for an external ID and records of field and value pairs.
  • Poller
  • File Writer
Each document contains Map data that includes a Job ID, a Batch ID, a URL, and an array of records if it is in Bulk API mode. If it is executed in REST API mode, each document contains input data plus a key-value pair of created:false for each successfully-updated record or created:true for each successfully-created record. If the Snap is executed in Bulk API mode and a new record is created, the ID field and its value is included in the output data. However, if the Snap is executed in REST API and a new record is created, the ID field is not included in the output data.

Snap Settings

FieldField TypeDescription



Specify a unique name for the Snap. You can modify this to be more specific, especially if you have more than one of the same Snap in your Pipeline.

Service Version


Specify the version number associated with the Salesforce service that you want to connect to. Alternatively, click the Suggestion  icon to fetch the list of versions and select the desired version.

Default Value52.0 

Batch Size*


In Bulk API, this property value is allowed to be from 1 through 10,000. Each input document forms one Salesforce record to be upserted. The Snap stores records in memory until the number of records reaches the batch size and sends the request to SFDC in single batch.   Increasing the batch size increases the amount of memory used during the data load. Decreasing the batch size increases the number of API calls against Salesforce.

In REST API, the Snap can upsert only one record per each request regardless of the value of the Batch size property.

Default Value: 200
Example: 200, 10000

Object Type*


Define the name of the Salesforce object, such as Account.

Default Value:  Account
Example:  Account

Validation always uses the REST API. 

Salesforce API*


Set the Salesforce API mode to Bulk API or REST API. The Snap in REST API mode creates one record at a time and returns the results at the output. REST API can be simpler and faster if the number of records to be created is small (a few).

Default Value: Bulk API
Example: REST API

External ID Field*


Represents the unique externalized key of the object. The external ID determines the locator of the object on the Salesforce object instead of using the ID field on the object. This field is suggestible.

You should select the check box, External ID: Set this field as the unique record identifier from an external system, when you create an external ID field in the web page.

Default Value:  [None]

Bulk Content Type

Dropdown list

Select the content type to be used in Bulk API. 

Available options are:

  • XML: Data in XML format.

  • CSV: Data in CSV format.

Default Value: XML
Example: CSV

Null Setting With Bulk API


Select this checkbox to set set nullable fields null in the Salesforce object when you select Bulk API mode. 

Default Value: False

Related Object


Enter or select a related parent object. This property does not affect the Snap operation on records in Salesforce. It is provided for the property suggest and the input schema suggest only. 

Default Value: [None]
Example:  Account

Related External ID


Enter or select an external ID of the selected related parent object. This property does not affect the Snap operation on records in Salesforce. It is provided for the property suggest and the input schema suggest only. 

Default Value:  [None]
Example: AccountNumber__c

Bulk API Serial mode


Select this checkbox to enable the Bulk API to run in Serial mode. Deselect this checkbox to enable the Bulk API to run in Parallel mode. This is only relevant to BULK API. 

Default Value: Not selected (Parallel mode)

Standardize Error Output


Select this checkbox to enable the Snap to produce error output with Reason, Original, Stack trace and Resolution.
If you deselect this checkbox, the output view displays the input document along with the error message.

Default Value:  Not selected

Pass Through


Select this checkbox to pass the input document to the output view under the key 'original'.

If you deselect this checkbox, the input document is not passed and there is no 'original' key in the output document.

Default Value:  Selected

For Bulk APIs, if you select this check box and if the Batch size is equal to 1, the input document is passed to the output view under the key original. If the Batch size is greater than 1, the list of input documents is displayed under Records and the input document is not included under the original key.

Snap Execution

Dropdown list

Select one of the three modes in which the Snap executes. Available options are:

  • Validate & Execute: Performs limited execution of the Snap, and generates a data preview during Pipeline validation. Subsequently, performs full execution of the Snap (unlimited records) during Pipeline runtime.
  • Execute only: Performs full execution of the Snap during Pipeline execution without generating preview data.
  • Disabled: Disables the Snap and all Snaps that are downstream from it.

If you want to get the resulting status for each record to be upserted in Bulk API mode, you must connect a Salesforce Poller Snap after the Salesforce Upsert Snap.

The field labels for this Snap are updated to title case. If you have existing Pipelines that include the field names in the error messages, you must update those Pipelines to use the new field labels.


Upserting Department Record And Associating With An Employee Record

The following example Pipeline demonstrates how you can upsert the department record in CSV format and associate that record with an employee record. We also pass null value for a particular field to demonstrate that null values in CSV file format type does not hinder the Pipeline execution.

First, we configure the Sequence Snap to generate a sample set of Department data.

Then, we configure the Mapper Snap to prepare (transform) and pass the department data (input) to the Salesforce Upsert Snap. Note that we pass null value for location, but that does not hinder the Pipeline execution.

Upon validation, the Snap passes the following data to the downstream Salesforce Upsert Snap. Note the null value under location column.

Then, we configure the Salesforce Upsert Snap to upsert the department record into Salesforce. We use the Bulk Content Type as CSV and the API as Bulk API. Note that we configure the Related External ID field to associate the department record with the employee record.

The Snap passes the following batch information to the downstream Salesforce Poller Snap.

We then configure the Salesforce Poller Snap to poll the status of the batch job submitted to Salesforce application from the Salesforce Upsert Snap. Upon validation, the Snap creates the record for department and associates it with the employee record.

Salesforce Poller Snap Configuration

Salesforce Poller Snap Output

Download this Pipeline.

Upserting a new record in a Salesforce object

The following example Pipeline demonstarates how to upsert a new record in a Salesforce object.

First, we configure the Mapper Snap to map the Object record details (that need to be upserted using External ID) to the input view of Salesforce Upsert Snap.

Then, we configure the Salesforce Upsert Snap to update the record (using its External ID) in the Account object.

Upon successful execution, we can see the following output in the Snap's preview.

  File Modified

File Example_Salesforce_Upsert_CSV_BukAPI.slp

Apr 21, 2021 by Kalpana Malladi

Snap Pack History

 Click to view/expand
Release Snap Pack VersionDateType  Updates
4.26426patches12054 Latest

Enhanced the Salesforce Subscriber Snap with improved resilience to network failures and fixed an issue with duplicate documents.

4.26main11181 StableUpgraded with the latest SnapLogic Platform release.
4.25 Patch425patches10182 LatestFixed an issue with the Salesforce Read Snap where the retry fields do not work as expected when a Pipeline has more than ten Snaps. 
4.25 Patch425patches9609 LatestEnhanced the Salesforce Read Snap to allow you to add an optional second output view that exposes the schema of the target object as the output document. The output view of the Snap has a minimum of one output and a maximum of two outputs. 
  • Enhanced the Salesforce Upsert Snap to support CSV payload using the new field Bulk Content Type in Bulk API mode as Salesforce API has recently been supporting CSV payload as well. Earlier, this Snap supported only XML data type; you can now select CSV content type from the Bulk Content Type drop-down list. The default content type is set to XML to preserve backward compatibility. 
    This enhancement also addresses the null values issue during Bulk API mode. 
  • Enhanced the Snaps in the Salesforce Snap Pack by updating the field labels to title case. If you have existing Pipelines using Salesforce Snaps that include the field names in the error messages, you must update those Pipelines to use the new field labels.
4.24 Patch 424patches9024 Latest
4.24 Patch 424paches8569 Latest

Fixes an issue in Salesforce Bulk Upsert, Salesforce Bulk Update, and Salesforce Bulk Create Snaps that fail to process Related object and Related external ID values by modifying the input schema that formats the CSV data.

Potential Breaking Change

This Salesforce Snap patch contains an issue affecting the Salesforce Subscriber and Salesforce Publisher Snaps. If you do not use these Snaps in your Pipelines, then you can use this patch version. Else, we recommend you to not use this patch version as Pipelines will fail. We will fix this issue soon in an upcoming patch.

StableUpgraded with the latest SnapLogic Platform release.
4.23 Patch 423patches7888 Latest

StableUpgraded with the latest SnapLogic Platform release.
StableUpgraded with the latest SnapLogic Platform release.
4.21 Patch salesforce8829 Latest

Fixes the Salesforce Create, Update, Bulk Create, Bulk Update, and Bulk Upsert Snaps, enabling you to upload files containing duplicate values across multiple fields.



StableUpgraded with the latest SnapLogic Platform release.
4.20 Patch salesforce8814 Latest

Fixes the Salesforce Create, Update, Bulk Create, Bulk Update, and Bulk Upsert Snaps, enabling you to upload files containing duplicate values across multiple fields.

4.20 Patch salesforce8797 Latest

Fixes the Salesforce Subscriber Snap wherein the Salesforce Subscriber and Mapper Snap combination generates Null output for Array object type.


Adds the Salesforce Bulk Query Snap, which enables you to perform bulk SOQL queries on Salesforce.

4.18 Patch salesforce7832 Latest

Enhanced the Salesforce Subscriber Snap to capture Change Data Capture (CDC) events.

StableUpgraded with the latest SnapLogic Platform release.
4.17 Patch salesforce7474 Latest

Added Order by clause and Limit clause properties to the Salesforce Reader Snap to fix an issue wherein the Snap throws an error while fetching records.


Pushed automatic rebuild of the latest version of each Snap Pack to SnapLogic UAT and Elastic servers.


Added the Snap Execution field to all Standard-mode Snaps. In some Snaps, this field replaces the existing Execute during preview check box.

4.16 Patch salesforce6889 LatestAdded two new properties, Number of retries and Retry interval, to the Salesforce Read, SOQL, Publisher, and Subscriber Snaps. These properties let you handle retry attempts and intervals in case of a network failure.
  • Added two new Snaps: 
    • Salesforce Publisher: Publish Salesforce platform event records to a given event custom sObject (Salesforce Object).
    • Salesforce Subscriber: Subscribe to Salesforce platform event records for a given event custom sObject.
4.15 Patch salesforce6405 Latest

Fixed an issue with resource leak in PK Chunking in Salesforce Read and SOQL Snaps.

4.15 Patch salesforce6349 Latest

Fixed an issue with the Salesforce SOQL Snap timing out while waiting for a connection from the pool.

StableUpgraded with the latest SnapLogic Platform release.

4.14 Patch 


 LatestFixed the Salesforce SOQL Snap that fails to execute if the parameter values of a SOQL query expression contain the WHERE clause.
StableUpgraded with the latest SnapLogic Platform release.


  • Fixed an issue where the Salesforce Read Snap fails to download the PK-Chunking CSV file due to network failure or running out of disk space.
  • Fixed an issue where theSalesforce Lookup Snap does not match the datatype with the Bulk API; for instance, boolean data returns string.
  • Fixed an issue where the Salesforce SOQL Snap does not preview data in pipelines. 
  • Fixed an issue where PK Chunking files are not deleted from the temp directory.
4.12 Patchsalesforce4839 Latest

Fixed a defect that occurs when downstream Snaps are slow in processing documents downloaded from SFDC.

4.12 Patchsalesforce4773 Latest

Added a new option in Advanced properties - "Validate record count downloaded in Bulk API" that compares the number of records processed vs downloaded and routes output to Error View (if Error View is enabled) if there is a mismatch.



  • Updated Salesforce SOQL and Lookup Snaps to ensure that they are consistent with SnapLogic guidelines of writing Snap data exceptions to error views and continuing to process next documents vs. hard stopping.
  • Enhanced the Salesforce read operations for the Read, SOQL, and SOSL Snaps to display the original Salesforce error cause, reason, and resolution.
4.11 Patchsalesforce4299 Latest
  • Fixed an issue wherein the Salesforce SOQL Snap did not get an input stream from the next records URL.
  • Fixed an issue with the Salesforce SOQL Snap querying deleted records using Bulk API.

Polling timeout property's default value increased to 3000 from 300 for Salesforce Lookup, Salesforce Poller, Salesforce Read, and Salesforce SOQL Snaps.

4.10 Patchsalesforce4005 Latest

Salesforce Poller Snap: Includes the success field in the output.



StableUpgraded with the latest SnapLogic Platform release.
4.9.0 Patchsalesforce3218 Latest

Fixed the error in PK Chunking when a downstream Snap is blocking the pipeline

4.9.0 Patchsalesforce3247 Latest

Addressed an issue withSalesforce Poller Snap causing JSON Formatter to throw ConcurrentModificationException.

4.9.0 Patchsalesforce3225 Latest

Addressed a null pointer exception in the Salesforce Update Snap. This exception was present in both salesforce3082 and salesforce3122.


Updated the Salesforce Create, Batch Create, Delete, Poller, Update and Upsert Snaps with Pass through property.

4.8.0 Patchsalesforce2884 Latest
  • Addressed an issue with inconsistent behavior between Preview and Execution.
  • Addressed an issue with Salesforce SOQL Snap failing to download PK-Chunking.


  • Updated the Salesforce Lookup Snap with Correlation ID property. This property is an ID field name which the Snap uses to correlate input document to the output record when users want to pass through input data to the output view.
  • Updated the Salesforce Read Snap with Output field limit and Output field offset properties. Output field limit is the number of fields to return in the order of Salesforce describe object field index. Output field offset defines a starting field index for the output fields.
  • Info tab added to accounts.
4.7.0 Patch salesforce2284  Latest

Added log to troubleshoot a deploy issue.

4.7.0 Patch salesforce2255  Latest

Addressed SFDC SOQL Snap routing to the error view & validate PK Chunking record numbers.

4.7.0 Patch salesforce2244  Latest

Addressed possible leak with threads waiting to download PK Chunking responses.

4.7.0 Patch salesforce2218 Latest

SFDC SOQL Snap route to the error view & validate PK Chuning record numbers.

4.7.0 Patch salesforce2209 Latest

SOQL Snap now correctly routes to the error view & validates PK Chunking record numbers.



  • Updated the Salesforce SOQL, Read, & Lookup Snaps with Match data type field.
  • Updated the Salesforce Upsert, Update, Create and Delete Snaps with 'Standardize error output' field.
4.6.0 Patch salesforce1931 Latest
  • Implemented a new property "Match data type in XML"
  • Implemented a new entry "SFDC_SESSION_TIMEOUT_MINUTES" so that users can reduce the frequency of logins.
  • Doc Enhancement: Examples added to Salesforce Snap documentation.
  • Resolved an issue in Salesforce Snaps that prevented extraction of access tokens.


  • Salesforce Read Snap is updated to support Output fields and Where clause specifications. For more information, see Salesforce Read.
  • Salesforce Read & SOQL Snaps are updated to support JSON representation of Bulk API result data and a parsing issue encountered (in Bulk API mode) has been rectified.
  • Fixed errors around upload and output preview for Salesforce Wave Analytics Snap.
  • Pass through and Ignore empty results added to Salesforce SOQL, Read and SOSL Snaps.
  • Resolved an issue in Salesforce Batch Create Snap to appropriately create multiple records in REST API.
  • Resolved an issue with Connection pool times out with Salesforce Snaps.
  • Salesforce Lookup: Resolve a 'The session ID or OAuth token used has expired or is invalid' exception when running in an Ultra Task.

Resolved an issue with Salesforce Query returning inconsistent result sets.

  • SalesForce Lookup Snap: Implemented Pass-through on no lookup match property
  • Resolved an issue with Salesforce Upsert Snap failing with an error 'not valid for the type xsd:double'.
  • Resolved an issue with Salesforce SOQL Snap returning fewer results than SFDC returns.
  • Performance improvements made to Salesforce Read/SOQL Snaps with Bulk API in PK Chunking mode.
  • NEW! Salesforce Batch Create added in this release.
  • Salesforce Wave ID field suggestions now include upstream schema.
  • Resolved an issue in Salesforce Lookup Snap failing to generate an output schema if more than 50 records are found.
  • NEW! Salesforce Batch Create added in this release.
  • Resolved an issue with Salesforce Wave analytics throwing an error when metadata contained a hash symbol in number format.
  • Resolved an issue the failing to validate the account if the password contained a colon (:).
  • Salesforce Snaps now default to the latest Salesforce API version.
  • Create/Update/Upsert Snaps did not support related object mappings.

  • Salesforce Upsert - intermittently throws ViewChannelException since document was send to the closed output view
  • Salesforce Delete not using passthrough platform service

  • Salesforce Account: added custom login URL (for support of CipherCloud)
  • Salesforce Read: various updates for errors and performance improvements for > 1m rows being retrieved in Bulk API
  • Salesforce Write in Bulk API: enhanced batching support

  • NEW! Salesforce Wave Analytics added in this release.
  • Salesforce Upsert: External ID field is now suggestible.

  • Salesforce Read & Salesforce SOQL now accept 200 as a batch size.

  • Snaps with a Polling timeout property no longer have a maximum timeout limit.

  • Addressed the following issues:
    • Salesforce Account: Could not login to Salesforce, Endpoint Exception Error message is displayed.
    • Salesforce Analytics null pointer
    • Salesforce Attachment: NPE is displayed for Invalid Account.

  • The account settings for now gives you the choice of either entering a token or entering an IP while list address range. If you need to create a token, you will need a non-admin user to generate the token for SnapLogic.
  • The Security Token is no longer required for accounts.