CRM migration
Field-level mapping, validation, and rollback between OptimoRoute and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
OptimoRoute
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
17 of 17
objects map 1:1 between OptimoRoute and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
48–72 hours
Overview
OptimoRoute stores a fundamentally field-service data model: Orders with time windows, driver schedules, vehicle capacity constraints, skills matching, and proof-of-delivery signatures and photos. Dynamics 365 Sales, built on Microsoft Dataverse, has no native routing or dispatch entity — route data must land in custom tables and fields, and routing decisions must be rebuilt in Power Automate or a third-party dispatcher tool. FlitStack AI extracts all standard OptimoRoute objects (drivers, vehicles, orders, routes, locations) plus any custom order fields via the OptimoRoute REST API, transforms address and time-window data into Dynamics 365 address and datetime fields, creates custom tables for routing constraints (vehicle capacity, driver skills, order priority) that have no native D365 equivalent, and delivers a sample migration with field-level diff before committing the full run. Workflows, driver-app behavior configurations, and route-optimization rules do not migrate — those are rebuilt using Power Automate flows and your new dispatch tool. The migration preserves original timestamps, delivery windows, and POD data so dispatch teams can reconstruct operational context in the new environment.
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
OptimoRoute platform overview
Scorecard, SWOT, gotchas, and pricing for OptimoRoute.
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 OptimoRoute 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.
OptimoRoute
Order
Microsoft Dynamics 365 Sales
Opportunity (custom routing table)
1:1OptimoRoute orders become Opportunities representing individual delivery or service jobs. Address, time window, and priority fields map to custom fields on a routing-specific custom table. The Opportunity Name holds the order reference; estimated delivery time maps to CloseDate as a proxy datetime field.
OptimoRoute
Driver
Microsoft Dynamics 365 Sales
SystemUser / Contact
1:1OptimoRoute driver records (name, email, phone, work hours, cost settings) map directly to Dynamics 365 SystemUser for users who will log into D365 Sales, or to Contact for drivers managed externally. Driver skills and vehicle assignments stored as custom fields on the SystemUser record.
OptimoRoute
Vehicle
Microsoft Dynamics 365 Sales
Custom Vehicle Table
1:1OptimoRoute vehicles (plate, type, capacity, features) have no native D365 equivalent. We create a custom vehicle table (cror_vehicle) in Dataverse with fields for registration, vehicle type pick-list, capacity (weight/volume), and feature flags (refrigeration, loading ramp). This table links to SystemUser records for driver-vehicle assignments.
OptimoRoute
Route
Microsoft Dynamics 365 Sales
Custom Route Table + Activities
1:1OptimoRoute routes carry optimization logic, sequence, and driver assignment that has no native D365 counterpart. We create a custom route table (cror_route) capturing route name, date, assigned driver (lookup to SystemUser), and status. Individual route stops (ordered delivery points) land as Opportunity records linked to the route, preserving the sequence number as a custom integer field.
OptimoRoute
Location (address fields on Order)
Microsoft Dynamics 365 Sales
Account.Address fields
1:1OptimoRoute stores full address strings on orders: address_line_1, address_line_2, city, state, postal_code, country. We parse these into Dynamics 365 Account address1 fields (address1_line1, address1_city, address1_stateorprovince, address1_postalcode, address1_country). A separate address2 block holds any secondary delivery notes from OptimoRoute's address2 field.
OptimoRoute
Custom Order Field (text, number, single-select)
Microsoft Dynamics 365 Sales
Custom Field on custom routing table
1:1OptimoRoute custom order fields (text single/multi-line, number with decimal places, single-select pick-list) map 1:1 to Dataverse custom fields on the routing custom table. Single-select values require a value-by-value mapping to preserve the exact pick-list options. We generate the Dataverse field schema (type, format, required flag) during migration planning.
OptimoRoute
Order Status / Stage
Microsoft Dynamics 365 Sales
Opportunity.StateCode / StatusCode
1:1OptimoRoute order statuses (pending, scheduled, in_progress, completed, failed, cancelled) map to D365 Opportunity StateCode and StatusCode values via explicit value mapping. 'completed' maps to StateCode=1 (Closed) with StatusCode=3 (Won); 'failed' and 'cancelled' map to StateCode=1 with StatusCode=4 (Lost). This preserves closed-order reporting in D365 pipeline views.
OptimoRoute
Proof of Delivery (signature, photo, note)
Microsoft Dynamics 365 Sales
Note / Attachment on Opportunity
1:1OptimoRoute POD data (digital signature image, delivery photos, driver notes) is downloaded from the OptimoRoute API as binary blobs and re-uploaded to D365 as Notes (for text notes) or FileAttachments on the corresponding Opportunity record. Signature images stored as file attachments with a custom flag field POD_Signature__c = true.
OptimoRoute
Time Window (scheduled_time_start, scheduled_time_end)
Microsoft Dynamics 365 Sales
Custom Datetime fields on Opportunity
1:1OptimoRoute time windows (earliest and latest acceptable delivery time) map to two custom Datetime fields on the Opportunity: Window_Start__c and Window_End__c. These are used by the dispatch team to manually schedule or by Power Automate flows to trigger routing logic in a new dispatcher tool. No native D365 time-window constraint mechanism exists.
OptimoRoute
Order Priority
Microsoft Dynamics 365 Sales
Custom Priority field on Opportunity
1:1OptimoRoute order priority (1–5 or high/medium/low depending on account config) maps to a custom pick-list field Priority__c on Opportunity. The same values are preserved; priority directly influences the order in which route stops are sequenced in the destination routing tool.
OptimoRoute
Skills Required
Microsoft Dynamics 365 Sales
Custom multi-select text or option-set field
1:1OptimoRoute skills-based routing rules (e.g., 'refrigeration', 'hazmat', 'heavy lift') do not map to any native D365 mechanism. We create a custom multi-select option-set field Skills_Required__c on the Opportunity and a matching Skills_Possessed__c field on SystemUser, enabling Power Automate to match drivers to orders based on skill alignment post-migration.
OptimoRoute
Vehicle Load Capacity
Microsoft Dynamics 365 Sales
Custom numeric fields on vehicle table
1:1OptimoRoute vehicle capacity constraints (weight capacity, volume capacity, number of stops) are stored on the custom vehicle table (cror_vehicle) as numeric fields: Weight_Capacity_kg__c and Volume_Capacity_L__c. These are used by the dispatch team or Power Automate routing logic to validate vehicle assignment feasibility.
OptimoRoute
Driver Cost Settings
Microsoft Dynamics 365 Sales
Custom fields on SystemUser
1:1OptimoRoute stores per-driver cost settings: cost_per_hour, cost_per_km, fixed_daily_cost. These map to custom decimal fields on the SystemUser record (Cost_Per_Hour__c, Cost_Per_Km__c, Fixed_Daily_Cost__c). These fields are informational in D365 and do not trigger automated calculations. Cost analysis and route costing are performed in the new routing or dispatch tool post-migration, using these migrated values as baseline inputs for profitability reporting.
OptimoRoute
Order Tags / Labels
Microsoft Dynamics 365 Sales
Custom option-set on Opportunity
1:1OptimoRoute allows tagging orders with custom labels (e.g., 'fragile', 'return', 'priority-customer'). We map these to a custom option-set field Order_Tags__c on Opportunity, creating matching values in Dataverse. Labels with many unique values across accounts require a pre-migration value-audit to avoid exceeding the option-set limit.
OptimoRoute
Activity History (calls, emails logged in OptimoRoute)
Microsoft Dynamics 365 Sales
D365 Activity tables (PhoneCall, Email, Task)
1:1OptimoRoute logs driver interactions (customer calls, failed delivery attempts) as activity records. These map to D365 PhoneCall, Email, or Task records linked to the corresponding Opportunity or Contact. Original timestamps and driver-as-owner are preserved. No native OptimoRoute activity type maps directly to D365's activity model — each record type is chosen at migration time based on the OptimoRoute activity subtype.
OptimoRoute
Attachment / File (documents on orders)
Microsoft Dynamics 365 Sales
D365 Note or FileAttachment
1:1Files attached to OptimoRoute orders (e.g., delivery manifests, BOLs) are downloaded and re-uploaded to D365 Notes or FileAttachments on the corresponding Opportunity. Large files (>4 MB) are stored in D365's SharePoint integration if configured. The original filename is preserved in the D365 object.
OptimoRoute
Customer (OptimoRoute account linked to orders)
Microsoft Dynamics 365 Sales
Account / Contact
1:1OptimoRoute stores customer name and contact on each order. We create D365 Account records for each unique customer, using the order's customer_name field. The primary contact (phone, email) migrates to the Account's primary Contact. Multiple orders from the same customer link to the same Account, collapsing duplicate customer records during migration.
| OptimoRoute | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Order | Opportunity (custom routing table)1:1 | Fully supported | |
| Driver | SystemUser / Contact1:1 | Fully supported | |
| Vehicle | Custom Vehicle Table1:1 | Fully supported | |
| Route | Custom Route Table + Activities1:1 | Fully supported | |
| Location (address fields on Order) | Account.Address fields1:1 | Fully supported | |
| Custom Order Field (text, number, single-select) | Custom Field on custom routing table1:1 | Fully supported | |
| Order Status / Stage | Opportunity.StateCode / StatusCode1:1 | Fully supported | |
| Proof of Delivery (signature, photo, note) | Note / Attachment on Opportunity1:1 | Fully supported | |
| Time Window (scheduled_time_start, scheduled_time_end) | Custom Datetime fields on Opportunity1:1 | Fully supported | |
| Order Priority | Custom Priority field on Opportunity1:1 | Fully supported | |
| Skills Required | Custom multi-select text or option-set field1:1 | Fully supported | |
| Vehicle Load Capacity | Custom numeric fields on vehicle table1:1 | Fully supported | |
| Driver Cost Settings | Custom fields on SystemUser1:1 | Fully supported | |
| Order Tags / Labels | Custom option-set on Opportunity1:1 | Fully supported | |
| Activity History (calls, emails logged in OptimoRoute) | D365 Activity tables (PhoneCall, Email, Task)1:1 | Fully supported | |
| Attachment / File (documents on orders) | D365 Note or FileAttachment1:1 | Fully supported | |
| Customer (OptimoRoute account linked to orders) | Account / Contact1: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.
OptimoRoute gotchas
API rate limit of 5 concurrent requests is migration-critical
Custom order fields are restricted to three types only
Proof of delivery assets require separate extraction and upload
Multi-day route plans must be deconstructed before migration
Driver activation codes are not returned by the API after creation
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
Discover OptimoRoute data model and audit routing fields
FlitStack AI authenticates to the OptimoRoute REST API using your account credentials and pulls a complete schema inventory: all drivers, vehicles, orders, routes, custom order fields, and any custom pick-list values for skills and vehicle features. We audit field data types (text, number, single-select), check for null rates and formatting inconsistencies, and identify any orders with missing required fields or malformed addresses. This audit produces the field-level mapping spec that drives every subsequent step — if custom fields use OptimoRoute's single-select type with more than 200 distinct values, we flag the option-set creation requirement in Dataverse before migration runs.
Create Dynamics 365 custom tables and field schema
Before any data moves, FlitStack AI generates a Dataverse schema script that creates the custom vehicle table (cror_vehicle), custom route table (cror_route), and route-stop junction entity, plus all custom fields on SystemUser (driver cost fields, skills) and Opportunity (window start/end, service duration, POD flags). We apply Dataverse field security to restrict driver cost fields to admin roles. This schema script runs against your target D365 environment — your admin reviews and publishes in the Power Apps solution before we proceed to migration. No data moves until the destination schema is confirmed complete.
Resolve driver and vehicle records before orders
Dynamics 365 requires foreign keys to resolve before dependent records insert. We migrate vehicles first (cror_vehicle table), then drivers (SystemUser records with custom fields populated), so that the vehicle lookup on cror_route and the driver-systemuser lookup both resolve cleanly. For drivers who do not yet have D365 user accounts, we create Contact records with a custom flag Driver_Only__c = true — your team decides which drivers become full D365 users and which remain operational-only contacts. All driver records are matched by email; any OptimoRoute driver with no matching D365 email is flagged for resolution before the order migration begins.
Run sample migration with field-level diff
A representative slice — typically 200–500 orders across multiple drivers, vehicles, and order statuses — migrates first. FlitStack AI generates a field-level diff report showing every source field value and its destination counterpart, flagging any truncated values, unmapped pick-list options, or failed lookups. You review the diff to confirm that time windows, POD flags, and custom field values landed correctly. No data commits to the destination until you approve the sample. If the diff reveals issues (e.g., an OptimoRoute custom field with a data type we misidentified), we adjust the mapping spec and re-run the sample before the full migration.
Execute full migration with delta-pickup window
The full OptimoRoute dataset migrates in sequenced batches: accounts and contacts first, then vehicles, then drivers, then orders, then routes with route-stop junctions, then POD files. After the initial load completes, a delta-pickup window (24–48 hours) polls the OptimoRoute API for any records modified or created during the cutover period. All operations are logged in an audit table in D365; one-click rollback reverts to the pre-migration state if reconciliation reveals critical mismatches. After delta-pickup closes, the FlitStack team delivers a final reconciliation report showing record counts, error rates, and any unmigrated records with root-cause descriptions.
Platform deep dives
OptimoRoute
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between OptimoRoute and Microsoft Dynamics 365 Sales .
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across OptimoRoute and Microsoft Dynamics 365 Sales .
Object compatibility
All 8 core objects map 1:1 between OptimoRoute 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
OptimoRoute: 5 concurrent requests per account or per IP address; requests exceeding this return ERR_TOO_MANY_CONNECTIONS.
Data volume sensitivity
OptimoRoute 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 OptimoRoute to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your OptimoRoute 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 OptimoRoute
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.