CRM migration
Field-level mapping, validation, and rollback between Opal CRM and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
Opal CRM
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
4 of 8
objects map 1:1 between Opal CRM and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Opal CRM to Microsoft Microsoft Dynamics 365 Sales is a structural migration that must account for three source-platform constraints before any destination mapping begins. Opal CRM does not publish a REST API or bulk export endpoint, so we request a direct export file from the customer and validate completeness against the UI record counts. Tour Plans store itinerary and expense line items together; if the export flattens these, we decompress the expense entries and reconstruct them as individual Activity records in Dynamics 365. The Quotation approval workflow state has no standard Dynamics 365 equivalent, so we preserve it as a custom field and document the workflow for the customer's admin to rebuild in Microsoft Dynamics 365 Sales or Power Automate. We migrate Leads to Leads, Companies to Accounts, Sales Representatives to Users, Quotations to Opportunities with line items, and Tour Plans as structured Activity records with custom fields. We do not migrate workflows, automations, or role definitions as code; we deliver a written inventory for the customer's admin to rebuild post-migration.
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
Opal CRM platform overview
Scorecard, SWOT, gotchas, and pricing for Opal CRM.
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 Opal CRM 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.
Opal CRM
Lead
Microsoft Dynamics 365 Sales
Lead
1:1Opal CRM Leads map directly to Microsoft Microsoft Dynamics 365 Sales Lead records. We preserve source attribution fields (campaign, form, channel) as custom fields on the Lead because Microsoft Dynamics 365 Sales stores these as standard fields (leadSource, originatingCampaignId) that map cleanly from Opal's lead capture metadata. Owner assignment from the Opal CRM Sales Rep field resolves to a Dynamics 365 User by email lookup.
Opal CRM
Company
Microsoft Dynamics 365 Sales
Account
1:1Opal CRM Companies map to Microsoft Dynamics 365 Sales Account records. Company address, phone, and domain fields transfer directly. The Account record is created before any Contact or Opportunity import so that the AccountId lookup is satisfied at the moment of record insert. If Opal CRM stores multiple contacts per Company, each becomes a separate Contact record with the Account lookup populated.
Opal CRM
Sales Representative
Microsoft Dynamics 365 Sales
User
1:1Opal CRM Sales Reps (with roles Admin, Manager, Sales Rep) map to Microsoft Dynamics 365 Sales User records. We resolve by email match. Role permissions do not export as structured data from Opal CRM, so we capture per-user role assignments during discovery and document the equivalent Dynamics 365 security role assignment for the customer's admin to configure post-migration. Provisioning of the Dynamics 365 Users must complete before OwnerId lookups can resolve on Lead, Account, and Opportunity records.
Opal CRM
Tour Plan
Microsoft Dynamics 365 Sales
Task or custom Tour entity
lossyTour Plans in Opal CRM store itinerary data (dates, locations, associated leads) plus expense line items. If the export flattens Tour Plans to a single record, we decompress the expense entries and reconstruct them as individual Task records with custom fields for expense type, amount, and description, linked to the parent Lead or Contact via the RegardingObjectId lookup. Microsoft Dynamics 365 Sales has no native Tour/Visit object, so we use a custom Dataverse table or structured Activity records depending on the customer's preference documented during scoping.
Opal CRM
Quotation
Microsoft Dynamics 365 Sales
Opportunity with Line Items
1:manyOpal CRM Quotations map to Microsoft Dynamics 365 Sales Opportunity records with OpportunityLineItem entries for each quotation line. The quotation header (customer, total value, date, expiry) becomes Opportunity fields (AccountId, Amount, EstimatedCloseDate). Quotation line items map to OpportunityLineItem with Product2 reference, Quantity, and UnitPrice resolved from the destination Pricebook. The Opal CRM Quotation workflow approval state (pending, approved, rejected) has no standard Dynamics 365 equivalent and is stored as a custom field quotation_workflow_state__c on the Opportunity for the customer's admin to map to an approval flow or pipeline stage logic post-migration.
Opal CRM
Pipeline Stage
Microsoft Dynamics 365 Sales
Opportunity Stage or custom field
lossyOpal CRM pipeline stage names and order transfer to Microsoft Dynamics 365 Sales as either a custom Opportunity Stage value added to the active Sales Process, or as a custom picklist field if the destination org uses a non-standard stage naming convention. We preserve stage sequence order and probability percentages where available. If Opal CRM stores multiple pipelines, we map each to a separate Dynamics 365 Record Type on Opportunity.
Opal CRM
Activity (Call, Email, Meeting)
Microsoft Dynamics 365 Sales
Task, Event, or EmailMessage
1:1Opal CRM engagement logs (calls, emails, meetings) against Leads map to Microsoft Dynamics 365 Sales Task records (TaskSubtype=Call for calls), Event records (for meetings with start/end times), and EmailMessage records (for emails). The RegardingObjectId on each Activity points to the migrated Lead. Activity timestamps (ActivityDate) preserve the original engagement date so the timeline ordering is intact in Dynamics 365. Call duration and disposition map to custom Task fields if captured in Opal CRM.
Opal CRM
Custom Properties
Microsoft Dynamics 365 Sales
Custom fields on Lead, Account, Opportunity
lossyOpal CRM supports custom fields on Leads and possibly other objects, but the schema is not publicly documented. We identify custom fields during discovery by inspecting the export file schema, then provision equivalent custom fields in Dynamics 365 Dataverse using the appropriate field type (text, number, picklist, date). Custom field names are preserved with a opal_source__ prefix to indicate provenance. Field-level security and validation rules on the destination org may require coordination with the Dynamics 365 admin before custom field population.
| Opal CRM | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Lead | Lead1:1 | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Sales Representative | User1:1 | Fully supported | |
| Tour Plan | Task or custom Tour entitylossy | Fully supported | |
| Quotation | Opportunity with Line Items1:many | Fully supported | |
| Pipeline Stage | Opportunity Stage or custom fieldlossy | Fully supported | |
| Activity (Call, Email, Meeting) | Task, Event, or EmailMessage1:1 | Fully supported | |
| Custom Properties | Custom fields on Lead, Account, Opportunitylossy | Mapping required |
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.
Opal CRM gotchas
No publicly documented API for bulk data export
Tour Plan expense data may flatten during export
Quotation workflow state is not a standard CRM field
Free tier limits and trial expiry not visible in export
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
Export extraction and validation
We request a complete data export from Opal CRM (CSV, JSON, or whatever format the platform exposes) and validate record counts against the Opal CRM UI for Leads, Companies, Sales Reps, Tour Plans, Quotations, and Activity records. If the export is unavailable or incomplete, we flag it as a blocker and advise the customer to contact Opal CRM support for account data before proceeding. The extraction validation step is the gating factor for the entire migration timeline.
Discovery and schema audit
We inspect the export file schema to identify all standard and custom fields, map the Tour Plan structure for expense decomposition risk, count Quotation line items, and document the Activity volume by type (calls, emails, meetings). We pair this with a Microsoft Dynamics 365 Sales org audit to identify existing Record Types, Sales Processes, custom fields, validation rules, and security roles. The discovery output is a written migration scope with field-level mapping, a custom field provisioning list, and a Dynamics 365 security role recommendation for each migrated user.
Schema provisioning in Dynamics 365 Sandbox
We provision all required custom fields (quotation_workflow_state__c, opal_source__ fields, expense decomposition fields on Task) in a Dynamics 365 Sandbox using the Dataverse Web API. We configure Opportunity Record Types and Sales Processes matching the Opal CRM pipeline stages. Validation rules are documented for temporary bypass during migration load. Schema deployment is validated in Sandbox before any production data moves.
Owner reconciliation and User provisioning
We extract every distinct Opal CRM Sales Rep referenced on Lead, Company, Tour Plan, and Quotation records and match by email against the destination Microsoft Dynamics 365 Sales org's User table. Sales Reps without a matching Dynamics 365 User are held in a reconciliation queue. The customer's Dynamics 365 admin provisions any missing Users (active or inactive) before record import resumes. OwnerId references are required on Lead, Account, and Opportunity records in Microsoft Dynamics 365 Sales , so this step gates the data migration.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (from Opal CRM Companies), Users (validated by admin), Leads (with OwnerId resolved), Opportunities with Line Items (from Opal CRM Quotations, with quotation_workflow_state__c populated), Activities (Tasks, Events, EmailMessages via Dataverse bulk import), Tour Plans (decomposed into structured Activities with custom expense fields). Each phase emits a row-count reconciliation report before the next phase begins. We use Dataverse batch operations with exponential backoff to stay within API rate limits.
Cutover, validation, and automation rebuild handoff
We freeze writes in Opal CRM during cutover, run a final delta migration of records modified during the migration window, then enable Microsoft Dynamics 365 Sales as the system of record. We deliver a written inventory of Opal CRM automations (if any exist via the two-lines-of-code integration layer) and quotation workflow states for the customer's admin to rebuild in Microsoft Dynamics 365 Sales Power Automate or Opportunity approval processes. We support a one-week hypercare window for reconciliation issues. We do not rebuild automations as code inside the migration scope.
Platform deep dives
Opal CRM
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Opal CRM and Microsoft Dynamics 365 Sales .
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Opal CRM and Microsoft Dynamics 365 Sales .
Object compatibility
All 8 core objects map 1:1 between Opal CRM 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
Opal CRM: Not publicly documented..
Data volume sensitivity
Opal CRM 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 Opal CRM to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your Opal CRM 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 Opal CRM
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.