CRM migration
Field-level mapping, validation, and rollback between Nutshell and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Nutshell
Source
Odoo CRM
Destination
Compatibility
9 of 13
objects map 1:1 between Nutshell and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Try the reverse
Overview
Moving from Nutshell to Odoo CRM is a migration from a standalone sales CRM to an ERP ecosystem where CRM is one module among dozens. Nutshell organizes data as flat People records attached directly to Companies, with Leads as separate records; Odoo uses a Partner-Contact hierarchy where the Partner is the account and Contacts are individuals under it, with Leads feeding a dedicated pipeline before converting to Opportunities. We extract Nutshell data through its JSON-RPC API using paginated cursor-based reads, transform the flat People-Company relationship into Odoo's partner hierarchy with Contact children, route Nutshell Leads into Odoo's crm.lead model, and rebuild pipeline stages as Odoo stage definitions. Nutshell's email sequences, automations, and attachments do not migrate via API; we document each for admin rebuild and flag attachment references that require manual re-attachment post-cutover.
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
Nutshell platform overview
Scorecard, SWOT, gotchas, and pricing for Nutshell.
Destination platform
Odoo CRM platform overview
Scorecard, SWOT, gotchas, and pricing for Odoo CRM.
Data migration guide
The complete Odoo CRM migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Source platform guide
Nutshell migration guide
Understand the data you're exporting from Nutshell before mapping it.
Destination checklist
Odoo CRM migration checklist
Pre- and post-cutover tasks for moving onto Odoo CRM.
Source checklist
Nutshell migration checklist
Exit checklist for unwinding your Nutshell setup cleanly.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Nutshell object lands in Odoo CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Nutshell
People
Odoo CRM
Contact (under Partner)
1:manyNutshell People records map to Odoo Contact records attached to a Partner. We extract People with their associated Company, create the Odoo Partner first (using the Nutshell Company name and domain), then create the Contact child record linking to that Partner. Phone, email, address, and custom fields migrate to the Contact. The Nutshell Person's direct email and phone become the Contact's email and phone; the Nutshell Person's job title maps to Odoo Contact function field.
Nutshell
Company
Odoo CRM
Partner
1:1Nutshell Company records map to Odoo res.partner records with is_company=True. The Company name becomes Partner name, domain becomes website, and any industry classification maps to Odoo's industry field (if installed from base_setup). Address fields from Nutshell map to the Partner's street, city, state, country, and zip. Company-level custom fields migrate to the Partner as custom Char, Selection, or Float fields.
Nutshell
Lead
Odoo CRM
crm.lead
1:1Nutshell Leads are separate records from People and map directly to Odoo's crm.lead model. We preserve lead name, contact information, lead source, and any custom fields. Nutshell Lead status maps to Odoo's lead stage (New, Qualified, Proposal, Negotiation, Won, Lost). The Odoo lead_type field is set to lead for all migrated Nutshell Leads; the customer can convert individual leads to opportunities post-migration which generates an Opportunity and creates the related Partner and Contact.
Nutshell
Activities
Odoo CRM
mail.message + crm.activity
1:1Nutshell Activities (calls, emails, meetings, tasks) linked to People or Companies migrate to Odoo's mail.message records linked to the corresponding Partner or Contact via res_id and model fields. Call disposition, duration, and outcome from Nutshell activity records map to custom fields on the Odoo message record. Activity timestamps are preserved to maintain the chronological timeline.
Nutshell
Pipeline
Odoo CRM
crm.team + Stage
lossyNutshell pipelines map to Odoo crm.team records (one team per pipeline). Each Nutshell pipeline stage becomes an Odoo crm.stage within that team, preserving stage order and win/loss status. Stage probability percentages migrate as stage_sequence values. Teams that used multiple Nutshell pipelines for different lines of business configure each as a separate crm.team in Odoo for territory-level reporting.
Nutshell
Pipeline Stage
Odoo CRM
crm.stage
lossyStage-level data including probability, stage name, and stage order migrate from Nutshell to Odoo crm.stage records. Closed-Won and Closed-Lost states from Nutshell map to Odoo's lost_reason and won_total fields on the lead. Stage-specific automation triggers in Nutshell have no direct Odoo equivalent and are documented for rebuild in Odoo Studio or Python server actions.
Nutshell
Custom Fields
Odoo CRM
ir.model.fields (custom)
lossyNutshell custom fields for Companies, People, and Leads are enumerated during discovery, then created as custom fields on the Odoo Partner (for Company-level) and Contact (for Person-level) models. Custom field types map: Nutshell text to Char, number to Float, dropdown to Selection, date to Date, checkbox to Boolean. Field labels and help text are preserved for user clarity.
Nutshell
Users / Owners
Odoo CRM
res.users
1:1Nutshell Users map to Odoo res.users records by email match. Owner assignments on People, Companies, and Deals resolve to the corresponding Odoo user via this lookup. Any Nutshell Owner without a matching Odoo user is flagged in the reconciliation queue for the customer's admin to provision before record import proceeds.
Nutshell
Tags
Odoo CRM
crm.tag
1:1Nutshell tags on People and Companies migrate to Odoo crm.tag records. Tags are linked to crm.lead via the tag_ids many2many relationship. Tag names are preserved exactly; tag hierarchy (if any exists in Nutshell) is flattened during transfer since Odoo crm.tag does not support hierarchical nesting.
Nutshell
Email Sequences
Odoo CRM
Not migrated
1:1Nutshell email sequences (Pro and Business plans) are automation configurations stored server-side and are not accessible via the JSON-RPC API. We do not migrate sequences. The People records and activity history migrate so the contact context is preserved, but the customer must rebuild email cadences in Odoo using CRM Sales subscription features or a third-party sales engagement tool integrated with Odoo. We document all active sequence names and step counts during discovery.
Nutshell
Attachments
Odoo CRM
Not migrated
1:1The Nutshell API exposes attachment metadata and URLs but does not return binary file blobs directly. We export attachment filenames and storage URLs but cannot automatically download and re-upload files to Odoo's ir.attachment storage. The customer receives a manifest of all attachments with their source record reference and must manually re-upload critical files post-migration, or configure a document management integration to link external storage.
Nutshell
Nutshell IQ (Enrichment)
Odoo CRM
Not migrated
1:1Nutshell IQ provides contact and company data enrichment via a credit-based system. Enrichment data is not stored as a separate API-accessible field—it is displayed inline in the Nutshell UI and derived on request. We do not migrate enrichment data. If the customer uses a data enrichment provider, we can discuss integrating a new enrichment tool (such as Clearbit, FullContact, or LinkedIn Sales Navigator) with Odoo CRM post-migration.
Nutshell
Deals / Opportunities
Odoo CRM
crm.lead (opportunity type)
1:1Nutshell Deals map to Odoo crm.lead records with lead_type=opportunity. The Deal name becomes the Odoo lead name, amount becomes expected_revenue, and close date maps to date_deadline. Nutshell pipeline stage maps to Odoo crm.stage. The related Company (Partner) and Person (Contact) are resolved via the Partner and Contact mapping performed earlier. If Nutshell Deals have multiple line items, these map to Odoo sale.order.line records if the Odoo Sale app is installed.
| Nutshell | Odoo CRM | Compatibility | |
|---|---|---|---|
| People | Contact (under Partner)1:many | Fully supported | |
| Company | Partner1:1 | Fully supported | |
| Lead | crm.lead1:1 | Fully supported | |
| Activities | mail.message + crm.activity1:1 | Fully supported | |
| Pipeline | crm.team + Stagelossy | Fully supported | |
| Pipeline Stage | crm.stagelossy | Fully supported | |
| Custom Fields | ir.model.fields (custom)lossy | Fully supported | |
| Users / Owners | res.users1:1 | Fully supported | |
| Tags | crm.tag1:1 | Mapping required | |
| Email Sequences | Not migrated1:1 | Not supported | |
| Attachments | Not migrated1:1 | Not supported | |
| Nutshell IQ (Enrichment) | Not migrated1:1 | Not supported | |
| Deals / Opportunities | crm.lead (opportunity type)1: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.
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
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
Discovery and data audit
We query the Nutshell JSON-RPC API to enumerate People, Companies, Leads, Activities, Pipelines, custom field definitions, and User accounts. We count records per object, identify null or malformed field values, and flag records that reference a missing parent (People without a Company). The discovery output is a written scope document specifying the exact record counts, any data quality issues requiring pre-migration cleanup, and a mapping plan for each object. We also confirm the customer's Odoo edition (Community vs Enterprise, cloud vs self-hosted) and verify API access credentials.
Sandbox staging and schema pre-creation
We set up a staging environment (Odoo Sandbox or clone of the production database) and pre-create the Odoo schema before any data moves. This includes custom fields on res.partner (for Company-level data), custom fields on res.partner (for Contact-level data under People), crm.tag records for each Nutshell tag, crm.team records for each Nutshell pipeline, and crm.stage records preserving stage order and probabilities. The customer's Odoo admin reviews and approves the schema configuration before staging migration begins.
Sandbox migration and reconciliation
We run a full migration into the staging environment using production record volumes. We reconcile record counts in Odoo against the discovery counts: Partners in equals Companies in, Contacts in equals People in, Leads in equals Nutshell Leads in, and Activities in equals activity record count. The customer's admin spot-checks 25-50 records in Odoo against the Nutshell source for field accuracy, then signs off the staging migration before production begins. Any field mapping corrections happen in staging, not production.
Partner and Contact hierarchy build
We process Nutshell Companies first to create Odoo Partners (is_company=True), then iterate through Nutshell People to create Contact records under the matched Partner. People records that have no associated Nutshell Company are assigned to a placeholder Partner (created using the Person's domain or email domain) and flagged for the customer to merge into the correct Partner post-migration if needed. This step resolves the flat-to-hierarchical transformation that is the primary structural challenge of this migration.
Lead and Opportunity migration
Nutshell Leads migrate to Odoo crm.lead records with lead_type=lead, preserving stage, source, and custom field values. Nutshell Deals migrate as crm.lead with lead_type=opportunity, linked to the Partner created from the Deal's associated Company. If Nutshell Deals reference Products, we map these to Odoo product.product records if the Sale app is installed, otherwise they are flagged as a custom field requiring manual product record creation post-migration.
Activity timeline migration
We migrate Nutshell Activity records (calls, emails, meetings, tasks) as Odoo mail.message records linked to the corresponding Partner or Contact via model=res.partner and res_id. Activity type, body content, timestamp, and owner are preserved. Call duration and disposition from Nutshell are stored as custom message fields in Odoo. This step is performed after Partner and Contact creation to satisfy the foreign key reference.
Production cutover and attachment manifest delivery
We freeze Nutshell writes, run a final delta migration of any records modified during the staging-to-production window, then deliver the Odoo production URL and a post-migration reconciliation report. We deliver the attachment manifest (list of all Nutshell attachment URLs and filenames with parent record reference) so the customer's admin can manually re-upload critical files. We deliver the email sequence and stage automation inventory for rebuild. We provide a one-week hypercare window for reconciliation issues.
Platform deep dives
Nutshell
Source
Strengths
Weaknesses
Odoo CRM
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 Nutshell and Odoo CRM.
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
Nutshell: Not publicly documented in summary form..
Data volume sensitivity
Nutshell 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 Nutshell to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Nutshell to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Nutshell
Other ways to arrive at Odoo CRM
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.