CRM migration
Field-level mapping, validation, and rollback between Opal CRM and Nutshell. We move data and schema; workflows are rebuilt natively in Nutshell.
Opal CRM
Source
Nutshell
Destination
Compatibility
4 of 8
objects map 1:1 between Opal CRM and Nutshell.
Complexity
BStandard
Timeline
2-3 weeks
Overview
Moving from Opal CRM to Nutshell addresses two core pain points: the absence of a documented API in Opal CRM, which forces manual data extraction, and the limited integration ecosystem that makes growing teams hit walls with third-party tools. Nutshell provides unlimited contacts and data storage on all plans, a documented REST API, and native marketing automation starting at the Marketing Pro tier. We extract Opal CRM data via a coordinated manual export, validate record counts against the platform UI, then load into Nutshell in dependency order: Users first, then Companies (if present), then Leads and People, followed by Opportunities, Quotations, and activity history. Tour Plans do not map to a native Nutshell object, so we decompose each plan into a dated task sequence with expense line items stored as structured notes. Quotations carry their approval workflow state as a custom field for the customer to review post-migration. We do not migrate workflows, sequences, or role-based permissions as code; we deliver a written inventory of these for the admin to rebuild in Nutshell.
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 Opal 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.
Opal CRM
Lead
Nutshell
Person or Lead
1:manyOpal CRM Lead records map to Nutshell Person (if the contact has a direct relationship with a sales opportunity) or Nutshell Lead (if the contact is still unqualified). We apply a qualification split rule during scoping based on whether the Lead has an associated Quotation, a closed stage, or a assigned Sales Representative beyond the initial capture. Source attribution (form, upload, campaign) migrates as a custom field or tag. All original Lead timestamps are preserved as created_date and last_modified_date in Nutshell.
Opal CRM
Sales Representative
Nutshell
User
1:1Opal CRM team members (Sales Rep, Manager, Admin roles) map to Nutshell User accounts. We resolve by email address and preserve the role assignment as a note in the handover documentation so the Nutshell admin can assign equivalent permissions (Admin, Standard) post-migration. Role permissions in Opal CRM are not exported as structured data, so we reconstruct the role matrix from the export file's owner-assignment records.
Opal CRM
Company
Nutshell
Company
1:1If Opal CRM captures company data alongside Leads, these map directly to Nutshell Company records. Company name, domain, address, and industry fields migrate 1:1 where present. If Opal CRM stores leads without explicit company records, we create a placeholder Company from the Lead's domain field or leave the Company field blank and document the gap for the customer to complete post-migration.
Opal CRM
Tour Plan
Nutshell
Task (sequence)
1:manyOpal CRM Tour Plans store itinerary data (dates, locations, assigned rep) and expense line items as a single record or flat export. Nutshell has no native Tour or Visit object, so we decompose each Tour Plan into a dated task sequence: one task per scheduled visit with location, date, and linked Person or Lead; individual expense line items are stored as structured notes on the lead visit task or as a custom Expense Notes field. We flag any expense entries that exceed 500 characters for manual review.
Opal CRM
Quotation
Nutshell
Quote or Opportunity (custom fields)
1:1Opal CRM Quotations with line items map to Nutshell Quote records if the destination Nutshell plan includes Quotes, or to Opportunity records with quotation line items stored as structured notes and total value stored as Amount. The Opal CRM approval workflow state (Pending, Approved, Rejected) has no native Nutshell field, so we store it as a custom field quotation_status__c on the Quote or Opportunity. Line item product names, quantities, and unit prices migrate directly.
Opal CRM
Pipeline Stage
Nutshell
Stage (custom field or pipeline mapping)
lossyOpal CRM pipeline stages implied by lead engagement status map to Nutshell stage values or a custom picklist field pipeline_stage__c. We preserve the stage order and probability percentages where available in the export. The customer chooses whether to use Nutshell's default stage set (New, Contacted, Qualified, Proposal, Negotiation, Closed Won, Closed Lost) or to create custom stages during migration setup.
Opal CRM
Activity: Call, Email, Meeting
Nutshell
Activity (Call, Email, Meeting)
1:1Opal CRM activity logs (calls, emails, meetings) against Leads migrate to Nutshell Activity records with the corresponding type. Call duration and disposition, email subject and body, meeting location and attendees map to Nutshell Activity fields where supported, or to structured notes. Activity timestamps are preserved for timeline ordering. Nutshell's native Activity timeline displays these chronologically against the linked Person or Lead.
Opal CRM
Custom Property
Nutshell
Custom Field
lossyOpal CRM custom fields on Leads (and possibly other objects) are identified during discovery and mapped to Nutshell custom fields of matching type. Text fields map to Nutshell text custom fields, date fields to date custom fields, numeric fields to number custom fields. Nutshell requires custom fields to be created before import begins, so we create them during the setup phase using the Nutshell custom fields API. The customer reviews the custom field list and approves any field type decisions before migration.
| Opal CRM | Nutshell | Compatibility | |
|---|---|---|---|
| Lead | Person or Lead1:many | Fully supported | |
| Sales Representative | User1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Tour Plan | Task (sequence)1:many | Fully supported | |
| Quotation | Quote or Opportunity (custom fields)1:1 | Fully supported | |
| Pipeline Stage | Stage (custom field or pipeline mapping)lossy | Fully supported | |
| Activity: Call, Email, Meeting | Activity (Call, Email, Meeting)1:1 | Fully supported | |
| Custom Property | Custom Fieldlossy | 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.
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
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
Discovery and export coordination
We audit the Opal CRM account via the customer's admin access, documenting the total count of Leads, Sales Representatives, Tour Plans, Quotations, and any visible custom fields. Because Opal CRM has no API, we coordinate with the customer to request a manual data export (CSV or database dump) from the platform, validate the export against the UI record counts, and identify any fields that require special handling (Tour Plan expense decomposition, quotation workflow state extraction). We simultaneously map Nutshell destination objects and identify any custom fields required.
Nutshell custom field creation
Before any data loads, we create all required custom fields in Nutshell via the API: quotation_status__c for approval workflow state, any custom Lead or Person fields from Opal CRM, and a pipeline_stage__c picklist if the customer uses custom stages. Nutshell requires custom fields to exist before import, so this step is a prerequisite. The customer reviews and approves the custom field schema before we proceed.
User provisioning in Nutshell
We extract distinct Sales Representatives from Opal CRM and provision corresponding User accounts in Nutshell by email. We document the role assignments (Admin, Manager, Sales Rep) in the handover notes so the Nutshell admin can assign the correct access level. User provisioning is the first production load step because Owner lookups on Leads, Activities, and Opportunities require a valid User ID.
Lead and Person migration in dependency order
We load Leads (qualified records that map to Nutshell Person) and unqualified leads into Nutshell's Lead object. For Leads with an associated Company record, we load Companies first, then resolve the Company ID on the Person or Lead during insert. We apply the qualification split rule (Leads with Quotations or closed stages map to Person) and preserve the original source attribution and created timestamps.
Tour Plan reconstruction as task sequences
We decompose each Opal CRM Tour Plan into a dated task sequence: one task per scheduled visit linked to the assigned Sales Representative and the relevant Lead or Person, with location and visit date as task fields. Expense line items are stored as structured notes or a custom expense field on the visit task. We run a sample of 10-20 Tour Plans through the decomposition logic before full migration to confirm format handling.
Quotation migration with workflow state preservation
We load Quotations as Nutshell Quotes (if available on the destination plan) or as Opportunity records with quotation line items as structured notes. The Opal CRM approval workflow state populates the custom quotation_status__c field. Line item details (product name, quantity, unit price, total) migrate to Quote Line Items or structured notes. The customer reviews the quotation mapping and approves before production load.
Activity history and final cutover
We load call, email, and meeting activity logs as Nutshell Activities linked to the corresponding Person or Lead. Activity timestamps are preserved for timeline ordering. We run a delta check against the source export for any records modified during the migration window, then hand off to the customer for final validation. We deliver the Workflow, Sequence, and Role Permission inventory document for the admin to rebuild in Nutshell. We do not rebuild these as code inside the migration scope.
Platform deep dives
Opal CRM
Source
Strengths
Weaknesses
Nutshell
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 Opal CRM and Nutshell.
Object compatibility
1 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
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 Nutshell migration scoping. Not seeing yours? Book a call.
Walk through your Opal 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 Opal 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.