CRM migration

Migrate from Dynamics 365 Field Service to Salesforce Sales Cloud

Field-level mapping, validation, and rollback between Dynamics 365 Field Service and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.

Dynamics 365 Field Service logo

Dynamics 365 Field Service

Source

Salesforce Sales Cloud

Destination

Salesforce Sales Cloud logo

Compatibility

100%

14 of 14

objects map 1:1 between Dynamics 365 Field Service and Salesforce Sales Cloud.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Microsoft Dynamics 365 Field Service is built on the Dataverse (Common Data Model) and ships with dedicated field-service entities: Bookable Resources, Work Orders, Incident Types, Customer Assets, and Resource Scheduling Optimization. Salesforce Sales Cloud ships with standard CRM objects (Account, Contact, Lead, Opportunity) and adds Field Service Lightning as an optional managed package with Service Appointments, Assigned Resources, and Service Territories. The migration carries everything Dynamics stores natively — accounts, contacts, work orders, assets, products, custom entities, and activity logs — into Salesforce's Account/Contact/Opportunity model plus any Field Service Lightning objects your org requires. The harder problems are mapping Dynamics Work Order headers and line items to Salesforce Service Appointments, preserving Bookable Resource assignments as Assigned Resources, translating Incident Type pick-lists into Salesforce custom pick-list fields, and getting the Dataverse-to-Salesforce lookup chain right before foreign-key resolution runs. FlitStack's migration engine reads Dynamics via the Dataverse Web API, transforms records through a staged pipeline, and loads into Salesforce using Bulk API 2.0 — handling AccountId lookups, OwnerId user-resolution by email, and timestamp preservation across both platforms. Workflows, Power Automate flows, and Resource Scheduling Optimization rules do not migrate and must be rebuilt in Salesforce Flow or FSL Dispatch.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Dynamics 365 Field Service logo

Dynamics 365 Field Service

What's pushing teams away

  • Implementation requires certified Microsoft partners for anything beyond basic configuration; simple customizations that competitors handle in-house demand developer resources, inflating total cost of ownership.
  • Per-user licensing at $105/month compounds quickly—technicians, dispatchers, supervisors, and parts staff each require seats, and the true headcount often exceeds initial estimates.
  • Performance degrades when Work Order histories grow large; pages load slowly and offline sync timeouts occur in datasets exceeding tens of thousands of records without careful FetchXML tuning.
  • Change management and staff training are underestimated; technicians accustomed to simple mobile tools struggle with the learning curve, leading to low adoption and shadow systems.
  • The platform integrates poorly with non-Microsoft ERPs out of the box; customers using Business Central face custom integration work, and those on other ERP systems must build middleware.

Choosing

Salesforce Sales Cloud logo

Salesforce Sales Cloud

What's pulling them in

  • The AppExchange marketplace with 5,000+ prebuilt apps gives enterprises integrations for nearly every business workflow without custom development.
  • Native Einstein AI for lead scoring, opportunity insights, and predictive forecasting adds intelligence without a separate platform purchase.
  • Territory management, multi-currency support, and advanced forecasting satisfy the needs of complex B2B sales organizations with structured revenue teams.
  • Slack, Tableau, and CPQ are deeply integrated into the core platform, keeping the sales stack unified for teams already in the Salesforce ecosystem.
  • Organizations with a large, established Salesforce implementation choose it because switching costs — integrations, custom code, trained admins — are prohibitive.

Object mapping

How Dynamics 365 Field Service objects map to Salesforce Sales Cloud

Each row shows how a Dynamics 365 Field Service 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 Field Service

Account

maps to

Salesforce Sales Cloud

Account

1:1
Fully supported

Direct map. Dynamics Account (account) maps to Salesforce Account. Dataverse accountid becomes Salesforce Id. Dynamics parent-account lookups (parentaccountid) map to Salesforce ParentId. Multi-address records: Dynamics address1_line1, address1_city map to Salesforce BillingAddress fields. Address type flags (address2_type = shipping) require custom Salesforce address record or custom field for parity.

Dynamics 365 Field Service

Contact

maps to

Salesforce Sales Cloud

Contact

1:1
Fully supported

Direct map. Dynamics Contact (contact) maps to Salesforce Contact. Email address (emailaddress1) maps to Contact.Email. Primary contact role on the Dynamics Account is preserved as the primary Contact on the Salesforce Account via AccountId lookup. Secondary contact roles stored on Account can be migrated as AccountContactRelation records in Salesforce.

