New: Supaflow Claude Plugin -- let Claude create, edit, and monitor your data pipelines. Try the plugin

SALESFORCE → SNOWFLAKE

Salesforce to Snowflake

Sync Salesforce standard and custom objects to Snowflake with incremental updates, delete capture, and clear handling for objects the API cannot query.

Most teams run Salesforce reporting through dashboards built for sellers, not analysts. Supaflow lands standard and custom objects in Snowflake so analytics, finance, and ops can join CRM data with everything else. Objects Salesforce APIs cannot query, such as Big Objects, external objects, history tables, deprecated objects, or objects without a usable incremental timestamp, are skipped with a clear reason instead of failing silently. The connector handles Salesforce’s real-world quirks: concurrent OAuth session limits, compound fields like Address and Location, picklist label-vs-code ambiguity, and per-object incremental timestamp selection. Every connector is included on every Supaflow plan — you pay only for the compute your pipelines consume.

Used by RevOps teams reconciling forecast rollups against pipeline snapshots, finance teams modelling quote-to-cash through Opportunity + OpportunityLineItem + Quote joins, and analytics teams rebuilding territory hierarchies in Snowflake — with no per-row fees.

What the Salesforce to Snowflake connector does

Every row below is an actual capability in the Salesforce connector, not a forward-looking promise.

Salesforce to Snowflake capability matrix — connector features, how each works, and known limits
FeatureHow it worksLimit / caveat
Object coverageStandard objects such as Account, Contact, Opportunity, Case, and Lead, plus custom objects created in your Salesforce org. Supaflow discovers eligible objects and field metadata during sync planning.Unsupported or unsafe-to-query objects are skipped with a clear reason: deprecated objects, non-queryable objects, Big Objects, external objects, history objects, Salesforce views that cannot be queried safely, and objects without a usable incremental timestamp. Compound fields such as Address and Location are handled through their individual component fields.
AuthenticationTwo auth modes: OAuth 2.0 Web Server flow against a Salesforce Connected App (recommended) or basic auth with username, password, and security token for legacy pipelines or orgs where a Connected App is not yet available.Salesforce limits concurrent OAuth sessions per user per Connected App. Supaflow avoids token refresh during an active sync so parallel pipelines do not invalidate each other’s sessions. Basic auth is supported, but OAuth is the recommended path for new setups.
Incremental syncSupaflow chooses the best available Salesforce timestamp field for each object and syncs only rows changed since the last run.Objects without a usable timestamp field are skipped with a clear reason. Salesforce custom objects with disabled audit fields can fall into this bucket.
Delete captureThe connector reads active, archived, and recycle-bin records when Salesforce exposes them, so deleted rows can propagate to Snowflake on the next sync.Records purged from the recycle bin (15-day retention by default) are no longer visible to Salesforce APIs. Set up periodic cleanup downstream if you need to mirror permanent deletes.
Field type handlingFormula fields, picklists, and lookup/master-detail relationships are mapped with Salesforce-specific handling. When Salesforce exposes both human labels and stable API values for related picklist fields, Supaflow keeps joins stable while preserving available labels.
PaginationLarge objects are read in Salesforce API pages rather than row-by-row. Default read pages are 2,000 records, and jobs can stop cleanly between pages.
Rate limiting & retryRetries transient throttling, session, and server errors with exponential backoff. Daily API-limit exhaustion is surfaced as a clear sync error rather than retried indefinitely.
Schema discoverySupaflow discovers org objects and field metadata before building the sync plan. Standard and custom objects are identified from Salesforce metadata, and read-only objects are modeled appropriately.
DestinationLands directly in Snowflake with one table per synced object, Snowflake-friendly type mapping, and incremental merges keyed on the Salesforce Id. Custom object names are preserved.

Why Supaflow for Salesforce to Snowflake

Every connector included, usage-based pricing

Every Supaflow connector is included on every plan at no extra cost. You pay only for compute consumed, measured in Supaflow Credits (1 credit = 1 compute-hour on a Small node). No per-row fees.

Built around Salesforce’s real limits

Salesforce limits concurrent OAuth sessions, exposes Address and Location as compound fields that need special handling, and uses different timestamp fields across objects. Every one of those edge cases is handled in the connector — not left as user homework.

Incremental sync that matches Salesforce reality

A single hard-coded timestamp field does not work across every Salesforce object. Supaflow chooses a usable timestamp per object, verifies Salesforce can filter on it, and skips objects that cannot support safe incremental sync with a clear reason.

5 Salesforce quirks that break naive pipelines

Every one of these is something our connector handles specifically. A generic pipeline built in Airflow or a basic ELT tool will hit at least three of them in production.

Quirk 1

The 4-concurrent-OAuth-session ceiling

Failure mode: Salesforce limits concurrent OAuth sessions per user and Connected App. Pipelines that refresh tokens during a sync can invalidate each other when several jobs run in parallel.

Evidence: Documented Salesforce platform limit; reproduced when running multiple parallel jobs with token-refresh strategies.

Fix: Supaflow avoids token refresh during the active sync. Parallel jobs against the same Connected App stay within the Salesforce session limit.

Quirk 2

Compound fields like Address and Location

