CRM migration
Field-level mapping, validation, and rollback between Dynamics 365 Marketing and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
Dynamics 365 Marketing
Source
Salesforce Sales Cloud
Destination
Compatibility
12 of 13
objects map 1:1 between Dynamics 365 Marketing and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Dynamics 365 Marketing to Salesforce is a multi-layered migration that involves standard CRM record transfer alongside marketing-specific schema decisions that have no direct equivalent in Salesforce. Dynamics 365 Marketing stores marketing assets (emails, journeys, segments) in msdynmkt_ prefixed Dataverse tables under Customer Insights, not in the core CRM entity schema. We extract those configurations via the Configuration Migration Tool and deliver a written marketing automation rebuild guide rather than migrating Journey logic as code, since Dynamics 365 Journeys have no direct Salesforce Sales Cloud equivalent and require Marketing Cloud Account Engagement or Marketing Cloud to replicate. We sequence the migration as: core entity records first (Accounts, Contacts, Leads, Opportunities), then Activities via Bulk API 2.0, then Custom Entities, then marketing asset documentation. The Dynamics 365 Marketing Contact billing flag has no Salesforce analog; we preserve the flag value in a custom field so it survives if the customer re-evaluates a marketing automation layer later. Workflows, Power Automate flows, and marketing automation sequences do not migrate and are inventoried for admin rebuild.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Dynamics 365 Marketing object lands in Salesforce Sales Cloud, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Dynamics 365 Marketing
Contact
Salesforce Sales Cloud
Lead or Contact (split required)
1:manyDynamics 365 Marketing Contacts map to Salesforce Lead or Contact based on lifecycle status. Prospects and unqualified contacts from Dataverse msdyn_contact with no related opportunity become Salesforce Leads. Contacts that have an associated opportunity or account become Salesforce Contacts attached to the corresponding Account. We compute the split at migration time using the contact's lifecycle stage and opportunity association from the source data, and preserve the original Dynamics lifecycle status in a custom field d365_lifecycle_stage__c on both Lead and Contact for reporting continuity.
Dynamics 365 Marketing
Lead
Salesforce Sales Cloud
Lead
1:1Dataverse Lead records that exist separately from Contacts map directly to Salesforce Lead. Lead status values from Dynamics map to Salesforce Lead Status picklist values. Any lead scoring data from Customer Insights - Data or custom Dataverse fields migrates to a custom field d365_lead_score__c on the Salesforce Lead record.
Dynamics 365 Marketing
Account
Salesforce Sales Cloud
Account
1:1Dynamics 365 Accounts (Companies) map directly to Salesforce Account. The primary contact relationship is preserved via the primarycontactid lookup when present. Account address, industry, number of employees, annual revenue, and custom account fields migrate to corresponding Salesforce Account fields. Account hierarchies in Dynamics map to Salesforce's parent Account lookup.
Dynamics 365 Marketing
Opportunity
Salesforce Sales Cloud
Opportunity
1:1Dynamics 365 Opportunities (msdyn_opportunity) map to Salesforce Opportunity. Pipeline stage from Dynamics maps to Salesforce StageName with probability percentages rounded to Salesforce-allowed integer values. Estimated close date, amount, and owner assignment migrate directly. The opportunity-to-account and opportunity-to-contact relationships are resolved at migration time using the Dataverse relationship lookups.
Dynamics 365 Marketing
ActivityPointer (Email, Task, PhoneCall, Appointment)
Salesforce Sales Cloud
EmailMessage, Task, Event
1:1Dynamics 365 Activities stored in the ActivityPointer entity and type-specific child tables (Email, Task, PhoneCall, Appointment) migrate to Salesforce EmailMessage, Task, and Event records. The regarding object lookup (regardingobjectid) is resolved to the target Salesforce record's WhoId or WhatId at migration time. Activity timestamps preserve the original Dynamics createdon date for timeline continuity. Large activity histories (over 200,000 records) are migrated via Salesforce Bulk API 2.0 with chunking and exponential backoff.
Dynamics 365 Marketing
Annotation (Notes with Attachments)
Salesforce Sales Cloud
Note, ContentDocument
1:1Dynamics 365 Annotations (notes with file attachments) are exported individually and mapped to Salesforce Note records with associated ContentDocument records for file attachments. The objectid and objecttypecode from Dynamics are resolved to the target Salesforce record ID at migration time, and the notetext body migrates as rich text to the Salesforce Note body field.
Dynamics 365 Marketing
Marketing List
Salesforce Sales Cloud
Campaign
1:1Dynamics 365 Marketing Lists (msdynmkt_marketinglist) containing member records map to Salesforce Campaign objects. List membership records migrate as Salesforce CampaignMember records linked to the Campaign, with the member type preserved (Contact or Lead) and the member's status mapped to CampaignMember Status. Marketing List name and description become Campaign Name and Description.
Dynamics 365 Marketing
Campaign and Campaign Activity
Salesforce Sales Cloud
Campaign
1:1Dynamics 365 Campaigns and Campaign Activities are legacy marketing model entities. We export campaign structure, objective, and budget information as Salesforce Campaign records. Campaign Activities are mapped to Salesforce Tasks or Notes linked to the Campaign depending on the activity type, since Salesforce has no direct Campaign Activity equivalent. We sequence Campaign import after Accounts and Contacts to ensure the parent record exists before CampaignMember records are written.
Dynamics 365 Marketing
msdynmkt_email (Marketing Emails)
Salesforce Sales Cloud
Email Template (reference documentation)
1:1Marketing emails stored in the msdynmkt_email Dataverse table (Customer Insights - Journeys) are exported via the Configuration Migration Tool as content reference documentation. Salesforce Sales Cloud has no direct equivalent for marketing email assets; we document the email name, subject line, body content, and Dynamic Content blocks as a reference guide for the customer's admin to rebuild in Salesforce Marketing Cloud Account Engagement, Marketing Cloud Content Builder, or Sales Cloud Email Templates depending on the marketing automation strategy chosen during scoping.
Dynamics 365 Marketing
msdynmkt_journey (Customer Journeys)
Salesforce Sales Cloud
Journey logic (reference documentation)
1:1Customer Journey definitions stored in msdynmkt_journey and related tables are extracted as configuration reference documentation. Dynamics 365 Journeys reference segment memberships, email content, trigger conditions, and wait logic that have no direct Salesforce Sales Cloud equivalent. We deliver a written journey inventory that lists each Journey's name, trigger type, segment membership, email assets, and flow logic so the customer's marketing team can rebuild using Salesforce Marketing Cloud Account Engagement Engagement Studio or Marketing Cloud Journey Builder. Journey automation logic does not migrate as code.
Dynamics 365 Marketing
Customer Insights - Data Segment
Salesforce Sales Cloud
Campaign List or Pardot List (reference documentation)
1:1Customer Insights segments are stored in a separate service from the core CRM Dataverse database and require a dedicated export pass. Segment definitions (criteria-based or static) and membership records are documented as a reference guide for the customer's admin to recreate in Salesforce. If the destination includes Marketing Cloud Account Engagement, segments map to Pardot Lists; for Sales Cloud-only destinations, segments map to Salesforce Campaigns with static membership. Segment membership data cannot be imported directly into Salesforce without a target list equivalent being defined first.
Dynamics 365 Marketing
Custom Entities (Dataverse managed solution)
Salesforce Sales Cloud
Custom Object
1:1Custom entities created within a Dataverse solution are supported for migration but require the customer to provide the managed solution ZIP or schema file exported via the Configuration Migration Tool before we can define the destination Salesforce custom object. We do not infer custom entity structure from UI exports because they omit relationship metadata, field security profiles, and managed property settings. We create the Salesforce custom object (with __c API name matching the Dataverse entity logical name where feasible), define all custom fields, establish lookup relationships, and import the data once the schema is deployed and validated in the destination org.
Dynamics 365 Marketing
Owner (User)
Salesforce Sales Cloud
User
1:1Dynamics 365 User records and owner assignments on all entity types are migrated as User lookups in Salesforce. We match Dynamics users by email address against the Salesforce destination org's User table. Any Dynamics User without a matching Salesforce User is placed in a reconciliation queue for the customer's admin to provision before record migration continues. Owner assignments on Contacts, Leads, Accounts, and Opportunities are resolved at migration time using the pre-validated User mapping.
| Dynamics 365 Marketing | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Contact | Lead or Contact (split required)1:many | Fully supported | |
| Lead | Lead1:1 | Fully supported | |
| Account | Account1:1 | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| ActivityPointer (Email, Task, PhoneCall, Appointment) | EmailMessage, Task, Event1:1 | Fully supported | |
| Annotation (Notes with Attachments) | Note, ContentDocument1:1 | Fully supported | |
| Marketing List | Campaign1:1 | Fully supported | |
| Campaign and Campaign Activity | Campaign1:1 | Fully supported | |
| msdynmkt_email (Marketing Emails) | Email Template (reference documentation)1:1 | Fully supported | |
| msdynmkt_journey (Customer Journeys) | Journey logic (reference documentation)1:1 | Fully supported | |
| Customer Insights - Data Segment | Campaign List or Pardot List (reference documentation)1:1 | Fully supported | |
| Custom Entities (Dataverse managed solution) | Custom Object1:1 | Fully supported | |
| Owner (User) | User1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
Dynamics 365 Marketing gotchas
Marketing Contact billing triggers on record import
Configuration Migration Tool does not migrate high-volume transactional data
Customer Insights segments are stored separately from Dataverse CRM records
Marketing Lists and Campaign Activities have legacy schema dependencies
Custom entities require a managed solution schema, not a UI export
Salesforce Sales Cloud gotchas
Workflow Rules and Process Builder are retired
Bulk API batch quota exhaustion during large imports
Storage overage billing is non-obvious
Account-Contact many-to-many relationship mapping
Territory and team member import ordering dependencies
Pair-specific challenges
Migration approach
Discovery and marketing automation strategy
We audit the source Dynamics 365 Marketing environment across the marketing module type (outbound vs. real-time Customer Insights - Journeys), Dataverse entity count, marketing asset volume (email count, journey count, segment count), custom entity definitions via solution schema, activity record volume, and owner assignment distribution. We pair this with a Salesforce edition and marketing automation recommendation: Sales Cloud Professional ($80/user) for core CRM migration, Marketing Cloud Account Engagement for marketing automation replacement, or Marketing Cloud for enterprise multi-channel automation. The discovery output is a written migration scope with object inventory, marketing asset disposition plan, and Salesforce edition recommendation.
Marketing contact billing flag planning
Before any data extraction begins, we work with the customer to identify which Dynamics 365 Contacts should be classified as non-marketing versus marketing contacts in the destination. We design a custom field strategy (d365_marketing_contact_flag__c on the target Salesforce Lead or Contact) to preserve the original billing classification. We also identify any Dynamics contacts that should not be imported into Salesforce at all if they are suppressive or opted-out, to prevent re-activation in the destination. This step must complete before contact export starts because the flag cannot be applied retroactively in Dynamics 365 Marketing.
Schema design and sandbox migration
We design the destination Salesforce schema: custom objects and fields (with __c API names matched to Dataverse entity logical names where feasible), Lead and Contact field types, Account hierarchy configuration, Opportunity stage mapping with probability percentages, Campaign structure for Marketing List equivalents, and the Lead-Contact split rule. Schema is deployed via Salesforce metadata API into a Sandbox org for validation. We run a full sandbox migration with production-like data volume and the customer reconciles record counts and spot-checks 25-50 records before production migration is authorized.
Customer Insights and marketing asset extraction
We execute a separate export pass for Customer Insights - Data segments and membership records, and extract msdynmkt_email and msdynmkt_journey configurations via the Configuration Migration Tool. We produce a written marketing asset inventory that documents each email's subject and body, each Journey's trigger, segments, steps, and wait logic, and each segment's criteria definition and membership count. This document is the handoff artifact for the customer's marketing team to use when rebuilding assets in Salesforce Marketing Cloud or Account Engagement.
Production migration in dependency order
We run production migration in strict dependency order: Salesforce User provisioning validation, Accounts (from Dynamics Companies), Contacts and Leads with the lifecycle split applied, Opportunities with AccountId and OwnerId resolved, Activity history via Bulk API 2.0 for large volumes, Annotations with ContentDocument linkage, Campaigns and CampaignMembers for Marketing List equivalents, then Custom Entities last because they often have lookups to standard objects. Customer Insights segment membership is imported after Contacts to satisfy the parent record constraint. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze Dynamics 365 Marketing writes during cutover, run a final delta migration of any records modified during the migration window, then enable Salesforce as the system of record. We deliver the marketing asset inventory and automation rebuild guide as a written document, not migrated code. We do not rebuild Dynamics Power Automate flows, marketing workflows, or Customer Journeys as Salesforce Flow or Marketing Cloud Account Engagement Engagement Studio inside the migration scope; those are separate engagements or internal admin tasks. We offer a one-week hypercare window for reconciliation issues raised by the customer's team post-cutover.
Platform deep dives
Dynamics 365 Marketing
Source
Strengths
Weaknesses
Salesforce Sales Cloud
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Dynamics 365 Marketing and Salesforce Sales Cloud.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Dynamics 365 Marketing: Dataverse Web API enforces organization-level throttling; specific limits vary by workload and are not publicly documented at fixed thresholds.
Data volume sensitivity
Dynamics 365 Marketing exposes a bulk API — large-volume migrations stream efficiently.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Dynamics 365 Marketing to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your Dynamics 365 Marketing to Salesforce Sales Cloud migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Dynamics 365 Marketing
Other ways to arrive at Salesforce Sales Cloud
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.