Migration route

    Microsoft Dynamics 365Salesforce

    Microsoft Dynamics 365 to Salesforce Data Migration

    Migrate accounts, contacts, leads from Microsoft Dynamics 365 to Salesforce using a controlled process for extraction, mapping, transformation, validation, loading and reconciliation.

    Migration overview

    Dynamics 365 Sales to Salesforce is typically driven by a commercial CRM decision — sales tooling, AppExchange ecosystem or an acquisition standardising on Salesforce.

    The source here is Dataverse rather than an ERP, so extraction is API-shaped and the constraint is throughput rather than data-model archaeology.

    Typical data scope

    Scope is agreed in discovery. On this route it usually covers:

    Accounts

    Domain in scope for a typical Microsoft Dynamics 365 to Salesforce programme.

    Contacts

    Domain in scope for a typical Microsoft Dynamics 365 to Salesforce programme.

    Leads

    Domain in scope for a typical Microsoft Dynamics 365 to Salesforce programme.

    Opportunities

    Domain in scope for a typical Microsoft Dynamics 365 to Salesforce programme.

    Activities

    Domain in scope for a typical Microsoft Dynamics 365 to Salesforce programme.

    Migration architecture

    One controlled pipeline, run as repeatable cycles.

    Microsoft Dynamics 365DataMoveTransformation & validationSalesforceDataVault reconciliationDataLens

    Extracting from Microsoft Dynamics 365

    What the source platform makes available, and the constraints that shape the extraction design.

    Two different products under one nameDynamics 365 Finance and Supply Chain (the former AX/Operations lineage) and Dynamics 365 Sales/Customer Engagement (the former CRM lineage) have different data models and different extraction surfaces. Naming which one is in scope comes first.
    Dataverse and the Web APICustomer Engagement data sits in Dataverse, extracted through the Web API, OData, or Azure Synapse Link for volume.
    Data entities in Finance and OperationsF&O exposes data entities rather than raw tables, through the Data Management Framework — which is also how data goes back in.
    GUID keysRecords are keyed by GUID. As with any system that generates its own keys, they mean nothing in a target and relationships must be rebuilt through a cross-reference.
    Option sets and choice fieldsCoded values validate against option sets defined in the model, so those definitions are extracted as reference data.

    Source-to-target mapping

    A mapping workbook carries every field in scope from its Microsoft Dynamics 365 source through its transformation rule to the Salesforce target object and field. It is reviewed and approved with the business before the production migration, and applied identically in every cycle so a decision made once is not re-made under cutover pressure.

    Transformation challenges on this route

    The differences between Microsoft Dynamics 365 and Salesforce that create most of the work.

    GUIDs to Salesforce Ids

    Dataverse GUIDs mean nothing in Salesforce. The cross-reference map is built as each object loads and consumed by everything referencing it.

    External Id fields for upsert

    Carrying the Dataverse GUID into a Salesforce External Id field makes reloads idempotent across cycles.

    Option sets to picklists and RecordTypes

    Where Dynamics used option sets and forms, Salesforce expresses the same conditionality through RecordType and picklist dependency — which changes what a valid value is.

    Master-detail versus lookup

    Salesforce's two relationship types behave differently on deletion and ownership and must be chosen deliberately, not defaulted.

    Activities and their parents

    Tasks, appointments and emails resolve to parents that must already exist.

    How Salesforce accepts the data

    Load order is part of the design, not an implementation detail.

    1. 1Reference and setup data firstTerritories, currencies, price books, products and picklist values. Everything downstream resolves against these.
    2. 2Accounts, then contactsAccounts head the customer hierarchy. Parent-child account relationships resolve in a second pass, because a parent has no target key until it has itself been created.
    3. 3Use External Id fields for upsertLoading against an External Id makes a reload an update rather than a duplicate, which is what makes multiple migration cycles survivable.
    4. 4Leads with conversion state intactSo converted leads are not re-presented to sales as open work on day one.
    5. 5Opportunities and line itemsResolved against account and owning user. Stage and close date drive forecasting, so their mapping is validated rather than assumed.
    6. 6Activities, cases and historyEach resolving to a parent that now exists.
    7. 7Ownership and sharingOwner drives visibility. Where a source owner has no counterpart, the fallback is an explicit decision rather than a default.

    Validation and reconciliation

    Validation before load

    Mandatory fields, referential integrity, format checks, business-rule validation and duplicate detection run on the prepared data, so problems surface as reportable exceptions rather than as failed loads in Salesforce.

    Reconciliation after load

    Source counts, transformed counts, rejected records and target counts, with control totals where the data supports them. Every discrepancy is categorised so the migration is approved on evidence rather than assertion.

    Migration cycles

    The pipeline is run end to end more than once before anything touches production. A typical structure is a first rehearsal that surfaces the bulk of mapping and data-quality corrections, a second that applies them and demonstrates production readiness, and the production cutover itself. How many cycles a programme needs depends on data quality and scope, which is established during discovery.

    1. 1Mock / PPR 1First full extract, transform, load, reconcile and exception analysis. Expect the largest correction list here.
    2. 2Mock / PPR 2Corrections applied, re-extract, re-run. Intended to closely replicate the production migration.
    3. 3Production cutoverFinal extract, data freeze, load, reconciliation, business validation and sign-off.

    Common risks on this route

    API limits discovered under load

    Both Dataverse extraction and Salesforce Bulk API are governed; test volumes in the first cycle.

    Case-sensitivity on the 15-character Id

    Standardise on the 18-character form throughout.

    Ownership fallback undefined

    Owner drives visibility; unmapped owners must not default silently.

    Related enterprise migration experience

    We have not published a case study for this exact route. These delivered projects are the closest relevant experience.

    Planning this migration?

    Tell us your source system, target platform, modules, data volumes and timeline. We can discuss the closest relevant migration experience and the recommended approach.