Skip to content
adapters.io

Salesforce to Snowflake integration for analytics-ready CRM data

The Salesforce to Snowflake integration from Adapters loads accounts, contacts, opportunities, and activity from Salesforce into Snowflake tables on an incremental schedule, so your warehouse stays analytics-ready without draining Salesforce API limits. Field mapping is no-code, so try it against sample records in the live demo.

No credit card required.

Field mapping auto-plugged · tap a port to rewire

5 sample records ready

Last updated September 2026

What running Salesforce to Snowflake by hand costs you

  • Full table pulls burn Salesforce API calls and hit daily governor limits during business hours.
  • Hand-built ELT scripts break the moment someone adds a custom field or renames an object.
  • Stale CRM data in the warehouse means dashboards and models report last week, not today.

The field mapping, out of the box

These cables are pre-wired when you pick the pair. Rewire any of them, or add your own, in the same visual data mapping tool you use for every adapter.

Input / SALESFORCE

Account.Id
DIM_ACCOUNT.account_id
Account.Name
DIM_ACCOUNT.account_name
Opportunity.Amount
FCT_OPPORTUNITY.amount
Opportunity.StageName
FCT_OPPORTUNITY.stage
Opportunity.CloseDate
FCT_OPPORTUNITY.close_date
SystemModstamp
FCT_OPPORTUNITY.loaded_at

Transforms included

Incremental loads use the Salesforce SystemModstamp watermark so each run only moves changed rows; Salesforce field types cast to Snowflake column types, currency stays numeric, and timestamps land in UTC so downstream dbt models and BI tools read a clean, deduplicated table.

Salesforce to Snowflake: the API allocations, the type mapping, and the identifiers that change case on arrival

Loading Salesforce into Snowflake is rarely hard because of the transfer. It is hard because Salesforce meters what you are allowed to read, Snowflake silently reshapes what you write, and the object model you extract does not match the one your analysts think exists. Below: the allocations that decide how the extract has to be written, the type conversions worth setting explicitly, and the failure modes that only appear in month two. Salesforce developer limits and Snowflake documentation read 19 August 2026.

Salesforce meters the read, so the extract shape decides the cost

Daily API calls run to 100,000 plus 1,000 per Salesforce license on Enterprise and Professional, 100,000 plus 5,000 per license on Unlimited and Performance, 15,000 on Developer Edition and 5,000,000 on a full sandbox. That pool is shared across every integration in the org, so a connector that issues one REST call per record is spending an allocation that four other systems also need. Bulk API 2.0 ingests and extracts up to 150,000,000 records per 24 hours, with a job payload capped at 150 MB of base64-encoded CSV, 400,000 characters per record and 131,072 per field. The quieter ceiling is concurrency: only 25 requests lasting 20 seconds or longer can run at once in production, and 5 in a Developer or trial org. A vendor that parallelizes long SOQL queries can exhaust that while the daily number still looks healthy.

Identifiers change case on arrival, and it breaks the first dbt model

Snowflake folds unquoted identifiers to UPPERCASE. Salesforce API names arrive in mixed case, often with a trailing __c on custom fields. So Annual_Revenue__c becomes ANNUAL_REVENUE__C unless the loader quotes it, and if the loader does quote it, every query against that column must quote it too, forever. Pick one convention before the first load rather than after twelve models depend on the other one. The same applies to object names: Opportunity and OPPORTUNITY are the same table only if nothing quoted them on the way in.

The type conversions worth setting explicitly

Three matter. Snowflake NUMBER defaults to precision 38, scale 0, so a currency column that lands on the default loses its cents without an error: define NUMBER(18,2) for amounts. Salesforce datetimes are UTC and Snowflake TIMESTAMP_NTZ carries no zone at all, so if any reporting is done in a local fiscal calendar, store TIMESTAMP_TZ or keep the UTC discipline documented. And long text: Snowflake VARCHAR defaults to 16 MB and maxes at 128 MB, which is generous, but Salesforce caps a single field at 131,072 characters, so truncation on this route comes from the source side, not the destination.

Formula fields, rollups and deletes are where the numbers diverge

Formula and rollup summary fields are computed in Salesforce at read time and have no stored history. Extract them and you get today value attached to a row that may be six months old, which makes any point-in-time analysis wrong in a way nobody notices until a board slide. Recompute them in Snowflake from the underlying fields instead. Deletes are the second divergence: a record moved to the Salesforce Recycle Bin disappears from a standard query but stays in the warehouse unless the extract explicitly requests deleted records. If your Opportunity count in Snowflake drifts above Salesforce over months, that is why.

File sizing on the Snowflake side, and when to use Snowpipe instead

Snowflake recommends staged files of 100 to 250 MB compressed, and explicitly does not recommend files of 100 GB or more. The default COPY timeout is 24 hours, which sounds generous until a single oversized file spends all of it. For a large Salesforce backfill, split the extract rather than submitting one enormous file. If several jobs need to load into the same table concurrently, Snowflake recommends Snowpipe over parallel COPY, and Snowpipe lands data within about a minute of the notification, which is faster than most Salesforce syncs need to be anyway.

How Adapters handles this lane, and where it does not fit

