CRM migration
Field-level mapping, validation, and rollback between XSale and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
XSale
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
6 of 8
objects map 1:1 between XSale and Microsoft Dynamics 365 Sales .
Complexity
CModerate
Timeline
2-4 weeks
Overview
Moving from XSale to Microsoft Microsoft Dynamics 365 Sales is a schema transformation, not a direct record copy. XSale stores data around Reps, Routes, Visits, Orders, and pre-order transactions in a schema optimized for mobile-first field execution. Microsoft Dynamics 365 Sales uses the Lead, Contact, Account, and Opportunity model with Activity tracking. We extract Reps as Contacts or Users, Routes as a custom entity, Visits as Activities, and Orders as Opportunities with line items. Pre-order transactions that do not map cleanly to Opportunity become a custom PreOrder object we provision in the destination org. XSale has no native workflow engine to migrate; we deliver a written inventory of any automation the customer built around route sequencing for their admin to rebuild in Power Automate. Historical timestamps on Visits and Orders are preserved as Activity dates and Opportunity close dates respectively.
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
XSale platform overview
Scorecard, SWOT, gotchas, and pricing for XSale.
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 XSale 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.
XSale
Rep
Microsoft Dynamics 365 Sales
User or Contact
1:1XSale Reps are the primary actors in the field execution model. We distinguish between internal Reps (sales team members) who should map to Dynamics 365 User records, and external Reps (store contacts, buyer contacts) who map to Contact records. We use the XSale Rep type or role field to determine the split. Internal Reps are resolved by email match against the destination User table; external Reps are inserted as Contacts against the appropriate Account.
XSale
Account (implied from Routes/Visits)
Microsoft Dynamics 365 Sales
Account
1:1XSale Routes are anchored to store or customer locations that serve as Accounts in Dynamics 365. We extract the store or customer reference from each Route and create Account records in Dynamics 365 using the store name as Account Name and any stored address fields. The Account is created before the Route migration so that the AccountId lookup is satisfied on Route insert.
XSale
Route
Microsoft Dynamics 365 Sales
Custom Entity: Route__c
1:1Routes are XSale's core organizational unit and have no direct Dynamics 365 equivalent. We provision a custom Route__c entity in the destination org with fields for route_name, rep_id (lookup to User), start_date, end_date, and status. The route sequence (order of stops) is preserved as a custom sequence_number field. Route__c is created as the first custom entity in the migration so that Visit records can reference it via a WhatId or custom lookup.
XSale
Visit
Microsoft Dynamics 365 Sales
Task or Event
1:1XSale Visits record each stop along a route. We map Visits to Task records with TaskSubtype = Task (for store checks and pre-order confirmations) or Event records (for scheduled meetings with buyers). The WhatId on the Task or Event points to the Route__c custom entity. Visit timestamp maps to ActivityDate on Task or StartDateTime on Event. Any visit outcome or notes field maps to Description or custom Task fields.
XSale
Order
Microsoft Dynamics 365 Sales
Opportunity + OpportunityLineItem
1:manyXSale Orders map to Dynamics 365 Opportunities. The order amount becomes the Opportunity Amount field, the order date becomes the Close Date, and the status (pending, confirmed, delivered) maps to a corresponding Opportunity Stage. Line items within an XSale Order (SKUs, quantities, prices) map to OpportunityLineItem records. We resolve the Pricebook2 and Product2 references during migration.
XSale
Pre-order Transaction
Microsoft Dynamics 365 Sales
Custom Entity: PreOrder__c or Quote
lossyPre-order transactions in XSale capture buyer commitments before physical delivery. We assess the volume and structure during discovery. Low-volume pre-orders (under 5,000 records) map to a custom PreOrder__c entity linked to the Account and Route. High-volume pre-orders that represent a formal quoting process map to Salesforce Quote records, which are standard from Microsoft Dynamics 365 Sales Professional onward. The customer chooses the strategy during scoping.
XSale
Product (from Orders)
Microsoft Dynamics 365 Sales
Product2
1:1SKUs and products referenced in XSale Orders are extracted and provisioned as Product2 records in Dynamics 365. Standard Price Book entries are created during the product phase. ProductCode maps from the XSale SKU field. If XSale stores product images or descriptions, these migrate as ContentDocument records linked to Product2.
XSale
Owner
Microsoft Dynamics 365 Sales
User
1:1XSale Rep ownership on Routes, Visits, and Orders maps to Dynamics 365 User records. We resolve by email match. Any XSale Rep without a matching User in the destination org goes to a reconciliation queue for the customer's admin to provision before record import resumes. OwnerId on Opportunity must be resolved before Opportunity insert.
| XSale | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Rep | User or Contact1:1 | Fully supported | |
| Account (implied from Routes/Visits) | Account1:1 | Fully supported | |
| Route | Custom Entity: Route__c1:1 | Fully supported | |
| Visit | Task or Event1:1 | Fully supported | |
| Order | Opportunity + OpportunityLineItem1:many | Fully supported | |
| Pre-order Transaction | Custom Entity: PreOrder__c or Quotelossy | Fully supported | |
| Product (from Orders) | Product21:1 | Fully supported | |
| Owner | User1: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.
XSale gotchas
SAP integration metadata is critical for ongoing operations
Mobile-captured data syncs from rugged devices
GPS tracking data volume is high
Catalog and brand naming inconsistency
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
Discovery and data audit
We audit the XSale instance for Rep count (distinguishing internal vs external), Route count, Visit volume, Order count, pre-order transaction volume, and any custom fields the customer has added to these objects. We also assess the destination Dynamics 365 org for existing Accounts, Contacts, and Users. The discovery output is a written migration scope document with record counts per object, a pre-order migration strategy recommendation (custom entity vs Quote), and a pre-migration data cleansing checklist covering duplicate Reps, orphaned Routes, and incomplete address records.
Schema provisioning in Dynamics 365
We provision the Route__c custom entity (and PreOrder__c if chosen) in the destination Dynamics 365 org via the Power Platform admin center or the Dataverse API. We create all custom fields, lookup relationships, and any required picklist values before any data import. Schema is deployed into a Sandbox org first for validation, then migrated to production. We also configure the Opportunity stage values and Sales Process to match XSale's order status values.
Sandbox migration and reconciliation
We run a full migration into a Dynamics 365 Sandbox using production-like data volume. The customer's operations lead reconciles record counts (Reps in, Users and Contacts in, Routes in, Visits in, Orders in, Opportunities in), spot-checks 20-30 records per object against the XSale source, and validates that Visit timestamps map correctly to Activity dates. Any mapping corrections happen in the sandbox before production migration begins.
Owner and User provisioning
We extract every distinct Rep from XSale and match by email against the Dynamics 365 User table. Internal Reps (sales team members) must have a corresponding User record provisioned by the customer's admin. External Reps and store contacts migrate as Contact records against the appropriate Account. Reps without a matching User go to a reconciliation queue. This step gates the production migration because OwnerId is required on Opportunities.
Production migration in dependency order
We run production migration in record-dependency order: Users (manually provisioned, validated), Accounts (from XSale store/customer locations), Route__c records (first custom entity), Contacts (external Reps), Products and Pricebook entries, Opportunities (from Orders, with OwnerId and AccountId resolved), OpportunityLineItems (from Order line items), Tasks and Events (from Visits, linked to Route__c), PreOrder__c or Quote records (from pre-order transactions). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and handoff
We freeze XSale writes during cutover, run a final delta migration of any records modified during the migration window, then enable Microsoft Dynamics 365 Sales as the system of record. We deliver a written inventory of any route-sequencing or visit-triggered logic the customer built in XSale for their admin to evaluate rebuilding in Power Automate. We support a three-day hypercare window where we resolve reconciliation issues. We do not rebuild workflows, route optimizers, or field service scheduling tools; those are separate engagements.
Platform deep dives
XSale
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 1 of 8 objects need a manual workaround.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across XSale and Microsoft Dynamics 365 Sales .
Object compatibility
1 of 8 objects need a manual workaround.
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
XSale: Not publicly documented — typical SaaS limits assumed and confirmed during scoping..
Data volume sensitivity
XSale doesn't expose a bulk API — REST + parallelization used for high-volume runs.
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 XSale to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your XSale 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 XSale
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.