CRM migration

Migrate from Salesforce Field Service to Microsoft Dynamics 365 Sales

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 logo

Salesforce Field Service

Source

Microsoft Dynamics 365 Sales

Destination

Microsoft Dynamics 365 Sales  logo

Compatibility

91%

10 of 11

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

Complexity

BStandard

Timeline

72–120 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Salesforce Field Service logo

Salesforce Field Service

What's pushing teams away

  • Pricing model accumulates hidden costs—storage overages at $125/GB, API throttling during high-volume periods, and $2 per Agentforce conversation add up beyond the base seat license.
  • Complexity of inherited implementations makes configuration tangles difficult to unwind, and lack of clear documentation makes it hard for new teams to understand what the system is actually doing.
  • Scheduling limits create friction at scale—250 records per Enhanced Scheduling optimization batch is insufficient for large service operations without additional tooling.
  • Integration depth becomes a dependency trap—organizations deeply embedded in Salesforce Field Service find switching costs prohibitively high even when frustrated with cost or complexity.

Choosing

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

What's pulling them in

  • Deep Microsoft 365, Teams, and Outlook integration makes Microsoft Dynamics 365 Sales a natural fit for Microsoft-first organizations already invested in that ecosystem
  • Sales Enterprise and Premium tiers offer unlimited custom tables and advanced AI-driven forecasting and predictive analytics not available in lower tiers
  • Professional tier pricing at $65 per user per month offers a lower entry cost than Salesforce for SMB teams with straightforward CRM needs
  • Flexible customization options allow businesses to build bespoke apps, tailor forms and views, and integrate with other Dynamics 365 modules
  • Microsoft Copilot AI tools are embedded directly into the sales workflow on Enterprise and Premium, automating routine tasks and providing deal intelligence

Object mapping

How Salesforce Field Service objects map to Microsoft Dynamics 365 Sales

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

maps to

Microsoft Dynamics 365 Sales

Case

1:1
Fully supported

WorkOrder 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)

maps to

Microsoft Dynamics 365 Sales

Opportunity

1:many
Fully supported

WorkOrder 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

maps to

Microsoft Dynamics 365 Sales

Task / Appointment

1:1
Fully supported

ServiceAppointments 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

maps to

Microsoft Dynamics 365 Sales

SystemUser

1:1
Fully supported

Salesforce 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

maps to

Microsoft Dynamics 365 Sales

Custom Skill Entity

1:1
Fully supported

SkillRequirement 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

maps to

Microsoft Dynamics 365 Sales

Asset (Field Service) / Custom Field on Account

1:1
Fully supported

Salesforce 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

maps to

Microsoft Dynamics 365 Sales

OpportunityProduct / Case (Incident)

1:1
Fully supported

WorkOrderLineItem 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

maps to

Microsoft Dynamics 365 Sales

Territory / Custom Region Table

1:1
Fully supported

ServiceTerritory 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

maps to

Microsoft Dynamics 365 Sales

Contract

1:1
Fully supported

Salesforce 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)

maps to

Microsoft Dynamics 365 Sales

SystemUser

1:1
Fully supported

Salesforce 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

maps to

Microsoft Dynamics 365 Sales

Account

1:1
Fully supported

Salesforce 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.

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.

Salesforce Field Service logo

Salesforce Field Service gotchas

High

250-record batch limit for Enhanced Scheduling optimization

High

Process Builder workflows do not migrate—must be rebuilt in Flow Builder

High

API rate limits vary by edition and are easy to exhaust during bulk migration

Medium

Storage overages at $125/GB inflate migration data costs

Medium

Custom fields and lookups require explicit field-level mapping

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales gotchas

High

Professional tier 15-table custom table limit blocks migrations

High

October 2024 pricing increase applies at renewal for all customers

Medium

Custom fields must be created in the UI before API writes

Medium

Power Platform request limits apply to bulk migrations

Medium

Activity records orphaned to inactive owners fail silently