Adapters runs scheduled Salesforce extracts through the bulk path rather than per-record calls, maps standard and custom objects with explicit type control, keeps identifier casing consistent, and reports per-record errors with the source values attached, on a flat monthly price from $49 rather than a row meter. That fits teams with a defined set of objects to keep current in Snowflake. It is the wrong pick if you need sub-minute freshness, if the project also needs forty other SaaS sources where catalog breadth wins, or if you want Spark-scale transformation in flight rather than modeling in SQL afterwards. Before you shortlist anything, the org-wide allocations are tabled on Salesforce integration tools, and the account the connector authenticates as should be a dedicated Salesforce Integration user, not a person.

How it goes live

Three steps, minutes end to end, covered by flat data integration pricing from $49 a month.

STEP 01

Pick the pair

Connect Salesforce and Snowflake with scoped credentials. About a minute each.

STEP 02

Confirm the mapping

The cables above are pre-wired. Adjust any field, preview the transform on sample records, done.

STEP 03

Schedule the sync

Hourly down to every minute, with retries, alerting, and a full log on every run.

Prefer to understand the moving parts first? Our long-form guide to syncing Salesforce to Snowflake covers the field-by-field detail, the failure cases, and what changes at volume.

Try it in the live demo Preloads SALESFORCE → SNOWFLAKE with sample records

Salesforce to Snowflake sync: common questions

How do I connect Salesforce to Snowflake?

Authenticate Salesforce with OAuth, pick the objects you need (Account, Contact, Opportunity, Task), map each field to a Snowflake column, and schedule an incremental run. The connector reads the SystemModstamp watermark so every run after the first backfill moves only changed rows, which keeps you well inside the daily API allowance.

What is Salesforce to Snowflake zero copy?

Zero copy means querying Salesforce data in Snowflake without physically loading it, using Salesforce Data Cloud sharing rather than a pipeline. It removes the copy but requires Data Cloud licensing and gives you Salesforce's model, not yours. A connector physically lands tables you control and can reshape, which is usually the cheaper route for a normal CRM warehouse.

Does loading Salesforce into Snowflake use up API limits?

It does, which is why the load pattern matters. Salesforce enforces a rolling 24 hour API request allowance per org, and a full nightly pull of every object burns through it fast. Incremental loads keyed on SystemModstamp typically cut request volume by an order of magnitude versus repeated full extracts.

How often should Salesforce sync to Snowflake?

Hourly covers most reporting and revenue models. Go to fifteen minutes only if an operational process reads the warehouse copy, and stay at daily for objects nobody looks at intraday. Sync frequency is the main lever on both API consumption and Snowflake credit spend, so set it per object rather than globally.

How does the Salesforce to Snowflake sync work?

The Salesforce to Snowflake integration from Adapters loads accounts, contacts, opportunities, and activity from Salesforce into Snowflake tables on an incremental schedule, so your warehouse stays analytics-ready without draining Salesforce API limits. Field mapping is no-code, so try it against sample records in the live demo.

Is there a prebuilt Salesforce connector for Snowflake?

Yes. This Salesforce to Snowflake connector ships prebuilt: the field mapping is wired the moment you pick the pair, transforms are included, and you can try it against sample records in the live demo. No code or engineering sprint required.

How much does the Salesforce Snowflake integration cost?

Pricing is flat and monthly: Starter at $49, Growth at $149, Scale at $399. Every plan includes this pair, visual field mapping, and per-record logs. There are no per-task or per-row fees, so the bill stays the same as volume grows.

How often can Adapters sync Salesforce to Snowflake?

Hourly on Starter, every 5 minutes on Growth, and down to every minute on Scale. Failed records retry automatically with backoff, and alerting plus a full per-record log come standard on every run.

Do I need to write code to connect Salesforce and Snowflake?

No. Fields are auto-mapped the moment you pick the pair, and you can rewire any mapping visually before the first sync. Incremental loads use the Salesforce SystemModstamp watermark so each run only moves changed rows; Salesforce field types cast to Snowflake column types, currency stays numeric, and timestamps land in UTC so downstream dbt models and BI tools read a clean, deduplicated table.

More pairs from the API connector library

stripe quickbooks integration shopify netsuite integration salesforce hubspot integration airtable google sheets sync postgres to snowflake sync shopify quickbooks integration salesforce netsuite integration paypal quickbooks integration square quickbooks integration stripe netsuite integration hubspot quickbooks integration quickbooks to xero migration shopify xero integration square netsuite integration hubspot xero integration salesforce to bigquery integration postgres to bigquery netsuite to snowflake integration quickbooks to bigquery integration stripe to snowflake integration shopify to snowflake integration quickbooks to snowflake integration hubspot to snowflake integration netsuite to bigquery integration stripe to bigquery integration shopify to bigquery integration paypal to snowflake integration square to snowflake integration square to bigquery integration netsuite to postgres integration salesforce to postgres integration xero to snowflake integration hubspot to bigquery integration xero to bigquery integration paypal to bigquery integration stripe to postgres integration snowflake to bigquery migration shopify to postgres integration hubspot to postgres integration bigquery to snowflake migration quickbooks to postgres integration xero to postgres integration square to postgres integration paypal to postgres integration snowflake to postgres mysql to postgres migration mysql to snowflake redshift to snowflake migration mysql to bigquery sql server to snowflake sql server to postgresql migration

Browse the full api connector library, or request a pair you do not see.

Salesforce and Snowflake, finally in agreement

Map the pair once and let it sync on schedule. Flat price from $49 a month, no per-task fees.

Try the live demo

No credit card required.