CRM migration

Migrate from Nutshell to Odoo CRM

Field-level mapping, validation, and rollback between Nutshell and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.

Nutshell logo

Nutshell

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

69%

9 of 13

objects map 1:1 between Nutshell and Odoo CRM.

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Try the reverse

Odoo CRM
Nutshell

Overview

What this migration involves

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.

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

Nutshell logo

Nutshell

What's pushing teams away

  • Reporting features are considered weak by users—many resort to exporting data and performing analysis in Excel rather than using built-in dashboards.
  • Limited customization options for workflows, fields, and pipeline configurations compared to HubSpot or Salesforce, frustrating power users.
  • Mobile app is described as stripped-down relative to desktop, lacking many features available in the full web application.
  • Jack-of-all-trades positioning means Nutshell lacks the depth in any single area—marketing, service, or advanced sales automation—that growing teams eventually require.
  • Email integration limitations documented by TrustRadius reviewers, with some teams reporting reliability issues during high-volume campaign sends.

Choosing

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How Nutshell objects map to Odoo CRM

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

maps to

Odoo CRM

Contact (under Partner)

1:many
Fully supported

Nutshell 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

maps to

Odoo CRM

Partner

1:1
Fully supported

Nutshell 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

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Nutshell 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

maps to

Odoo CRM

mail.message + crm.activity

1:1
Fully supported

Nutshell 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

maps to

Odoo CRM

crm.team + Stage

lossy
Fully supported

Nutshell 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

maps to

Odoo CRM

crm.stage

lossy
Fully supported

Stage-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

maps to

Odoo CRM

ir.model.fields (custom)

lossy
Fully supported

Nutshell 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

maps to

Odoo CRM

res.users

1:1
Fully supported

Nutshell 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

maps to

Odoo CRM

crm.tag

1:1
Mapping required

Nutshell 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

maps to

Odoo CRM

Not migrated

1:1
Not supported

Nutshell 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

maps to

Odoo CRM

Not migrated

1:1
Not supported

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

maps to

Odoo CRM

Not migrated

1:1
Not supported

Nutshell 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

maps to

Odoo CRM

crm.lead (opportunity type)

1:1
Fully supported

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

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.

Nutshell logo

Nutshell gotchas

High

Contact tier limits enforced on import

Medium

No bulk API endpoint requires paginated extraction

Medium

Email sequences not exportable via API

Medium

Foundation plan disables key sales features

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • Nutshell's flat People-Company model requires Odoo hierarchy resolution

    Nutshell attaches People directly to Companies with no intermediate account concept; Odoo requires Partners (accounts) as parents with Contacts as children. During migration, we must create the Odoo Partner record first, then attach each Nutshell Person as a Contact under it. Records that have a People record but no associated Company require a Partner to be created on-the-fly (using the Person's domain or a placeholder name). Migrations that skip this step produce Contacts without Partners, breaking Odoo's reporting hierarchy and causing duplicate Partner records for the same organization.

  • JSON-RPC pagination adds extraction time for large datasets

    Nutshell's JSON-RPC API has no bulk endpoint; large datasets require paginated cursor-based reads that we chunk into batches with rate-limit awareness. Accounts with 50,000+ People records can see extraction times of several days before any Odoo load begins. We pre-scan the source account's record counts during discovery and account for pagination overhead in the migration timeline. If the customer needs faster extraction, they can use Nutshell's full backup export tool to generate a downloadable JSON file, which we then parse and transform for Odoo ingestion.

  • Odoo stage automation triggers must be rebuilt manually

    Nutshell pipeline stages can carry automation triggers (e.g., send email when moved to Closed-Won). Odoo stage automation is configured via Studio, server actions, or Python code—not via API-importable configurations. We extract all Nutshell stage automation configurations and deliver them as a written list with Odoo-equivalent implementation guidance (CRM Automated Actions or ir.actions.server Python code). The customer's Odoo admin rebuilds these post-migration.

  • Odoo XML-RPC write operations require model-level access rights

    Odoo's XML-RPC API (the standard migration pathway) respects the access rights of the authenticated user. The migration service account must have write access to crm.lead, res.partner, res.partner.contact, and mail.message models. If the customer's Odoo instance uses Record Rules restricting partner creation to specific user groups, the migration will silently skip records. We verify API access rights during sandbox testing and coordinate with the customer's Odoo admin to grant the service account the necessary model-level permissions before production migration.

  • Lead-to-Opportunity conversion is a post-migration action in Odoo

    Nutshell treats Leads and People as parallel record types; Odoo treats Leads as pre-conversion records that become Opportunities via an explicit Convert action. Migrated Nutshell Leads land in Odoo as crm.lead records with lead_type=lead. The customer runs the Convert action on individual or batch Leads to create the related Partner and Contact and generate an Opportunity. We document the conversion workflow and can provide a Python script for batch conversion if the customer wants to process hundreds of Leads programmatically after migration.

Migration approach

Six steps for a successful Nutshell to Odoo CRM data migration

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

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

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

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

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

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

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

Context on both ends of the pair

Nutshell logo

Nutshell

Source

Strengths

  • Simple, intuitive interface with minimal learning curve for sales teams new to CRM
  • Per-seat pricing is transparent and predictable, with annual billing reducing monthly cost
  • Full data export tool available for all account data including backups
  • Open JSON-RPC API allows programmatic access to all core objects
  • Native multichannel engagement (email, SMS, WhatsApp) without third-party add-ons for communication

Weaknesses

  • Reporting and analytics are considered weak, requiring manual Excel exports for detailed analysis
  • No bulk API endpoint—migration requires paginated API reads that must be rate-limited carefully
  • JSON-RPC API is less common than REST, requiring custom integration code compared to standard REST CRMs
  • Add-on costs (Forms, Nutshell IQ, Email Marketing) are per-company charges that stack on top of per-seat pricing
  • Feature restrictions on entry-level plans mean teams often need mid-tier to get basic automation
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Nutshell and Odoo CRM.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • 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

    Nutshell: Not publicly documented in summary form..

  • Data volume sensitivity

    A

    Nutshell exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Nutshell to Odoo CRM 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 Nutshell to Odoo CRM data migrations

Answers to the questions buyers ask most during Nutshell to Odoo CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Migrations under 15,000 People, 5,000 Leads and Deals, and no complex custom field schemas complete in four to six weeks. Migrations with large activity histories (over 200,000 activity records), multiple Nutshell pipelines mapping to separate Odoo crm.teams, or data quality issues requiring pre-migration cleanup move to ten to fourteen weeks. Discovery and sandbox staging account for one to two weeks regardless of size; the remainder is extraction, transformation, and production load.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Nutshell.
Land in Odoo CRM, 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