Pair-specific challenges

  • WorkOrder-to-Case/Opportunity split requires pre-migration WorkType analysis

    Salesforce Field Service WorkOrders serve dual purposes: reactive service calls (billable or warranty) and contract/project work orders. Dynamics 365 has no single WorkOrder equivalent — reactive tickets map to Case, and billable project work orders map to Opportunity. If your Salesforce instance uses a single WorkOrder object for both types, we must implement a WorkType-based split rule before migration. Failing to define this rule results in all WorkOrders landing as Cases, losing the Opportunity pipeline visibility for contract renewals. We deliver a WorkType analysis report during discovery so the split logic is confirmed before extraction runs.

  • FSL SkillRequirement lacks native equivalent in core Dynamics 365 Sales

    Salesforce Field Service's SkillRequirement object stores skill name, proficiency level, and technician association — a three-part structure that supports certification tracking and scheduling optimization. Dynamics 365 core Sales has no native SkillRequirement entity; skills are typically stored in a custom Dataverse table or as fields on SystemUser. When migrating to Dynamics 365 Sales without the Field Service module, we create a custom SkillAssignment table with skill name, proficiency, and technician link. If you later add the Field Service add-in, the custom table is replaced with native skill entities — we document the migration path so the custom data is reusable.

  • Asset hierarchy mapping breaks when parent Assets have not yet migrated

    Salesforce Assets support parent-child hierarchies via the ParentAssetId self-referential field. When migrating assets, we must sequence loads so parent Assets insert before child Assets — otherwise the ParentAssetId foreign key in Dynamics 365 points to a non-existent record. We detect circular parent-child chains and flag them for manual resolution before the migration run. Organizations with deep asset hierarchies (more than 5 levels) require batch sequencing that adds 1–2 days to the migration timeline.

  • ServiceAppointment duration fields map to different Activity models in Dynamics 365

    Salesforce FSL ServiceAppointment stores both scheduled duration (ScheduledDurationMinutes) and actual duration (ActualDurationMinutes). Dynamics 365 Activities use separate fields for planned versus actual time — ScheduledStart/ScheduledEnd for planned and ActualDurationMinutes for actual elapsed time. If your Salesforce instance records only one duration field, we map it to both the scheduled and actual fields to preserve the data, but this may inflate apparent scheduling accuracy in Dynamics 365. We flag this mapping behavior in the field-level diff so you can validate before go-live.

  • Salesforce FSL user licensing does not map to Dynamics 365 Field Service licensing

    Salesforce Field Service pricing at $330–$380 per user per month includes Dispatcher Console, Technician Mobile, and scheduling optimization features. Dynamics 365 Field Service at $95 per user per month requires a base Sales Professional ($65) or Sales Enterprise ($105) license underneath. When migrating, each Salesforce Field Service user needs a minimum of Dynamics 365 Sales Professional plus Field Service attach. We surface this in the pre-migration license audit — organizations with 40+ technicians may see a significant per-user cost reduction but must account for the new base CRM license requirement.

Migration approach

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

Salesforce Field Service logo

Salesforce Field Service

Source

Strengths

  • Real-time technician location tracking and dispatch console with Gantt visualization for multi-technician schedule management.
  • Skill-based routing matches technician certifications to Work Order requirements automatically during scheduling optimization.
  • Deep integration with standard Salesforce CRM objects preserves context across field service, sales, and customer service teams.
  • Mobile app with offline capability lets field technicians update status, log parts, and capture signatures in low-connectivity environments.

Weaknesses

  • Per-seat licensing plus storage overages, API throttling charges, and Agentforce conversation fees create a total cost that significantly exceeds the base license price.
  • Inherited implementations with years of customizations, Process Builder flows, and AppExchange add-ons create tangled configurations that are difficult to migrate or audit.
  • API rate limits vary by edition and require careful monitoring—large data migrations can exhaust daily limits or concurrent call budgets mid-transfer.
  • Limited native export tooling means migrations typically require third-party tools, Data Loader configuration, or managed services partners to extract complete data.
Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

Destination

Strengths

  • Native integration with Microsoft 365, Teams, Outlook, and SharePoint for unified productivity workflow
  • Unlimited custom tables and complex workflows on Enterprise tier enable deep customization for complex sales processes
  • AI-driven predictive analytics and deal intelligence on Enterprise and Premium tiers help sales teams prioritize pipeline
  • Dataverse unified data layer provides a consistent API and data model across all Dynamics 365 and Power Platform apps
  • Strong security model with Field-Level Security and Record Ownership rules for governance-conscious enterprises

Weaknesses

  • Sales Professional tier caps custom tables at 15, creating a migration ceiling for highly customized SMB environments
  • October 2024 pricing increases of $15 per user across all tiers apply to existing customers upon renewal
  • Implementation typically requires costly certified partners, adding 30–50% to total project cost
  • Updates and platform releases can disrupt customizations and plugins, requiring regression testing after each wave
  • Non-Microsoft integrations require additional configuration or middleware, limiting flexibility for heterogeneous tech stacks

Complexity grading

How hard is this migration?

Standard CRM migration. All 8 core objects map 1:1 between Salesforce Field Service and Microsoft Dynamics 365 Sales .

B

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

    A

    All 8 core objects map 1:1 between Salesforce Field Service and Microsoft Dynamics 365 Sales .

  • 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

    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

    A

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

Estimator

Estimate your Salesforce Field Service to Microsoft Dynamics 365 Sales 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 Salesforce Field Service to Microsoft Dynamics 365 Sales data migrations

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

Can't find your answer?

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 consultation

Most Salesforce Field Service to Dynamics 365 migrations complete in 72–120 hours of clock time for under 25,000 records. Large deployments with 200,000+ WorkOrders, complex Asset hierarchies, or multi-level skill structures extend to 10–18 days. The WorkType analysis and custom schema setup phase (Steps 1–2) typically takes 3–5 business days and runs in parallel with your Dynamics 365 configuration. The delta-pickup window (48–72 hours) is the longest single operation.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Salesforce Field Service.
Land in Microsoft Dynamics 365 Sales , 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