Integrations

Salesforce to Snowflake

Load Salesforce accounts, contacts, opportunities and custom objects into Snowflake without exhausting your daily API allowance.

SalesforceSourcesyncSnowflakeDestination

The pipeline as it appears on the Pipeloom canvas. You can add transforms or triggers on the same canvas later.

What to know about Salesforce into Snowflake

Use Append + Deduped to survive API limits

When the connector reaches Salesforce's daily API limit it ends the sync with success and resumes next time, but only incremental syncs resume. Incremental | Append + Deduped is the recommended mode, and Snowflake then holds one current row per record.

Widen the lookback window if records are missing

Salesforce can expose a record's modification time before its transaction commits, so the cursor can skip it. If records are missing in Snowflake but present in Salesforce, raise Lookback Window from PT10M to PT30M or PT1H. Deduped mode absorbs the overlap.

NA picklist values can silently become null

Bulk API results are read as CSV, so a literal NA (North America, say) is read as empty. Turn on Preserve "NA" and similar string values and refresh the affected streams, or those values stay null in Snowflake.

Formula fields need a backfill when the formula changes

Changing a formula does not update any record, so the cursor does not move. Reset the stream and run a historical backfill to bring the new values into Snowflake.

Set it up

  1. Create the Salesforce sourceAuthenticate with Salesforce OAuth credentials, ideally for a dedicated integration user. You need: A Salesforce account on Enterprise edition, or Professional edition with API access purchased as an add-on. A dedicated Salesforce user whose permission set can read the objects you want to sync.
  2. Create the Snowflake destinationAuthenticate with Key pair (an RSA key of 2048 bits or more). You need: A Snowflake account and the ACCOUNTADMIN role for the one-time setup. A warehouse, database, user and role for Pipeloom, with a key pair attached to the user. Network policies that allow Pipeloom to connect.
  3. Connect them and pick streamsDraw the edge on the canvas and choose streams and sync modes. Salesforce supports full refresh (overwrite or append) and incremental (append or append + deduped); Snowflake supports every mode: full refresh overwrite, overwrite deduped, append, incremental append and incremental append deduped.
  4. Run, then scheduleThe first sync loads each stream in full. Then set the schedule.

Step-by-step guides: Salesforce and Snowflake.

What lands in Snowflake

  • A final table per stream with typed columns, plus _AIRBYTE_RAW_ID, _AIRBYTE_GENERATION_ID, _AIRBYTE_EXTRACTED_AT, _AIRBYTE_LOADED_AT and _AIRBYTE_META.
  • A raw table per stream in the airbyte_internal schema (or the internal dataset name you set), holding each record as JSON.

Type mapping

  • object → OBJECT
  • array → ARRAY
  • union and unknown → VARIANT
  • timestamp with time zone → TIMESTAMP_TZ
  • integer → NUMBER
  • number → FLOAT (or NUMBER(38,9))

When Salesforce's schema changes

New columns are added and types changed as the source changes. A column removed at the source is kept, with its data, and new rows get NULL. Column names that are SQL reserved words get a leading underscore.

Streams you can sync

Includes Account, Contact, Lead, Opportunity, Case, User, Task, any queryable custom object and more. The full list is in the reference.

What it costs

A sync is metered at 1 credit per vCPU-minute, and a default sync uses 2.5 vCPUs. As an example, not a benchmark, a sync that takes 8 minutes uses 20 credits. Run 12 times a day, that is about 7,200 credits a month, more than Free's 1,500 but within Starter's 12,000 ($19 a month). Your own sync time decides the real figure, so try the calculator with your numbers.

Questions and fixes

Which Salesforce editions work?

Enterprise edition, or Professional edition with API access bought as an add-on.

Why did a sync end early but report success?

Salesforce enforces daily API limits. The connector syncs until it reaches the limit, ends the sync with success, and the next sync continues from where it stopped. That resume only works for incremental syncs, which is why Incremental | Append + Deduped is the recommended mode.

Why are recent records missing from the destination?

Salesforce can set a record's SystemModStamp before its transaction commits, so the cursor can move past it. Raise Lookback Window in the source from the default PT10M to PT30M or PT1H. Deduped mode absorbs the overlap.

Why do values like NA come through as null?

Bulk API results are read as CSV, and strings such as NA, N/A and NULL are treated as empty. Turn on Preserve "NA" and similar string values, then refresh the affected streams.

A formula field changed but the data did not. Why?

If only the formula changes, no record is updated, so the cursor does not move. Reset the stream and run a historical backfill to pull the new values.

Why do long syncs fail with INVALID_SESSION_ID?

Salesforce sessions expire after a timeout that defaults to 2 hours. The connector refreshes its token every 30 minutes in current versions, so persistent errors suggest an old connector version.

Why does the sync fail with "Current role does not have permissions on the target schema"?

The Pipeloom role is missing a grant on the schema it writes to. Re-run the role setup from the Snowflake guide, or grant the role usage and create-table rights on that schema.

Sync Salesforce to Snowflake today

Free forever, no card. Starter is $19 a month for three seats.