Prompt
Salesforce to Snowflake sync
Latest observation
Oct 8, 2026
OpenAI APIWeb search: off
A Salesforce → Snowflake sync is usually built as an ETL/ELT pipeline that extracts data from Salesforce, lands it in Snowflake, and then transforms it there.
Common approaches
1. Managed connectors / ETL tools
Best if you want speed and less maintenance.
Examples:
- Fivetran
- Stitch
- Matillion
- Airbyte
- Informatica
- Talend
Typical flow: Salesforce API → connector → Snowflake staging/raw tables → transformations
Pros:
- Fast to set up
- Handles API pagination, retries, schema drift
- Incremental syncs and CDC-like behavior often included
Cons:
- Ongoing license cost
- Less control over exact sync logic
2. Custom integration
Best if you need full control or have special requirements.
Typical flow:
- Use Salesforce REST/Bulk API
- Extract objects like Account, Contact, Opportunity, etc.
- Load files to cloud storage or directly into Snowflake
- Use Snowflake COPY INTO or Snowpipe
- Run dbt/Snowflake SQL transformations
Pros:
- Full control
- Can optimize for your business rules
- Lower tool cost if you already have engineering capacity
Cons:
- More engineering and maintenance
- Must handle API limits, retries, deletes, schema changes
Recommended architecture
A common and reliable pattern:
-
Extract from Salesforce
- Use Bulk API 2.0 for large tables
- Use REST API for smaller or more frequent objects
- Track
SystemModStamporLastModifiedDatefor incremental loads
-
Land raw data
- Store JSON/CSV in S3, Azure Blob, or GCS
- Or stage directly into Snowflake
-
Load into Snowflake raw layer
- Use external/internal stages
- COPY INTO or Snowpipe
-
Transform in Snowflake
- Use dbt or SQL models
- Build cleaned dimensions/facts
-
Handle deletes and updates
- Soft delete flags or merge logic
- Periodic full refresh for certain objects if needed
Key Salesforce considerations
- API limits: Salesforce has daily and concurrent API limits
- Incremental sync: Use timestamps carefully;
SystemModStampis often better thanLastModifiedDate - Deletes: Need explicit handling; deletes do not always appear in simple incremental queries
- Relationships: Objects like Opportunity, Account, Contact, Lead, Case often require joins
- Schema drift: Custom fields are common and may change over time
Key Snowflake considerations
- Use separate layers:
RAWfor ingested source dataSTAGINGfor type casting/standardizationMARTfor business-ready tables
- Prefer
MERGEfor upserts - Use streams/tasks if you want near-real-time processing
- Use dbt if you want maintainable transformations and lineage
If you want near real-time sync
Use:
- Salesforce change events / platform events if available
- A CDC-capable connector
- Snowpipe for continuous ingestion
Note: truly real-time is harder with Salesforce than with databases because API/event behavior varies by object and license.
Example implementation options
Option A: Fivetran + Snowflake
- Connect Salesforce in Fivetran
- Select objects
- Fivetran replicates to Snowflake raw schema
- dbt transforms raw to models
Good for most teams.
Option B: Custom Python + Snowflake
- Query Salesforce Bulk API incrementally
- Write results to parquet/csv
- Upload to cloud storage
- COPY INTO Snowflake
- MERGE into target tables
Good for custom workflows.
Best practice checklist
- Use incremental loads
- Preserve raw source data
- Version your transformations
- Track source timestamps and load timestamps
- Plan for deletes and schema changes
- Monitor row counts and freshness
- Secure credentials with secrets manager
- Document object mappings
If you want, I can also give you:
- a reference architecture diagram,
- a Python sample for Salesforce → Snowflake, or
- a tool comparison table.