CRM migration
Field-level mapping, validation, and rollback between Salesforce Field Service and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
Salesforce Field Service
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
10 of 11
objects map 1:1 between Salesforce Field Service and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
72–120 hours
Overview
Salesforce Field Service organizes field operations around WorkOrders, ServiceAppointments, ServiceResources, Skills, and Assets — a schema purpose-built for dispatch, mobile technician workflows, and real-time scheduling optimization. Dynamics 365 Sales organizes data around Accounts, Contacts, Leads, Opportunities, and Cases — a model optimized for sales pipeline management and customer relationship tracking. When migrating to Dynamics 365, WorkOrders map to Cases (for service-type records) or Opportunities (for contract/billable project records) depending on your service model. ServiceAppointments translate to Activities (tasks and appointments) linked to the parent Case or Opportunity. Technician and skill data from ServiceResource and SkillRequirement migrate as custom fields and related tables in Dynamics 365. FlitStack AI extracts Salesforce data via the REST and Bulk APIs, transforms the schema to match Dynamics 365's table structure in Dataverse, and loads via the Dynamics Web API. We preserve original timestamps, owner assignments, and skill-to-resource relationships. Automations, Flow triggers, and Omni-Channel routing from Salesforce Field Service do not migrate — those require manual rebuild in Dynamics 365 Power Automate and the Customer Service hub.
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.
Source platform
Salesforce Field Service platform overview
Scorecard, SWOT, gotchas, and pricing for Salesforce Field Service.
Destination platform
Microsoft Dynamics 365 Sales platform overview
Scorecard, SWOT, gotchas, and pricing for Microsoft Dynamics 365 Sales .
Data migration guide
The complete Microsoft Dynamics 365 Sales migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
Microsoft Dynamics 365 Sales migration checklist
Pre- and post-cutover tasks for moving onto Microsoft Dynamics 365 Sales .
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Salesforce Field Service object lands in Microsoft Dynamics 365 Sales , including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Salesforce Field Service
WorkOrder
Microsoft Dynamics 365 Sales
Case
1:1WorkOrder maps directly to Dynamics 365 Case when the field service record represents a reactive service call, maintenance ticket, or support incident. We map WorkOrder.Subject to Case.Title, WorkOrder.Status to Case.StatusCode, and WorkOrder.Priority to Case.Priority. For contract-based or project-type work orders, we map to Opportunity instead.
Salesforce Field Service
WorkOrder (Billable/Contract type)
Microsoft Dynamics 365 Sales
Opportunity
1:manyWorkOrder records where IsClosed = false and WorkType indicates billable project or contract work split to Dynamics 365 Opportunity. The Opportunity.Name derives from WorkOrder.WorkOrderNumber + Account.Name. Amount and line items map to Opportunity.Amount and OpportunityProduct records. This split requires a WorkType-based value-mapping rule defined before migration.
Salesforce Field Service
ServiceAppointment
Microsoft Dynamics 365 Sales
Task / Appointment
1:1ServiceAppointments translate to Dynamics 365 Activities — completed visits become Tasks with Subject, Description, and actual duration; scheduled future appointments become Appointments with Start/End times preserved from the source Schedulesapointment.ScheduledStart and ScheduledEnd fields. Parent link maps to the migrated Case or Opportunity record ID.
Salesforce Field Service
ServiceResource
Microsoft Dynamics 365 Sales
SystemUser
1:1Salesforce ServiceResources (technicians, dispatchers, crews) map to Dynamics 365 SystemUser records. We match by email to resolve existing Dynamics 365 users. ServiceResource.IsActive determines SystemUser.IsDisabled. Skill certifications and territory assignments from related SkillRequirement and ServiceTerritory records surface as custom fields on the SystemUser or related custom entities in Dataverse.
Salesforce Field Service
SkillRequirement
Microsoft Dynamics 365 Sales
Custom Skill Entity
1:1SkillRequirement stores skill-to-resource mappings with skill level and certification status. Dynamics 365 lacks a native SkillRequirement equivalent in core Sales — we create a custom SkillAssignment table in Dataverse linked to SystemUser. Each skill migrates as a skill name text value with a related proficiency level field. Organizations using Field Service module can use its native skill entities instead.
Salesforce Field Service
Asset
Microsoft Dynamics 365 Sales
Asset (Field Service) / Custom Field on Account
1:1Salesforce Assets linked to Accounts migrate to the Dynamics 365 Field Service Asset entity when the Field Service add-in is licensed. For core Sales migrations without Field Service, Assets migrate as a custom Asset table or as structured custom fields on the Account record (serial number, installation date, warranty expiration). Parent-child asset hierarchies map to Asset.ParentAssetId where the destination supports it.
Salesforce Field Service
WorkOrderLineItem
Microsoft Dynamics 365 Sales
OpportunityProduct / Case (Incident)
1:1WorkOrderLineItem maps to OpportunityProduct when the parent WorkOrder split to Opportunity. Each line item's Product2 reference migrates to Product in Dynamics 365. Quantity, unit price, and line cost translate to Quantity, UnitPrice, and manual discount or tax fields. Non-billable parts on service cases map as Case (Incident) line notes or custom fields.
Salesforce Field Service
ServiceTerritory
Microsoft Dynamics 365 Sales
Territory / Custom Region Table
1:1ServiceTerritory defines geographic zones for dispatch and scheduling. In Dynamics 365, Territory management exists in Sales Enterprise. We map each ServiceTerritory.Name to a Territory record and link ServiceResources with their assigned territories via a custom junction object. If Dynamics 365 Field Service is active, scheduling territories map natively to the scheduling assistant.
Salesforce Field Service
Entitlement
Microsoft Dynamics 365 Sales
Contract
1:1Salesforce Entitlement records define service level agreements, active periods, and covered assets. We map Entitlement.Name to Contract.Title, Entitlement.StartDate to Contract.StartDate, and map covered Assets to Contract line items or custom fields. SLA milestones migrate as custom fields on the Contract record since Dynamics 365 SLA tracking is part of the Customer Service hub module.
Salesforce Field Service
User (Salesforce Owner)
Microsoft Dynamics 365 Sales
SystemUser
1:1Salesforce User records who own WorkOrders, ServiceAppointments, and Assets resolve to Dynamics 365 SystemUser by email match. Unmatched owners receive a fallback assignment to a designated migration admin user and are flagged in the reconciliation report for manual reassignment in Dynamics 365.
Salesforce Field Service
Account
Microsoft Dynamics 365 Sales
Account
1:1Salesforce Account maps 1:1 to Dynamics 365 Account. Account.Name, Account.Phone, Account.BillingAddress, and Account.Industry transfer directly. Multi-address configurations (Shipping vs Billing) collapse to the primary address with secondary stored as a custom field since Dynamics 365 core Sales uses a single address block unless the Field Service add-in is active.
| Salesforce Field Service | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| WorkOrder | Case1:1 | Fully supported | |
| WorkOrder (Billable/Contract type) | Opportunity1:many | Fully supported | |
| ServiceAppointment | Task / Appointment1:1 | Fully supported | |
| ServiceResource | SystemUser1:1 | Fully supported | |
| SkillRequirement | Custom Skill Entity1:1 | Fully supported | |
| Asset | Asset (Field Service) / Custom Field on Account1:1 | Fully supported | |
| WorkOrderLineItem | OpportunityProduct / Case (Incident)1:1 | Fully supported | |
| ServiceTerritory | Territory / Custom Region Table1:1 | Fully supported | |
| Entitlement | Contract1:1 | Fully supported | |
| User (Salesforce Owner) | SystemUser1:1 | Fully supported | |
| Account | Account1: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.
Salesforce Field Service gotchas
250-record batch limit for Enhanced Scheduling optimization
Process Builder workflows do not migrate—must be rebuilt in Flow Builder
API rate limits vary by edition and are easy to exhaust during bulk migration
Storage overages at $125/GB inflate migration data costs
Custom fields and lookups require explicit field-level mapping
Microsoft Dynamics 365 Sales gotchas
Professional tier 15-table custom table limit blocks migrations
October 2024 pricing increase applies at renewal for all customers
Custom fields must be created in the UI before API writes
Power Platform request limits apply to bulk migrations
Activity records orphaned to inactive owners fail silently
Pair-specific challenges
Migration approach
Conduct WorkOrder and WorkType inventory
Before extraction, we inventory all WorkOrder records and their WorkType classifications to determine the split ratio between Case and Opportunity destinations. We generate a WorkType distribution report showing the count of reactive tickets, contract work orders, and blank WorkType records. Blank records are flagged for your team to classify before migration — unclassified records default to Case mapping but are flagged in the post-migration reconciliation report. This step also inventories Asset hierarchies, ServiceTerritory boundaries, and SkillRequirement scope so the full schema transformation plan is complete before any data moves.
Stand up Dynamics 365 custom tables and field schema
We create the custom Dataverse tables required for the migration: the SkillAssignment table (skill name, proficiency, technician link), a WorkType mapping table, and any custom fields on Case, Opportunity, and Account that are needed to receive Salesforce data. If your Dynamics 365 includes the Field Service add-in, we validate that native Asset and Territory entities are configured. All custom table and field creation is documented in a schema setup checklist so your Dynamics 365 admin can review and approve before data lands.
Extract Salesforce data via REST and Bulk APIs
We extract Salesforce Field Service data using the Salesforce REST API for real-time objects (WorkOrder, ServiceAppointment, ServiceResource, Asset) and the Bulk API 2.0 for high-volume records (historical ServiceAppointments and WorkOrder history). Extraction is read-only — no records are modified in Salesforce during this phase. We apply pagination and batch sizing to stay within Salesforce's daily API request limits (50,000 for standard REST, higher for Bulk). All extraction batches are logged with record counts and API call consumption so you can verify scope coverage.
Transform and map data to Dynamics 365 schema
Extracted records pass through a transformation pipeline that applies value mappings (WorkOrder status to Case statuscode), owner resolution by email match to Dynamics 365 SystemUser, and WorkType-based routing for Case vs. Opportunity split. Asset ParentAssetId references are resolved against the extracted parent records — circular references and missing parents are flagged in a resolution report. SkillRequirement records are aggregated into the custom SkillAssignment table. All transformations are logged at the field level so you can audit the mapping logic before the destination load begins.
Load to Dynamics 365 with delta-pickup window
Transformed records load to Dynamics 365 via the Dataverse Web API (OData v4). We sequence loads to satisfy foreign key dependencies: Accounts first, then Contacts, then Cases and Opportunities, then ServiceAppointments as Activities. A delta-pickup window (48–72 hours) runs concurrently, capturing any WorkOrders or ServiceAppointments created or modified in Salesforce during the cutover period. Audit logs capture every insert operation. One-click rollback is available if the post-load reconciliation reveals data integrity issues.
Run field-level diff and reconciliation
After the full migration load, we generate a field-level diff comparing source and destination record counts, mapped values, and null-field rates. We specifically surface WorkType split accuracy, SkillAssignment coverage, and Asset hierarchy resolution. Owner resolution rates (percentage of Salesforce owners matched to Dynamics 365 SystemUser by email) are reported. Any records that failed to load or loaded with null required fields appear in an exception report. This reconciliation report is the go/no-go document for switching user logins to Dynamics 365.
Platform deep dives
Salesforce Field Service
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Salesforce Field Service and Microsoft Dynamics 365 Sales .
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Salesforce Field Service and Microsoft Dynamics 365 Sales .
Object compatibility
All 8 core objects map 1:1 between Salesforce Field Service and Microsoft Dynamics 365 Sales .
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
Salesforce Field Service: Per-org daily API limit starts at 100,000 requests / 24 hours for Enterprise Edition and scales with licenses purchased. Additional API calls can be purchased in 200-10,000 increments. Bulk API and Bulk API 2.0 share an allocation of 15,000 batch submissions per 24 hours. HTTP 429 returned when rate-limited..
Data volume sensitivity
Salesforce Field Service 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 Salesforce Field Service to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your Salesforce Field Service to Microsoft Dynamics 365 Sales migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Salesforce Field Service
Other ways to arrive at Microsoft Dynamics 365 Sales
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.