CRM migration
Field-level mapping, validation, and rollback between OPEX 365 CRM and Nutshell. We move data and schema; workflows are rebuilt natively in Nutshell.
OPEX 365 CRM
Source
Nutshell
Destination
Compatibility
6 of 8
objects map 1:1 between OPEX 365 CRM and Nutshell.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from OPEX 365 CRM to Nutshell is a migration from a Dataverse-backed Microsoft-centric CRM to a streamlined mid-market CRM designed for teams without a dedicated admin. OPEX 365 CRM stores data in the Common Data Model with custom entities, polymorphic activityparty relationships, and base64-encoded annotations; Nutshell uses a simpler relational schema with Accounts, Contacts, Deals, Activities, and custom fields. We enumerate all custom entities via the Dataverse EntityDefinitions endpoint before migration, resolve each activityparty reference to its correct target type and record, extract attachment content separately from annotation records, and map pipeline stage logic into Nutshell's deal stages. We do not migrate Dataverse security roles, custom plugin assemblies, or workflow definitions as these are environment-specific and tied to Microsoft identity infrastructure that does not exist in Nutshell. Workflows, automations, and reports do not migrate; we deliver a written inventory for the customer's admin to rebuild.
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.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a OPEX 365 CRM object lands in Nutshell, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
OPEX 365 CRM
Contact
Nutshell
Contact
1:1OPEX 365 CRM Contacts are standard Dataverse entities with name, email, phone, address, and lifecycle stage fields. They map directly to Nutshell Contacts. We resolve owner assignments via email match against Nutshell Users and set the owner_id on each Contact record during import. Standard fields including emailaddress1, fullname, telephone1, and address1_composite migrate without transformation. Lifecycle stage values from OPEX 365 CRM are preserved in a custom text field on the Nutshell Contact for reporting continuity.
OPEX 365 CRM
Account
Nutshell
Account
1:1OPEX 365 CRM Accounts map to Nutshell Accounts. The Account is the parent entity for Contacts, so we create Account records before Contact import so that the parent relationship is satisfied at the moment of Contact insert. Industry classification, annual revenue, address, and website fields map to their Nutshell equivalents. AccountNumber and custom account fields migrate as custom fields in Nutshell.
OPEX 365 CRM
Opportunity
Nutshell
Deal
1:1OPEX 365 CRM Opportunities map to Nutshell Deals. The estimatedclosedate, closeprobability, and pipelineid from Dataverse migrate to Nutshell's close_date, probability, and pipeline stage fields. The OPEX 365 CRM pipeline stage name is preserved as a custom field on the Deal so the customer's admin can map it to the correct Nutshell deal stage during configuration. We do not migrate Dynamics-specific opportunity fields (opportunityproduct, msdyn_forecastcategory) that have no Nutshell equivalent.
OPEX 365 CRM
Pipeline and Stage
Nutshell
Pipeline and Stage
lossyPipeline and stage configurations are organizational metadata in OPEX 365 CRM and do not migrate automatically. We document the source pipeline structure, stage names, and stage probabilities during the discovery phase and deliver a written stage mapping table. The customer's admin recreates the pipeline in Nutshell before migration runs. We then remap opportunity records to the new Nutshell stage values using the documented mapping.
OPEX 365 CRM
Lead
Nutshell
Contact
many:1OPEX 365 CRM Leads (when present as a separate Dataverse entity) do not have a direct Nutshell equivalent because Nutshell does not have a separate Lead object. Lead records merge into Nutshell Contacts, and the original lead status from OPEX 365 CRM is preserved in a custom field on the merged Contact record. If the customer used Lead scoring in OPEX 365 CRM, the score value migrates as a custom numeric field on the Contact.
OPEX 365 CRM
Incident (Case)
Nutshell
Case
1:1OPEX 365 CRM Cases (incidents) map to Nutshell Cases with title, description, status, priority, and originating Contact and Account references. Case history and entitlement associations migrate as linked Case Activity records. If the customer's OPEX 365 CRM deployment includes custom case fields, we map them to Nutshell custom fields.
OPEX 365 CRM
Activity (activitypointer)
Nutshell
Activity (Task, Call, Meeting, Email)
1:1OPEX 365 CRM Activities (emails, phone calls, tasks, appointments) stored as activitypointer records require polymorphic activityparty resolution before migration. We run a referential integrity pass that resolves each activityparty.partyid reference to its correct target type (Contact, Account, Lead, or User) and its Nutshell record ID. Activities that reference missing targets receive placeholder records to preserve the relationship. After resolution, we map emails to Nutshell emails, calls to Nutshell calls, tasks to Nutshell tasks, and meetings to Nutshell meetings with timestamps and descriptions preserved.
OPEX 365 CRM
Annotation (Note and Attachment)
Nutshell
Note and Attachment
1:1Notes and email attachments in OPEX 365 CRM are stored as annotation entities with base64-encoded content. We extract annotation records separately using the Dataverse RetrieveContent放电 API and store binary content in our staging blob storage. Notes migrate as Nutshell notes linked to their parent Contact, Account, Deal, or Case. Attachments are uploaded via Nutshell's file attachment endpoint and linked to the corresponding record using the objectid reference. This is a distinct step in the migration sequence required to avoid silent data loss.
| OPEX 365 CRM | Nutshell | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Account | Account1:1 | Fully supported | |
| Opportunity | Deal1:1 | Fully supported | |
| Pipeline and Stage | Pipeline and Stagelossy | Fully supported | |
| Lead | Contactmany:1 | Fully supported | |
| Incident (Case) | Case1:1 | Fully supported | |
| Activity (activitypointer) | Activity (Task, Call, Meeting, Email)1:1 | Fully supported | |
| Annotation (Note and Attachment) | Note and Attachment1: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.
OPEX 365 CRM gotchas
Dataverse API rate limits vary by license tier
Custom entity schemas require manual enumeration
Activity Party relationships are polymorphic and fragile
Legacy attachment storage requires separate extraction
Nutshell gotchas
Contact tier limits enforced on import
No bulk API endpoint requires paginated extraction
Email sequences not exportable via API
Foundation plan disables key sales features
Pair-specific challenges
Migration approach
Schema discovery and custom entity enumeration
We connect to the OPEX 365 CRM Dataverse environment via the Dataverse Web API and run a schema discovery scan against the EntityDefinitions endpoint. This enumerates all standard and custom entities, their attribute metadata (data types, required flags, picklist values), and lookup relationships. We cross-reference this with the customer's Nutshell instance to identify which custom entities have direct Nutshell equivalents and which require custom field or note block mapping. The discovery output is a written entity inventory and field mapping document that serves as the basis for the migration specification.
Data quality assessment and cleansing
We run a data quality report against the extracted OPEX 365 CRM records, identifying incomplete records, duplicate Contacts and Accounts, inconsistent address formats, and missing required fields. We deliver a data quality summary to the customer with row counts for each issue category. Data cleansing (deduplication, format normalization, missing field completion) is performed in the source before export. Post-migration cleanup costs 3-5x more in labor than pre-migration cleansing because the team is learning Nutshell while simultaneously fixing data quality issues, so we flag this as a required phase rather than optional.
Nutshell target schema configuration and sandbox validation
We configure the Nutshell target schema based on the discovery output. This includes provisioning custom fields to match OPEX 365 CRM custom entity fields, configuring deal stages to match the documented OPEX 365 CRM pipeline structure, and setting up Account-Contact and Account-Deal relationship layouts. The migration runs first in a Nutshell sandbox or a temporary test environment so the customer's admin can validate record counts, field mappings, and activity associations before production migration begins. Any mapping corrections are documented and applied to the production migration specification.
Owner reconciliation and User provisioning
We extract every distinct OPEX 365 CRM owner referenced on Contacts, Accounts, Deals, Cases, and Activities and match by email against the Nutshell User table. Owners without a matching Nutshell User are placed in a reconciliation queue for the customer's admin to provision before record import resumes. Migration cannot proceed past the main object import phase until all Owner references are resolved, because owner_id is required on standard Nutshell objects.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (from OPEX 365 CRM Accounts) are created first so that the parent relationship is available for Contacts. Contacts follow with owner_id and parent Account resolved. Deals are imported with AccountId, OwnerId, and close_date mapped. Cases migrate with originating Contact and Account resolved. Activity history (calls, emails, tasks, meetings) migrates after parent records are confirmed, with activityparty resolution applied. Annotations (notes and attachments) are extracted separately and uploaded as a distinct final phase. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and workflow inventory handoff
We freeze OPEX 365 CRM writes during cutover, run a final delta migration of any records modified during the migration window, then enable Nutshell as the system of record. We deliver a written inventory of OPEX 365 CRM workflows, automations, and pipeline configurations with recommended Nutshell equivalents for the customer's admin to rebuild. We support a one-week hypercare window where we resolve reconciliation issues raised during initial Nutshell use. We do not rebuild OPEX 365 CRM workflows as Nutshell automations inside the migration scope; that work is a separate engagement.
Platform deep dives
OPEX 365 CRM
Source
Strengths
Weaknesses
Nutshell
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across OPEX 365 CRM and Nutshell.
Object compatibility
2 of 8 objects need a mapping; the rest are 1:1.
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
OPEX 365 CRM: Varies by license tier and environment; not publicly documented for all tiers.
Data volume sensitivity
OPEX 365 CRM 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 OPEX 365 CRM to Nutshell migration scoping. Not seeing yours? Book a call.
Walk through your OPEX 365 CRM to Nutshell migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave OPEX 365 CRM
Other ways to arrive at Nutshell
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.