Salesforce to Snowflake
Sync Salesforce opportunities, accounts, contacts, leads and custom objects into Snowflake, and keep them current with incremental syncs. Weld authorises with OAuth, lands each object as its own table, and writes to Snowflake through a dedicated user and role you control.
Checked against Weld and vendor docs on
- opportunity7 cols
- account7 cols
- lead7 cols
- contact7 cols
- opportunity_line_item7 cols
- opportunity_contact_role7 cols
- Extract
- Load
- Keep in sync
- salesforce.opportunitySynced
- salesforce.accountSyncing
- salesforce.leadSynced
- salesforce.contactSynced
- salesforce.opportunity_line_itemSynced
- salesforce.opportunity_contact_roleSynced
- Salesforce tables
- 16
- fields, typed
- 112
- agent context included
- MCP
Trusted by data and AI teams
Three ways to get Salesforce data into Snowflake
Snowflake now has its own generally available Salesforce connector in Openflow, and Salesforce offers zero copy sharing from Data Cloud. Which one fits depends on whether you already run Openflow or pay for Data Cloud.
Snowflake Openflow Connector for Salesforce Bulk API
- Best for
- Teams already running Openflow who want a Snowflake managed connector
- Effort
- Medium: an Openflow runtime, a Salesforce external client app, network rules
- Freshness
- Scheduled, from every minute to every 24 hours
- Good to know
- Generally available. Replicates standard and custom objects with change detection on timestamp fields. Deletes are soft, and formula fields come through as views rather than data.
Salesforce Data Cloud zero copy
- Best for
- Companies that already pay for Salesforce Data Cloud
- Effort
- Medium: a Zerocopy Connector in Snowflake, a data share target and data shares in Salesforce
- Freshness
- Queried in place, no copy
- Good to know
- Data Cloud, now called Data 360, is a separate Salesforce product with its own consumption pricing. The share exposes Data Cloud data products to Snowflake, and the data stays in Salesforce.
Weld
- Best for
- Salesforce in Snowflake next to your other sources, without Openflow or Data Cloud
- Effort
- Low: authorise, pick objects, choose a schedule
- Freshness
- Incremental syncs on your schedule
- Good to know
- OAuth setup, deleted records kept and flagged, syncs that slow down at 80% of your API limit, and atomic full loads into Snowflake.
How to sync Salesforce to Snowflake with Weld.
In the app, with the API or an agent.
What lands in Snowflake
Every Salesforce table, keys intact.
Salesforce has no fixed table list: Weld offers the objects your Salesforce user can query, standard and custom, and lands each as a table named after the object in snake_case, with fields in snake_case too. Most sales reporting starts from these.
- opportunity7 columns
- idPKstring
- created_datedate
- created_by_idstring
- last_modified_datedate
- last_modified_by_idstring
One row per deal with stage_name, amount, close_date, is_won and is_closed. The base for pipeline, win rate and bookings.
- account7 columns
- idPKstring
- created_datedate
- created_by_idstring
- last_modified_datedate
- last_modified_by_idstring
The companies you sell to. Opportunities and contacts link to it through account_id.
- lead7 columns
- idPKstring
- created_datedate
- created_by_idstring
- last_modified_datedate
- last_modified_by_idstring
Prospects with their status and created_date, and an is_converted flag once they become contacts and opportunities.
- task and event
Calls, emails and meetings logged against records, with activity_date. Useful for activity reporting per rep.
- account
- contact
- lead
- opportunity
- opportunity_line_item
- opportunity_contact_role
- case
- campaign
- campaign_member
- task
- event
- user
- product_2
- pricebook_2
- pricebook_entry
- contract
Open pipeline by stage.
In Snowflake SQL.
Runs in Snowflake against the opportunity table Weld lands, here in a schema named salesforce. Weld creates lower case names by default, so every identifier is quoted.
1select2 "stage_name",3 count(*) as open_opportunities,4 round(sum("amount"), 2) as pipeline_amount5from "salesforce"."opportunity"6where not "is_closed"7 and not "is_deleted"8group by "stage_name"9order by pipeline_amount descAsk your agent.
It queries Snowflake for you.
Connect Claude, Cursor, ChatGPT or your own agent to Weld over MCP. It reads the Salesforce context, finds the tables it needs and runs the query in Snowflake.
How many account rows do we have in Snowflake?
Reading the Salesforce context first, so the query uses the right tables and keys.
Things to know.
Before you sync Salesforce.
ELT vs. reverse ETL: Salesforce and Snowflake
ELT (Extract, Load, Transform) moves data from Salesforce into Snowflake for analysis. This is the approach shown on this page, and the one to use for dashboards, reports, and data models.
Reverse ETL works the other direction: it pushes enriched data from Snowflake back into Salesforce. For example, you could sync computed lead scores or customer segments from your warehouse into Salesforce to personalize outreach.
Weld supports both directions, so you can build a complete data loop between Salesforce and Snowflake.
Snowflake to Salesforce- Quote names, or turn on upper case
- Weld quotes every name it writes, so lower case tables must be queried with quotes. Turn on Create tables and columns in upper case when you create the sync to query without quotes; the casing cannot be changed afterwards.
- API limits are shared across your org
- Salesforce applies its rate limits to the whole account. When usage reaches 80% of the limit, Weld slows its Salesforce syncs down so your other integrations keep working.
- Deleted records stay, flagged
- Weld reads deleted and archived records as well, so a record removed in Salesforce keeps its row with is_deleted set to true. Filter on it in your models.
- Not every object is incremental
- Objects with a last modified or created date sync incrementally on those timestamps; the rest are reloaded in full. Full loads into Snowflake are staged first and applied with one COPY INTO, so a failed run leaves the table as it was.
- Field names change shape
- Salesforce API names become snake_case columns, so StageName lands as stage_name. Compound address and geolocation fields are skipped; use their component fields.
Sources: Weld Salesforce connector docs · Weld Snowflake docs · Weld Salesforce SQL template (column names) · Snowflake: About the Openflow Connector for Salesforce Bulk API · Snowflake: About Salesforce Data Cloud and Snowflake · Snowflake: Set up Salesforce Data Cloud for zero copy · Salesforce: Data 360 pricing
Keep reading.
Guides, docs and schema.
Common questions.
About Salesforce to Snowflake.
Start syncing Salesforce to Snowflake.
Set up your Salesforce data pipeline in minutes. No credit card required. Free for 14 days.