Dynamics 365 Field Service

Lead

maps to

Salesforce Sales Cloud

Lead

1:1
Fully supported

Direct map for pre-service leads. Dynamics leads (lead) map to Salesforce Lead when the record has not yet converted. Dynamics lead status (leadsource, statecode) maps to Salesforce Lead Status pick-list values. Note that Dynamics leads that have already converted to Account/Contact in the source should route to Salesforce Account/Contact directly to avoid duplicate records.

Dynamics 365 Field Service

msdyn_workorder

maps to

Salesforce Sales Cloud

ServiceAppointment / WorkOrder (FSL)

1:1
Fully supported

Dynamics Work Order maps to Salesforce Field Service Lightning ServiceAppointment as the primary record, with WorkOrder as a related entity if your org uses the legacy FSL object model. msdyn_WorkOrderId becomes the ServiceAppointment Id. Work order priority, incident type, and system status are preserved as custom pick-list fields (WorkOrderPriority__c, IncidentType__c, SystemStatus__c) since FSL does not have a native 1:1 field for every Dynamics property.

Dynamics 365 Field Service

msdyn_workorderservicetask

maps to

Salesforce Sales Cloud

ServiceAppointment / WorkOrderLineItem

1:1
Fully supported

Dynamics Work Order Service Tasks (line-level task entries on a work order) map to Salesforce WorkOrderLineItem if your destination uses the FSL WorkOrder object, or are attached as Tasks to the ServiceAppointment if FSL is not enabled. Task type, duration, and status are mapped field-by-field. msdyn_TaskType maps to WorkOrderLineItem.SubLineType or a custom TaskType__c pick-list.

Dynamics 365 Field Service

msdyn_bookableresource

maps to

Salesforce Sales Cloud

ServiceResource

1:1
Fully supported

Dynamics Bookable Resources (technicians, crews, equipment) map to Salesforce ServiceResource. Resource type (msdyn_resourcetype: User, Contact, Account) determines whether ServiceResource.RelatedRecordId points to a Salesforce User or Contact. Crew resources and equipment types require custom fields or a separate ServiceResource record with ResourceType = 'Equipment'.

Dynamics 365 Field Service

msdyn_bookingsetupheader

maps to

Salesforce Sales Cloud

ServiceTerritory / OperatingHours

1:1
Fully supported

Dynamics Resource Territories (msdyn_bookingsetupheader and msdyn_territory) map to Salesforce ServiceTerritory and OperatingHours. Territory address and timezone data become ServiceTerritory.Address and OperatingHours.TimeZone fields respectively. Multi-territory hierarchies in Dynamics — including parent/child territory relationships — map to Salesforce ServiceTerritory.ParentTerritoryId lookup, preserving the geographic service area structure. Service dispatchers use these territory mappings in the FSL Dispatch Console to assign work orders to resources operating within specific geographic boundaries.

Dynamics 365 Field Service

msdyn_customerasset

maps to

Salesforce Sales Cloud

Asset

1:1
Fully supported

Dynamics Customer Assets (msdyn_customerasset) map directly to Salesforce Asset. The asset's parent Account is resolved via msdyn_AccountId → Asset.AccountId lookup. msdyn_ProductId links to the Salesforce Product2 record. Asset serial number, install date, and status fields map directly. Custom Dataverse columns on the asset entity become Asset__c custom fields.

Dynamics 365 Field Service

Product (msdyn_product)

maps to

Salesforce Sales Cloud

Product2

1:1
Fully supported

Dynamics products (msdyn_product) map to Salesforce Product2. Product name, number, and stock-keeping unit (SKU) map directly. Product pricing in Dynamics — msdyn_unitamount and msdyn_pricelist — requires mapping to Salesforce PricebookEntry: the standard pricebook must be created first, then price entries added per product. Currency fields in Dynamics map to Salesforce CurrencyIsoCode.

Dynamics 365 Field Service

msdyn_incidenttype

maps to

Salesforce Sales Cloud

Custom Object / Custom Field

1:1
Fully supported

Dynamics Incident Types (msdyn_incidenttype) define the type of service task associated with a work order and carry a pre-filled set of tasks, labor requirements, and estimated duration. Salesforce has no native Incident Type object. We migrate each unique Incident Type name as a custom pick-list value on the ServiceAppointment or WorkOrder object (IncidentType__c). Associated tasks and labor rules are exported as a reference document for manual rebuild in FSL Templates.

