Skip to content
Notifications
Clear all

Has anyone migrated a B2B SaaS off Salesforce CDP? Any gotchas?

4 Posts
4 Users
0 Reactions
2 Views
(@cloud_ops_amy)
Estimable Member
Joined: 5 months ago
Posts: 128
Topic starter   [#17626]

Hi everyone,

I've been deep in the weeds planning a migration for our product off Salesforce CDP. We're a B2B SaaS with a complex lead-to-cash data model, and while SF CDP was a good start, the cost and flexibility constraints are pushing us toward a custom stack built around Snowflake and RudderStack.

Before we commit, I'd love to hear from anyone who's navigated a similar path. My main concerns are around the **gotchas** that aren't obvious in the high-level migration plans.

Specifically:

* **Schema Translation:** Salesforce's data model (Leads, Contacts, Opportunities with all their custom objects) has a particular shape. How did you map this to a more traditional warehouse schema? Did you maintain the same structure or flatten/denormalize?
* **Historical Event Backfill:** The idea of re-playing historical events (page views, form fills, custom events) into a new system is daunting. Any lessons on tools or processes for extracting this data reliably? We're looking at a 2-year window.
* **Downstream Connectors:** We have live integrations feeding into our marketing automation (Marketo) and customer support (Zendesk) systems. How did you manage the cut-over without dropping events or creating duplicates?

Here's a snippet of the Terraform we're prototyping for the RudderStack source configuration, just to show the level we're thinking at:

```hcl
resource "rudderstack_source" "salesforce_cdp_historical" {
name = "sf-cdp-historical-export"
source_type = "cloud_etl"

config_json = jsonencode({
connection_settings = {
type = "s3"
bucket = aws_s3_bucket.historical_events.bucket
prefix = "form-submissions/"
format = "json"
}
# Mapping SF's 'Form_Submit__e' to our internal event
event_mapping = {
"Form_Submit__e" = {
"event_name" = "form_submitted",
"mapping" = {
"Contact__c.Id" = "user_id",
"Form_Name__c" = "form_name"
}
}
}
})
}
```

I'm most interested in the **unexpected hurdles** – things like API rate limiting during data extraction, hidden costs in the Salesforce side for data access, or semantic differences in how customer profiles merge between systems.

Any war stories or architecture diagrams would be hugely appreciated!

-- Amy


Cloud cost nerd. No, I don't use Reserved Instances.


   
Quote
(@emilyr22)
Trusted Member
Joined: 1 week ago
Posts: 38
 

The downstream connectors question is the one that kept me up. We didn't have Zendesk, but we did cut over a Marketo sync. The big gotcha for us was the deduplication logic.

Salesforce's sync handles merges and updates in a specific way. If your new pipeline doesn't perfectly replicate that order, you can end up with duplicate leads in Marketo during the transition. We built a separate script just to monitor and suppress duplicates for a week after the switch.



   
ReplyQuote
(@diego_h)
Reputable Member
Joined: 4 months ago
Posts: 122
 

That's a really good point about the sync logic. I'm looking at setting up a HubSpot sync as part of our move, and I hadn't considered the exact order of operations. Did you find the issue was mostly with the *timing* of updates vs. creates during the cutover, or was it something inherent in how the data was transformed first?


Still learning.


   
ReplyQuote
(@cloud_cost_owen)
Estimable Member
Joined: 3 months ago
Posts: 64
 

For schema translation, we did a mix. We kept core objects like Leads and Contacts separate but merged a lot of the custom object data into wide tables in Snowflake. The key was tagging every column with its source Salesforce API name - saved us months in debugging later.

For backfilling events, we used the EventLogFile object and a ton of Python. The gotcha? The timestamps in those exports can be a mess if you've changed timezones. Build your idempotent replay process *before* you start the 2-year pull.

Good call on Snowflake + RudderStack, that's exactly where we landed. The cost savings were insane, like 60% less once we got the pipelines tuned. Good luck



   
ReplyQuote