CRM migration

Migrate from OptimoRoute to Microsoft Dynamics 365 Sales

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 logo

OptimoRoute

Source

Microsoft Dynamics 365 Sales

Destination

Microsoft Dynamics 365 Sales  logo

Compatibility

100%

17 of 17

objects map 1:1 between OptimoRoute and Microsoft Dynamics 365 Sales .

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

OptimoRoute logo

OptimoRoute

What's pushing teams away

  • Per-driver monthly pricing scales expensively for large fleets, with some customers noting it is significantly pricier than competing routing tools with comparable features.
  • Multi-day route planning produces messy results when many orders share the same location but have different time windows, causing jobs to be skipped or left unscheduled.
  • Limited driver route assignments on the same day frustrate operations managers who need a single driver to handle multiple distinct route types simultaneously.
  • Mobile editing capabilities are limited compared to the web dashboard, making last-minute in-field adjustments difficult for dispatchers working remotely.
  • Routing for mixed vehicle fleets lacks variety options, with some reviewers noting the system struggles when the fleet contains heterogeneous vehicle types.

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 OptimoRoute objects map to Microsoft Dynamics 365 Sales

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

maps to

Microsoft Dynamics 365 Sales

Opportunity (custom routing table)

1:1
Fully supported

OptimoRoute 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

maps to

Microsoft Dynamics 365 Sales

SystemUser / Contact

1:1
Fully supported

OptimoRoute 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

maps to

Microsoft Dynamics 365 Sales

Custom Vehicle Table

1:1
Fully supported

OptimoRoute 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

maps to

Microsoft Dynamics 365 Sales

Custom Route Table + Activities

1:1
Fully supported

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

maps to

Microsoft Dynamics 365 Sales

Account.Address fields

1:1
Fully supported

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

maps to

Microsoft Dynamics 365 Sales

Custom Field on custom routing table

1:1
Fully supported

OptimoRoute 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

maps to

Microsoft Dynamics 365 Sales

Opportunity.StateCode / StatusCode

1:1
Fully supported

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

maps to

Microsoft Dynamics 365 Sales

Note / Attachment on Opportunity

1:1
Fully supported

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

maps to

Microsoft Dynamics 365 Sales

Custom Datetime fields on Opportunity

1:1
Fully supported

OptimoRoute 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

maps to

Microsoft Dynamics 365 Sales

Custom Priority field on Opportunity

1:1
Fully supported

OptimoRoute 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

maps to

Microsoft Dynamics 365 Sales

Custom multi-select text or option-set field

1:1
Fully supported

OptimoRoute 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

maps to

Microsoft Dynamics 365 Sales

Custom numeric fields on vehicle table

1:1
Fully supported

OptimoRoute 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

maps to

Microsoft Dynamics 365 Sales

Custom fields on SystemUser

1:1
Fully supported

OptimoRoute 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

maps to

Microsoft Dynamics 365 Sales

Custom option-set on Opportunity

1:1
Fully supported

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

maps to

Microsoft Dynamics 365 Sales

D365 Activity tables (PhoneCall, Email, Task)

1:1
Fully supported

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

maps to

Microsoft Dynamics 365 Sales

D365 Note or FileAttachment

1:1
Fully supported

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

maps to

Microsoft Dynamics 365 Sales

Account / Contact

1:1
Fully supported

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

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.

OptimoRoute logo

OptimoRoute gotchas

High

API rate limit of 5 concurrent requests is migration-critical

High

Custom order fields are restricted to three types only

Medium

Proof of delivery assets require separate extraction and upload

Medium

Multi-day route plans must be deconstructed before migration

Low