Dynamics 365 Field Service

msdyn_quoteline (if present)

maps to

Salesforce Sales Cloud

QuoteLineItem / OpportunityLineItem

1:1
Fully supported

Dynamics 365 Sales-linked quote lines map to Salesforce QuoteLineItem or OpportunityLineItem depending on where the opportunity sits. Dynamics product quantity, unit price, and discount percentage map directly. Dynamics manual discount flags map to Salesforce IsDiscounted = true. Line-item sequencing is preserved in Salesforce SortOrder.

Dynamics 365 Field Service

msdyn_fieldservicepricelistitem

maps to

Salesforce Sales Cloud

PricebookEntry

1:1
Fully supported

Dynamics Field Service Price List Items carry service-specific pricing (labor rates, trip charges, parts markups) that map to Salesforce PricebookEntry records. Each price list in Dynamics becomes a Salesforce Pricebook2 record, with Price List Items becoming PricebookEntry entries tied to Product2. Currency conversions are applied at migration time using the configured exchange rate.

Dynamics 365 Field Service

Custom Dataverse Entity

maps to

Salesforce Sales Cloud

Custom Object (__c)

1:1
Fully supported

Any custom Dataverse entities your Dynamics org has created (beyond the standard Field Service entities) map 1:1 to Salesforce custom objects with the __c suffix. N:N relationships in Dataverse (e.g., a custom junction table) map to Salesforce junction objects or many-to-many relationship objects. Each custom entity is evaluated for lookup integrity before migration runs.

Dynamics 365 Field Service

msdyn_workordernotes (notes)

maps to

Salesforce Sales Cloud

Note / ContentNote

1:1
Fully supported

Dynamics work order notes and email attachments map to Salesforce Notes (ContentNote / ContentDocumentLink) attached to the corresponding ServiceAppointment or WorkOrder record. Inline images in notes are downloaded and rehosted as Salesforce Files. File size limits per Salesforce (default 25MB per file) apply.

Gotchas + challenges

What specifically takes care here

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 Field Service logo

Dynamics 365 Field Service gotchas

High

Dataverse service protection API limits throttle bulk exports

Medium

Offline profile FetchXML tuning is source-environment-specific

Medium

Project Operations integration has bidirectional sync limitations

Medium

Copilot add-on credits do not migrate and reset at zero

Low

File attachments stored in SharePoint require separate file migration

Salesforce Sales Cloud logo

Salesforce Sales Cloud gotchas

High

Workflow Rules and Process Builder are retired

High

Bulk API batch quota exhaustion during large imports

Medium

Storage overage billing is non-obvious

Medium

Account-Contact many-to-many relationship mapping

Low

Territory and team member import ordering dependencies