Failure mode: Salesforce exposes Address and Location as compound fields in metadata, but they cannot be queried like ordinary fields. A naive "select all fields" pipeline fails immediately on common objects such as Account.

Evidence: Standard Salesforce query behavior; reproducible against any object using compound fields.

Fix: Compound parent fields are left out of the query, and the individual fields Salesforce exposes separately sync instead. The schema stays complete enough for analytics, and queries do not fail.

Quirk 3

Picklist label vs code ambiguity

Failure mode: Some Salesforce picklists expose both the human label and the machine code as separate fields with related-but-confusing names. Pipelines that pick the label lose the API-stable identifier; pipelines that pick the code lose human readability and may not match what the UI shows.

Evidence: Common across managed packages and custom-built pipelines that use picklist values as join keys downstream.

Fix: When both forms are available, Supaflow prefers the stable API value for joins while preserving the related human-readable label when Salesforce exposes it.

Quirk 4

Incremental timestamp availability varies by object

Failure mode: Salesforce does not expose the same usable timestamp field on every object. Some custom objects do not have audit fields enabled. Pipelines that hard-code one timestamp field fail on the objects that lack it.

Evidence: Verified against orgs with packaged custom objects where audit fields were disabled.

Fix: The connector chooses a usable incremental timestamp per object and verifies Salesforce can filter on it. Objects without a safe timestamp are skipped with a clear reason instead of failing silently.

Quirk 5

Deprecated and hidden objects

Failure mode: Salesforce orgs accumulate deprecated and hidden objects from removed managed packages and old features. Including them in sync wastes API quota and pollutes the destination schema with dead tables.

Evidence: Standard Salesforce metadata behavior; common in long-lived orgs.

Fix: Deprecated and hidden objects are skipped during discovery. The destination only gets tables that Salesforce still considers live and queryable.

How it works

1

Connect Salesforce

Pick an auth mode: OAuth 2.0 Web Server flow (recommended — create a Connected App in Salesforce or use one Supaflow provisions), or basic auth with username, password, and security token (supported for legacy pipelines). Choose production or sandbox.

Salesforce source docs
2

Pick objects to sync

Supaflow discovers the queryable standard and custom objects in your org. Big Objects, external objects, history objects, deprecated objects, and objects without a usable incremental timestamp are skipped with a clear reason. Pick a subset or sync everything eligible.

3

Pick Snowflake as destination

Connect your Snowflake warehouse. Each Salesforce object becomes a Snowflake table with canonical type mapping; the Salesforce Id flows through as the primary key.

Snowflake destination docs
4

Set a schedule

Cron or interval. Incremental syncs pull only rows changed since the last successful run. Recycle-bin deletes propagate; daily API limit is monitored and surfaced clearly if you hit it.

Schedules docs

Frequently asked questions

How does Supaflow sync Salesforce to Snowflake?

The connector authenticates via OAuth 2.0 Web Server against a Salesforce Connected App (recommended) or basic auth with username, password, and security token. It discovers eligible standard and custom objects, reads them with paginated Salesforce API calls, and uses a per-object timestamp field for incremental sync. Each synced object becomes a Snowflake table.

Does Supaflow capture deleted records from Salesforce?

Yes. When Salesforce exposes recycle-bin and archived records through its APIs, they land in Snowflake on the next sync. Records purged from the recycle bin are no longer visible to any Salesforce API, so set up periodic cleanup downstream if you need to mirror permanent deletes exactly.

Does Supaflow sync Salesforce custom objects?

Yes. Custom objects are first-class: discovered alongside standard objects and treated the same way. Custom fields sync with type mapping aware of Salesforce-specific types like currency, percent, picklist, multipicklist, and lookup relationships.

How does Supaflow avoid Salesforce API limits?

Salesforce API reads run in 2,000-record pages instead of per-row calls, so large objects do not burn quota on tiny requests. Daily API-limit exhaustion is detected and surfaced clearly rather than retried indefinitely. Object discovery is batched to keep schema-discovery overhead low.

How is pricing different from Fivetran or Hevo for Salesforce to Snowflake sync?

Fivetran and Hevo often price by rows or changed-record volume, so a Salesforce sync's cost can scale with the number of records that change each month. A high count of changed records makes the bill harder to predict. Every Supaflow connector is included on every plan at no extra cost. You pay only for compute consumed, measured in Supaflow Credits (1 credit = 1 compute-hour on a Small node). No per-row fees. See the pricing page for the credit packages and free tier.

How does Supaflow handle Salesforce compound fields like Address?

Compound fields such as Address, Location, and Name are exposed in Salesforce metadata but cannot be queried directly in the same way as ordinary fields. Supaflow leaves the compound parent fields out of the query and syncs the individual fields Salesforce exposes separately, so the destination remains useful and queries do not fail.

Can I self-host the Salesforce to Snowflake pipeline?

Yes. The sync agent runs in your own VPC if you want Salesforce credentials and CRM data to stay in your network. The control plane is managed; the data plane can be managed or self-hosted.

Land Salesforce in Snowflake

Every connector is included on every Supaflow plan — you pay only for the compute your pipelines consume. Standard and custom objects, incremental sync, recycle-bin delete capture.