Driver activation codes are not returned by the API after creation

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

  • Routing constraints have no native Dynamics 365 representation

    OptimoRoute stores vehicle weight capacity, volume limits, driver skills, and order priority as first-class routing objects that drive automated optimization. Dynamics 365 Sales has no native mechanism for these constraints — they have no equivalent to an Opportunity capacity field or a driver skills pick-list that a scheduling engine can read. We migrate these as custom fields on the custom routing table and SystemUser, but the Power Automate flow or third-party dispatcher tool you deploy post-migration must implement the actual matching logic. Scheduling teams need a routing tool (Dynamics 365 Field Service, a third-party dispatcher, or custom Power Apps) to reproduce OptimoRoute's optimization behavior. This is a rebuild, not a transfer.

  • OptimoRoute API rate limit of 5 concurrent requests extends migration timeline

    The OptimoRoute REST API caps concurrent requests at 5 per account or IP address. For migrations with 10,000+ orders, multiple drivers, and 50+ custom fields, this rate limit can extend the data-extraction phase to several hours or days depending on the volume of related records. We implement request back-off logic and batch retrieval by object type (drivers first, then vehicles, then orders) to stay within the limit without data loss. The migration timeline accounts for this throttle, but operations with very large datasets should plan for 7–14 days total rather than the standard 48–72 hour window.

  • Time windows translate to custom datetime fields with no scheduling enforcement

    OptimoRoute enforces time windows as hard constraints during route optimization — orders outside their window are flagged as unschedulable. In Dynamics 365 Sales, the Window_Start__c and Window_End__c fields we create are free-text datetime fields with no enforcement logic. The D365 UI does not highlight overdue windows, and no D365 workflow fires automatically when a delivery falls outside its window. Your Power Automate flow or dispatcher tool must implement this logic separately. We recommend building a Power Automate flow that queries Opportunities with Window_Start__c < utcNow() and Status = 'scheduled' to surface at-risk deliveries.

  • Proof-of-delivery files require separate download-and-re-upload pipeline

    OptimoRoute stores POD signatures and photos as separate API resources with individual URLs rather than inline binary data. Each POD file must be fetched individually, which multiplies API calls on large-order-volume accounts. We handle the download-and-re-upload as part of the migration pipeline, but the combined size of POD photo blobs (which can be several MB each for delivery confirmation images) means total migration payload can exceed raw record volume significantly. We recommend provisioning a SharePoint document library connected to D365 before migration so POD files land in SharePoint rather than directly in the Dataverse file storage, avoiding potential storage quota issues.

  • Multi-day routes require a custom route-date spanning model

    OptimoRoute supports routes spanning multiple days with individual stops each having a scheduled date. Dynamics 365 Opportunities have a single CloseDate field — there is no native concept of a multi-stop, multi-day delivery itinerary within the Opportunity object. We model each day of a multi-day route as a separate cror_route record linked to the same set of Opportunities via a junction entity (cror_route_stop), storing the planned date on the route-stop junction. This preserves the per-day schedule but requires the custom route table schema to be finalized before migration begins.

Migration approach

Six steps for a successful OptimoRoute to Microsoft Dynamics 365 Sales data migration

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

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

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

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

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

Context on both ends of the pair

OptimoRoute logo

OptimoRoute

Source

Strengths

  • Multi-constraint optimization engine handles time windows, driver hours, vehicle capacity, and skills simultaneously.
  • Live driver tracking and customer-facing ETA sharing are built into the platform without additional integrations.
  • 30-day free trial with month-to-month pricing and no contract lowers the evaluation risk for new customers.
  • Fast optimization — claims sub-minute planning for thousands of orders, useful for dynamic dispatch scenarios.
  • Driver app available on iOS and Android with 20 language locales and offline capability.

Weaknesses

  • Driver-based pricing scales poorly for large fleets compared to flat-rate or volume-based alternatives.
  • Multi-day route planning produces inconsistent results when orders share locations with overlapping but distinct time windows.
  • Mobile editing and dispatcher controls are more limited than the web dashboard, creating friction for remote dispatchers.
  • Mixed vehicle fleet routing lacks flexibility, with the system treating all vehicles as largely interchangeable.
  • No native bulk/batch API endpoint means large order imports require scripting or batching across the 5-concurrent-request limit.
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 OptimoRoute and Microsoft Dynamics 365 Sales .

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across OptimoRoute and Microsoft Dynamics 365 Sales .

  • Object compatibility

    A

    All 8 core objects map 1:1 between OptimoRoute 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

    OptimoRoute: 5 concurrent requests per account or per IP address; requests exceeding this return ERR_TOO_MANY_CONNECTIONS.

  • Data volume sensitivity

    B

    OptimoRoute doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

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

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

Can't find your answer?

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 consultation

Most OptimoRoute-to-Dynamics 365 migrations complete in 48–72 hours of clock time for datasets under 10,000 orders with no more than 15 custom order fields. Operations with 50,000+ orders or complex multi-day routing records that require the custom route table extend to 7–14 days. The OptimoRoute API rate limit of 5 concurrent requests is the primary timeline driver — large datasets with many POD photo attachments take longer because each file requires an individual API fetch and re-upload. We build in time for schema creation, sample migration with diff review, and delta-pickup during cutover.

Adjacent paths

Related migrations to explore

Ready when you are

Move from OptimoRoute.
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