Pair-specific challenges

  • Dynamics Work Orders require FSL to be enabled before ServiceAppointment records can use the full FSL data model

    Dynamics 365 Field Service stores operational records in Dataverse entities (msdyn_workorder, msdyn_bookableresource, msdyn_workorderservicetask) that map most cleanly to Salesforce Field Service Lightning objects. If your Salesforce org does not have FSL enabled and licensed, those records fall back to Salesforce custom objects or the base ServiceAppointment object without FSL fields — which means msdyn_scheduletype, msdyn_bumpinstance, and other FSL-specific properties cannot land in their native fields and must be stored as custom fields. We surface this before migration begins and deliver a pre-flight FSL readiness checklist so your Salesforce admin can enable the managed package before the data migration runs.

  • Dataverse-to-Salesforce lookup chaining requires a strict entity load order that differs from Dynamics' flexible entity model

    Dynamics 365 Field Service allows Dataverse entities to reference each other in any order at write time — Dynamics resolves lookups asynchronously. Salesforce requires foreign keys to exist at insert time: AccountId on Contact must reference an existing Salesforce Account Id, and ServiceTerritoryId on ServiceAppointment must reference an existing ServiceTerritory. FlitStack sequences the migration in five passes (Accounts → Assets/Products → ServiceTerritories → Bookable Resources → Work Orders → Service Appointments) so that every lookup resolves correctly. Circular references — for example, a work order referencing a primary contact whose account also references the contact — are flagged and broken by explicit rule (contact becomes Account Contact Relation rather than primary AccountId).

  • Resource Scheduling Optimization rules have no Salesforce equivalent and must be rebuilt

    Dynamics 365 Field Service ships with Resource Scheduling Optimization (RSO) — a rules engine that evaluates work order requirements, resource skills, geographic territory, and time windows to generate optimal booking schedules. Those optimization rules live in Dynamics as configuration data, not as records. Salesforce's FSL Optimization Service uses a different constraint model (FSL Optimization Workbench, not a pick-list of rules). RSO scheduling rules, skill-match priorities, and geographic optimization parameters must be reconfigured in Salesforce FSL Dispatch after migration. We export the full RSO rule configuration as a structured reference document for your FSL admin.

  • Crew and Equipment resource types in Dynamics require custom Salesforce ServiceResource configuration

    Dynamics 365 Field Service Bookable Resources support four resource types: User, Contact, Crew, and Equipment — each modeled as a single msdyn_bookableresource entity with a type flag. Salesforce ServiceResource.ResourceType supports 'Technician', 'Equipment', and 'Location' but has no native Crew concept. We handle this by mapping User and Contact types directly and creating separate ServiceResource records for equipment (ResourceType = 'Equipment'). Crew resources from Dynamics require either multiple ServiceResource records (one per crew member linked via CrewId — a Salesforce FSL custom field your admin configures) or a custom junction object. This decision is surfaced in the pre-migration schema plan.

  • Custom Dataverse columns that hold active connections (integration lookups, connection entities) break in Salesforce without cleanup

    Dynamics 365 CE supports connection entities (connection) that model informal relationships between records — for example, a technician's relationship to a customer site beyond the formal work order. Salesforce has no equivalent native connection object. During migration, we surface all active Dynamics connection records and either map them to Salesforce Account Contact Relationships (for person-to-account connections) or preserve them in a custom Connection__c junction object for reference. Connections that reference external systems (URL fields, integration IDs pointing to Azure, IoT hubs, or third-party scheduling tools) are preserved as read-only custom fields — their functional behavior requires rebuilding in Salesforce.

Migration approach

Six steps for a successful Dynamics 365 Field Service to Salesforce Sales Cloud data migration

  1. Inventory Dynamics entities and deliver a pre-flight schema plan

    FlitStack AI connects to your Dynamics 365 instance via the Dataverse Web API and inventories all entities in use — standard Field Service entities (msdyn_workorder, msdyn_bookableresource, msdyn_customerasset, msdyn_territory) plus every custom Dataverse table your org has created. We generate a schema plan that identifies: which entities have custom columns, which lookups point to custom entities, which Dataverse options sets need Salesforce custom pick-lists, and whether your Salesforce org needs Field Service Lightning enabled before data lands. This plan is reviewed with your admin before any data moves.

  2. Create Salesforce schema and resolve user accounts by email

    Salesforce custom fields (__c suffix), custom pick-lists for Dynamics options sets (msdyn_priority, msdyn_systemstatus, msdyn_resourcetype), and custom objects for Dataverse entities with no Salesforce equivalent are created from the schema plan. Simultaneously, every Dynamics user and contact who owns records is matched against Salesforce users by email address. Unmatched owners are flagged — your team either provisions Salesforce user accounts for them or designates a fallback owner before the migration pass. No record is loaded without a resolved OwnerId.

  3. Run sequenced migration passes: master data first, then transactional records

    The migration runs in a staged sequence: (1) Accounts and Assets — because they are lookup targets for everything else; (2) Products and Price List Items — to populate Pricebook2 and PricebookEntry before work orders that carry pricing; (3) Service Territories and Operating Hours — required for ServiceAppointment.ServiceTerritoryId; (4) Bookable Resources mapped to ServiceResource — required for AssignedResource lookups; (5) Work Orders mapped to ServiceAppointments — with FSL fields populated only if FSL is confirmed enabled; (6) Work Order Service Tasks mapped to WorkOrderLineItems; (7) Activities and Notes attached to their parent records. Each pass validates foreign-key integrity before the next pass starts.

  4. Execute sample migration with field-level diff and owner-resolution audit

    A representative slice of records — typically 100–500 records spanning accounts, contacts, work orders, service appointments, and a few activities — migrates first. We generate a field-level diff between the source Dynamics record and the destination Salesforce record so you can verify: that msdyn_priority mapped to ServiceAppointment.Priority correctly, that msdyn_serviceterritory resolved to ServiceTerritoryId, that Bookable Resource types mapped to the correct ResourceType value, and that timestamp fields (ScheduledStartTime, ScheduledEndTime, ActualStartTime) reflect the original Dynamics values. The owner-resolution audit log is included in the diff so you can confirm every record landed with the expected owner.

  5. Full migration run with delta-pickup window and audit log

    The full migration runs against Salesforce using Bulk API 2.0 for throughput. A delta-pickup window (typically 24–48 hours) opens at the point of go-live — any Dynamics records modified or created during the cutover are captured in a second migration pass. FlitStack maintains a full audit log of every insert, update, and error. If reconciliation identifies records that failed to migrate or landed with unexpected values, one-click rollback reverts the Salesforce org to its pre-migration state so the migration can be re-run with corrected mapping. RSO rule configuration, Power Automate flows, and FSL scheduling templates are exported as structured JSON and PDF documents for your admin to rebuild in Salesforce Flow and FSL Dispatch.

