CRM migration
Field-level mapping, validation, and rollback between Dynamics 365 Field Service and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
Dynamics 365 Field Service
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
18 of 18
objects map 1:1 between Dynamics 365 Field Service and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
3–6 weeks
Overview
Both Dynamics 365 Field Service and Dynamics 365 Sales sit on the same Microsoft Dataverse data model, which simplifies some aspects of this migration — but the operational models diverge sharply. Field Service organizes around work orders, resource scheduling, customer assets, and service agreements. Dynamics 365 Sales organizes around leads, opportunities, quotes, and sales orders. FlitStack AI maps the shared entity types (Account, Contact, Product) directly via the Dataverse API and flags the field-service-specific entities that require custom entity creation or export-for-reference. The migration extracts work orders as custom WorkOrder__c records, translates BookableResourceBooking history into custom datetime and user fields on those records, and preserves CustomerAsset data as a custom entity with service-history links. Service agreement recurring billing logic and resource scheduling rules have no Dynamics 365 Sales equivalent — those surface in the rebuild plan we deliver alongside the migration. Scheduling data (resource assignments, travel time, booking status) migrates as custom fields on the WorkOrder__c entity rather than native scheduling, since Dynamics 365 Sales lacks the schedule board. The delta-pickup window captures any work orders created or status-changed during the cutover so the destination reflects Field Service's final state at go-live.
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
Dynamics 365 Field Service platform overview
Scorecard, SWOT, gotchas, and pricing for Dynamics 365 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 Dynamics 365 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.
Dynamics 365 Field Service
Account
Microsoft Dynamics 365 Sales
Account
1:1Direct 1:1 map via Dataverse API. Both platforms expose the Account entity with the same logical schema — name, address, industry, primary contact, and parent account hierarchy all map field-for-field without transformation. Owner resolved by email match to the destination user, with unmatched owners flagged for manual assignment before migration.
Dynamics 365 Field Service
Contact
Microsoft Dynamics 365 Sales
Contact
1:1Direct 1:1 map. Both use the Contact entity with full name fields, email, phone, job title, address, and account lookup. Dynamics 365 Sales Contact.AccountId links to the migrated Account record. N:1 contact-to-account relationships from Field Service preserved via the same lookup.
Dynamics 365 Field Service
msdyn_workorder
Microsoft Dynamics 365 Sales
WorkOrder__c (custom Dataverse table)
1:1Dynamics 365 Sales has no native work order entity. We create a WorkOrder__c custom table in Dataverse and map work order fields — work order number, service account, system status, sub-status, priority, description, actual arrival time, actual departure time, and total travel time — as custom fields on the WorkOrder__c record.
Dynamics 365 Field Service
msdyn_workorder -> msdyn_workorderincident
Microsoft Dynamics 365 Sales
WorkOrder__c.WorkOrderIncidents__c (custom field)
1:1Work order incidents (problems linked to work orders) map to a custom multi-select text field or a related WorkOrderIncident__c table, depending on the complexity of incident data. Each incident's msdyn_name (problem description) and msdyn_estimate (labor estimate) migrate as fields on the incident record linked back to WorkOrder__c, preserving the relationship for reporting and audit purposes.
Dynamics 365 Field Service
BookableResourceBooking
Microsoft Dynamics 365 Sales
WorkOrder__c.BookingData__c (custom field)
1:1Booking records (resource assignments, start/end times, booking status) have no native equivalent in Dynamics 365 Sales. We serialize the relevant booking fields — resource name, scheduled start, scheduled end, travel duration, and booking status — as JSON or delimited text in a custom BookingData__c field on the WorkOrder__c record.
Dynamics 365 Field Service
CustomerAsset
Microsoft Dynamics 365 Sales
CustomerAsset__c (custom Dataverse table)
1:1CustomerAsset entity with operational status, install date, serial number, product, customer account, and asset parent has no Dynamics 365 Sales equivalent. We create a CustomerAsset__c custom table, map all standard fields, and link to the migrated Account record via AccountId lookup.
Dynamics 365 Field Service
msdyn_agreement
Microsoft Dynamics 365 Sales
Custom export (ServiceAgreement__c + PDF)
1:1Service agreements with recurring billing lines, service tasks, and booking setup have no Dynamics 365 Sales equivalent. We export agreement data to a custom ServiceAgreement__c table for reference and generate a PDF summary of each active agreement for manual re-creation in Sales using Opportunities and Contracts.
Dynamics 365 Field Service
Product
Microsoft Dynamics 365 Sales
Product
1:1Product catalog — name, product number, default unit, price list items, and product type — maps directly. Field Service products used in work order products and work order services align with the Sales product entity. Unit group and pricing mechanics are shared across both platforms.
Dynamics 365 Field Service
PriceList / msdyn_usecs (price list item)
Microsoft Dynamics 365 Sales
PriceListItem
1:1Field Service price list items (products × price lists × units) map to Dynamics 365 Sales price list item structure. Both use the same pricing engine and support quantity-based pricing, discount lists, and tiered pricing. Price list linkage to accounts and opportunities preserved.
Dynamics 365 Field Service
msdyn_workorderproduct
Microsoft Dynamics 365 Sales
WorkOrder__c.WorkOrderProducts__c (custom field)
1:1Products consumed on work orders (parts used, quantity, unit price, line status) serialize into a custom field on WorkOrder__c since Sales has no work-order-product entity. The data remains queryable for reference even though it does not become a native opportunity product line.
Dynamics 365 Field Service
msdyn_workorderservice
Microsoft Dynamics 365 Sales
WorkOrder__c.WorkOrderServices__c (custom field)
1:1Services delivered on work orders (service task, duration, billing type) serialize into a custom field on WorkOrder__c. The service description and estimated duration are preserved; actual duration comes from BookableResourceBooking.
Dynamics 365 Field Service
SystemUser (technicians and dispatchers)
Microsoft Dynamics 365 Sales
SystemUser / BookableResource
1:1Field Service technicians and dispatchers exist as BookableResource records linked to SystemUser. We match SystemUser by email to destination users in Dynamics 365 Sales. Active field technicians who will not use Dynamics 365 Sales are flagged as 'to be assigned to a fallback user' before migration, ensuring no orphaned booking assignments exist in the destination environment.
Dynamics 365 Field Service
Territory / msdyn_geofield
Microsoft Dynamics 365 Sales
Territory
1:1Service territories in Field Service map to Sales territories by territory name and region. Both use the Territory entity with the same hierarchical structure. Territory-based record assignment rules translate directly.
Dynamics 365 Field Service
Annotation (notes on work orders)
Microsoft Dynamics 365 Sales
Annotation
1:1Notes attached to work orders, customer assets, or accounts map directly to the Annotation entity in Dynamics 365 Sales. Both platforms use the same Dataverse annotation model, ensuring consistency in how notes are stored and retrieved. File attachments migrate as annotation attachments with the original file blob preserved, maintaining complete audit trails and documentation for each record.
Dynamics 365 Field Service
Opportunity
Microsoft Dynamics 365 Sales
Opportunity
1:1If the Field Service instance contains opportunities (Enterprise instances can link opportunities to work orders), those map directly to Dynamics 365 Sales Opportunity. Pipeline stage, close date, probability, estimated revenue, and opportunity contacts migrate field-for-field, preserving the complete sales cycle data from the source environment.
Dynamics 365 Field Service
Quote / SalesOrder / Invoice
Microsoft Dynamics 365 Sales
Quote / Order / Invoice
1:1Quotes, sales orders, and invoices present in the Field Service instance (typically from Project Service or Sales integration) migrate directly to their Dynamics 365 Sales equivalents. Product line items, pricing, discount amounts, and status fields align between the two platforms' transactional entities, ensuring accurate financial records and order history in the destination.
Dynamics 365 Field Service
Custom entities (msdyn_* extensions)
Microsoft Dynamics 365 Sales
Custom Dataverse tables (msdyn_* or new_* prefixed)
1:1Any custom Field Service extensions (custom fields on work order, custom lookup relationships, or plugin-generated attributes) map to corresponding custom columns in Dynamics 365 Sales. Custom entities that have no semantic equivalent in Sales are exported as custom Dataverse tables and linked to the migrated records via lookup fields, preserving data relationships and operational context.
Dynamics 365 Field Service
IoT alerts (msdyn_iotalert)
Microsoft Dynamics 365 Sales
Custom export only
1:1IoT alerts from Connected Field Service have no Dynamics 365 Sales equivalent. We export alert history as a custom IOTAlert__c reference table linked to the affected CustomerAsset__c record. Active alert routing logic must be rebuilt in Power Automate or an IoT middleware.
| Dynamics 365 Field Service | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Account | Account1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| msdyn_workorder | WorkOrder__c (custom Dataverse table)1:1 | Fully supported | |
| msdyn_workorder -> msdyn_workorderincident | WorkOrder__c.WorkOrderIncidents__c (custom field)1:1 | Fully supported | |
| BookableResourceBooking | WorkOrder__c.BookingData__c (custom field)1:1 | Fully supported | |
| CustomerAsset | CustomerAsset__c (custom Dataverse table)1:1 | Fully supported | |
| msdyn_agreement | Custom export (ServiceAgreement__c + PDF)1:1 | Fully supported | |
| Product | Product1:1 | Fully supported | |
| PriceList / msdyn_usecs (price list item) | PriceListItem1:1 | Fully supported | |
| msdyn_workorderproduct | WorkOrder__c.WorkOrderProducts__c (custom field)1:1 | Fully supported | |
| msdyn_workorderservice | WorkOrder__c.WorkOrderServices__c (custom field)1:1 | Fully supported | |
| SystemUser (technicians and dispatchers) | SystemUser / BookableResource1:1 | Fully supported | |
| Territory / msdyn_geofield | Territory1:1 | Fully supported | |
| Annotation (notes on work orders) | Annotation1:1 | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| Quote / SalesOrder / Invoice | Quote / Order / Invoice1:1 | Fully supported | |
| Custom entities (msdyn_* extensions) | Custom Dataverse tables (msdyn_* or new_* prefixed)1:1 | Fully supported | |
| IoT alerts (msdyn_iotalert) | Custom export only1: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 Field Service gotchas
Dataverse service protection API limits throttle bulk exports
Offline profile FetchXML tuning is source-environment-specific
Project Operations integration has bidirectional sync limitations
Copilot add-on credits do not migrate and reset at zero
File attachments stored in SharePoint require separate file migration
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
Authenticate to both Field Service and Dynamics 365 Sales via Dataverse API
FlitStack AI connects to the source Microsoft Dynamics 365 Field Service environment using OAuth 2.0 with an Azure AD application registration, and to the destination Dynamics 365 Sales environment with equivalent credentials. We validate API access for both environments, enumerate existing entities and custom tables, and confirm that the destination Sales Professional vs Enterprise tier is identified before schema planning begins. The API token management includes automatic token refresh and handles Dataverse's request throttling limits.
Extract field service entities in dependency order: Accounts → Contacts → Assets → Work Orders → Bookings
We extract entities sequentially respecting foreign-key dependencies. Accounts migrate first (to resolve AccountId on contacts), then Contacts (to resolve CustomerAsset links and ContactId on work orders), then Products and Price Lists, then CustomerAsset records linked to accounts, then WorkOrder records, then BookableResourceBooking records linked to work orders. Each extraction run preserves original created-on and modified-on timestamps, owner IDs, and all option-set integer values for downstream mapping. We run incremental delta extraction daily during the planning phase to capture in-flight work orders.
Map schema and create custom Dataverse tables in the destination environment
Based on the entity inventory, FlitStack AI generates a schema setup plan: WorkOrder__c custom table with all mapped work order fields and a BookingData__c text field for serialized booking data; CustomerAsset__c custom table with asset fields and a ServiceHistory__c text field; ServiceAgreement__c for agreement reference. For Sales Professional environments, we flag the 15-table count and recommend which entities to prioritize as tables vs exported files. The plan is reviewed by the customer's admin before any schema objects are created in the destination environment.
Run a sample migration of 200–500 representative records with field-level diff
A representative slice of data — 50 accounts, 100 contacts, 20 customer assets, 75 work orders spanning multiple system statuses, 3–5 assets with full booking histories — migrates to the destination first. We generate a field-level diff report comparing source field values against destination field values for every mapped column. The diff covers work order system status mapping, service account resolution, owner matching, and the serialization of booking data into the WorkOrder__c BookingData__c field. The customer reviews the diff and approves or flags corrections before the full migration runs.
Execute full migration with delta-pickup window and one-click rollback available
The full migration runs against the production Dynamics 365 Sales environment. A delta-pickup window (typically 24–48 hours, configurable) runs concurrently, capturing any work orders created, status-changed, or newly linked to assets in Field Service during the cutover. Every operation is logged to an audit table. If reconciliation fails — for example, if booking data integrity checks reveal malformed serialization — one-click rollback reverts the destination to the pre-migration state. The rollback uses a snapshot taken before the full run commits, with all affected tables reverted in a single orchestrated operation.
Platform deep dives
Dynamics 365 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 Dynamics 365 Field Service and Microsoft Dynamics 365 Sales .
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Dynamics 365 Field Service and Microsoft Dynamics 365 Sales .
Object compatibility
All 8 core objects map 1:1 between Dynamics 365 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
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
Dynamics 365 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 Dynamics 365 Field Service to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your Dynamics 365 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 Dynamics 365 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.