Platform deep dives

Context on both ends of the pair

Dynamics 365 Field Service logo

Dynamics 365 Field Service

Source

Strengths

  • Intelligent schedule board with multi-constraint optimization (skills, location, SLA, travel time) reduces manual dispatch effort on large technician fleets.
  • IoT integration via Connected Field Service enables proactive maintenance alerts that auto-create Work Orders before equipment fails.
  • Native mobile app with robust offline mode allows technicians to work disconnected and sync changes when connectivity returns.
  • Deep Dataverse foundation means seamless data sharing with Microsoft Dynamics 365 Sales , Customer Service, and Power Platform apps without middleware.
  • Microsoft's regular release cadence keeps the platform current with AI features, Copilot assistance, and updated compliance certifications.

Weaknesses

  • Per-user licensing at $105/month creates predictable cost inflation as technician headcount grows, with no meaningful volume discounts for large fleets.
  • Implementation and ongoing customization require certified Microsoft partners or developer-staffed IT teams, limiting agility for mid-market organizations.
  • Performance degrades in large datasets without careful FetchXML optimization; offline sync timeouts are common without proactive query tuning.
  • Integration with non-Microsoft ERP systems (SAP, Oracle, NetSuite) requires custom middleware or third-party connectors that add cost and maintenance overhead.
  • Schema changes between release waves can break custom field references, requiring re-validation of data mappings after each major update.
Salesforce Sales Cloud logo

Salesforce Sales Cloud

Destination

Strengths

  • Largest enterprise app ecosystem in CRM with 5,000+ AppExchange integrations covering nearly every vertical workflow.
  • Native Einstein AI delivers lead scoring, opportunity insights, and predictive forecasting without a third-party layer.
  • Advanced territory management, multi-currency, and flexible forecasting satisfy complex B2B revenue structures.
  • Deep platform extensibility: Custom Objects, Apex, Flow, and the Metadata API allow full schema customization.
  • Well-documented REST API, Bulk API, and Composite API with published rate limits for programmatic migration.

Weaknesses

  • Pricing model is layered and opaque in practice: per-seat fees plus storage overages, add-on subscriptions, and annual uplifts compound to 30–40% above sticker price.
  • Workflow Rules and Process Builder are deprecated, forcing all orgs onto Salesforce Flow — a migration task that catches many teams by surprise.
  • Steep administrative complexity: meaningful configuration requires a dedicated Salesforce admin or consultant.
  • API rate limits are edition-gated (100k/day base for Enterprise) and easily exhausted by large historical imports without throttling.
  • Data export is exportable via Data Loader but preserving relationship integrity across 30+ objects requires careful ETL sequencing.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Dynamics 365 Field Service and Salesforce Sales Cloud.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Dynamics 365 Field Service: Service protection limits enforced per org; specific numeric thresholds are not publicly documented by Microsoft and vary by workload type.

  • Data volume sensitivity

    A

    Dynamics 365 Field Service exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Dynamics 365 Field Service to Salesforce Sales Cloud migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Dynamics 365 Field Service to Salesforce Sales Cloud data migrations

Answers to the questions buyers ask most during Dynamics 365 Field Service to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Dynamics 365 Field Service to Salesforce Sales Cloud migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Dynamics 365 Field Service to Salesforce migrations complete in 48–72 hours for under 50,000 records. Larger deployments with 500k+ records, extensive custom Dataverse tables, or FSL service territory hierarchies extend to 5–10 days. The longest single step is the pre-flight schema plan — creating Salesforce custom fields for Dynamics options sets and confirming FSL is enabled — which typically runs 1–3 days before any data moves.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Dynamics 365 Field Service.
Land in Salesforce Sales Cloud, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day