CRM migration

Migrate from Odoo CRM to Nutshell

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

Odoo CRM logo

Odoo CRM

Source

Nutshell

Destination

Nutshell logo

Compatibility

70%

7 of 10

objects map 1:1 between Odoo CRM and Nutshell.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Try the reverse

Nutshell
Odoo CRM

Overview

What this migration involves

Moving from Odoo CRM to Nutshell is a structural migration that reduces complexity on the destination side. Odoo uses a relational PostgreSQL data model where Leads and Opportunities share the crm.lead table with a type discriminator, pipeline Stages live in crm.stage ordered per team, and Activities are mail.activity records linked to leads. Nutshell uses a flatter People and Companies model with a single Lead object that covers both inbound prospects and open deals, custom fields scoped per record type (People, Company, Lead), and activities stored as a unified task log. We map Odoo's crm.lead type='lead' and type='opportunity' records to Nutshell Lead, preserve Odoo's stage names as Nutshell pipeline stage labels, and store the original Odoo type as a custom field for audit. Activity history migrates as Nutshell Tasks linked to the parent Lead. We do not migrate Odoo automation rules, AI lead scoring, or Enterprise-only modules — we deliver a written inventory of these for the customer's admin to evaluate against Nutshell's built-in automation alternatives.

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

Odoo CRM logo

Odoo CRM

What's pushing teams away

  • Mail and Gmail integration is repeatedly cited on Reddit and G2 reviews as unreliable — email threads drop, conversations scatter across inboxes, and the sync between Odoo and Gmail breaks under common configurations.
  • Setup complexity grows with business size: reviews note that advanced features require additional configuration and customization, and costs rise steeply once multiple paid apps and users are stacked together.
  • Support response times frustrate Enterprise customers who encounter bugs during version upgrades, with some noting that critical issues go unresolved for weeks.
  • Some teams migrate away from Odoo toward modern CRMs like Attio because they want a slicker, more opinionated UX rather than Odoo's broad-but-configurable interface.
  • Companies leave Odoo.sh specifically when they want more control over their infrastructure — alternatives like udoocloud.pro target users who want direct shell access and no platform vendor lock-in.

Choosing

Nutshell logo

Nutshell

What's pulling them in

  • Lowest cost entry point among mid-market CRMs—Foundation plan starts at $13/user/month, making it accessible for teams validating CRM fit before committing.
  • Integrated sales automation and email sequencing on Pro plans without requiring a separate email marketing platform, per verified Capterra reviews.
  • Consistently praised for intuitive interface and fast onboarding, with case studies reporting 100% team adoption rates within initial deployment periods.
  • Strong customer support responsiveness cited across G2 reviews, with dedicated support tiers available on Enterprise plans.
  • Native integrations with WhatsApp, Facebook Messenger, Instagram, and Slack reduce reliance on third-party middleware for common communication channels.

Object mapping

How Odoo CRM objects map to Nutshell

Each row shows how a Odoo 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.

Odoo CRM

Contact / Partner (res.partner)

maps to

Nutshell

Person

1:1
Fully supported

Odoo's res.partner records with customer=True map to Nutshell Person. Standard fields (name, email, phone, street, city, state, country, website) migrate directly. Partners that are companies (is_company=True) map to Nutshell Company instead. We resolve the is_company flag at export time to direct records to the correct Nutshell object. Partner tags (res.partner.category) migrate as Nutshell Person tags.

Odoo CRM

Company (res.partner where is_company=True)

maps to

Nutshell

Company

1:1
Fully supported

Odoo partners flagged is_company=True map to Nutshell Company. Company name, website, phone, and address fields migrate directly. The Nutshell Company is created before any Person import so that the Person-to-Company link is satisfied at insert time. Parent-company hierarchies in Odoo (commercial_partner_id) map to Nutshell's Parent Company relationship.

Odoo CRM

Lead (crm.lead where type='lead')

maps to

Nutshell

Lead

1:1
Fully supported

Odoo Leads with type='lead' map directly to Nutshell Lead. Key fields include name, contact_name, email_from, phone, source_id (mapped to Nutshell Source), and stage_id. The original Odoo type discriminator is stored in a custom field odoo_record_type__c as 'lead' for audit and reconciliation. Lead priority maps from Odoo's priority field to Nutshell's Lead priority.

Odoo CRM

Opportunity (crm.lead where type='opportunity')

maps to

Nutshell

Lead

1:many
Fully supported

Odoo Opportunities (crm.lead with type='opportunity') map to Nutshell Lead with the original Odoo type stored in odoo_record_type__c as 'opportunity'. Expected revenue and probability from Odoo migrate to Nutshell Lead monetary fields and a custom probability field respectively. The Odoo opportunity-to-Lead conversion is not required in Nutshell because Nutshell uses a single Lead object for both inbound prospects and active deals; the customer's sales process determines whether a Lead represents a prospect or an active opportunity.

Odoo CRM

Pipeline Stage (crm.stage)

maps to

Nutshell

Pipeline Stage

lossy
Fully supported

Odoo pipeline stages migrate to Nutshell pipeline stage labels. Stage names and order are preserved. We configure Nutshell pipeline stages during setup to match Odoo's crm.team.stage.rel ordering per team. Custom stages added via Odoo Studio are included in the export and created as Nutshell stage labels before Leads are imported. Probability percentages from Odoo's stage model migrate to informational custom fields in Nutshell since Nutshell's stage probabilities are system-managed.

Odoo CRM

Sales Team (crm.team)

maps to

Nutshell

Team

1:1
Fully supported

Odoo Sales Teams (crm.team) map to Nutshell Teams for territory and quota management. Team member assignments (crm.team.member_ids) migrate as Nutshell Team membership records. We map team names and preserve the team-user assignment so that territory-based reporting continues in Nutshell. If Nutshell's team model does not support the customer's full team hierarchy, we document the gap in the migration findings report.

Odoo CRM

Activity / Task (mail.activity)

maps to

Nutshell

Task

1:1
Fully supported

Odoo mail.activity records migrate to Nutshell Tasks linked to the parent Lead. Activity type, date_deadline, user_id (resolved via email to Nutshell User), and note migrate as Nutshell Task subject, due date, assigned User, and description. We preserve the original Odoo activity date for timeline ordering. High-volume activity exports are chunked and sequenced after parent Lead records are confirmed in Nutshell to avoid orphaned task references.

Odoo CRM

Custom Field (crm.lead custom columns)

maps to

Nutshell

Custom Field (People, Company, Lead)

lossy
Fully supported

Odoo custom fields defined via Studio or custom addons are stored as columns in crm.lead. We export field definitions alongside data and map them to Nutshell custom fields by type: Odoo char/text maps to Nutshell Text or Long Text, Odoo float/monetary maps to Nutshell Currency, Odoo date/datetime maps to Nutshell Date, Odoo selection maps to Nutshell Dropdown, and Odoo many2one/many2many map to informational text fields in Nutshell since Nutshell does not support relational custom field types. The customer selects the field mapping strategy during scoping.

Odoo CRM

Tag (crm.tag)

maps to

Nutshell

Tag (People, Company, Lead)

1:1
Fully supported

Odoo CRM tags are a many2many on crm.lead and map to Nutshell tags on the corresponding Lead record. Tag names are preserved as a flat list. Custom tags added via Odoo Studio are included in the export and created in Nutshell before Lead import. If the customer used tags for lead scoring classification, we note this in the findings report since Nutshell's tag model is label-only and does not carry numeric scores.

Odoo CRM

Attachment (ir.attachment linked to crm.lead)

maps to

Nutshell

File

1:1
Fully supported

Odoo ir.attachment records linked to crm.lead via res_model/res_id are exported from the filestore and re-linked to the corresponding Nutshell Lead as file attachments. Large attachment volumes are chunked separately and uploaded after parent Lead records are confirmed. We do not migrate ir.attachment records linked to non-CRM Odoo models (e.g., account.invoice attachments) since those objects are outside CRM scope.

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.

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

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

Pair-specific challenges

  • Odoo Lead and Opportunity share one table with no direct Nutshell equivalent

    Odoo stores Leads and Opportunities in the same crm.lead table with a type discriminator (type='lead' vs type='opportunity'). Nutshell uses a single Lead object for both inbound prospects and active deals with no built-in type field. We resolve this by storing the original Odoo type in a custom field odoo_record_type__c on every migrated Lead. This preserves the distinction for reporting and audit but requires the customer's admin to configure any stage-based filtering for opportunities in Nutshell manually. Migrations that skip this custom field lose the ability to differentiate the original record type in Nutshell's reporting views.

  • Odoo Community API access is gated behind the Custom Plan

    The Odoo External API (XML-RPC) is available without additional cost only for Odoo Enterprise customers on the Custom Plan. Community edition users running on Odoo Online or self-hosted Community do not have guaranteed API access via the standard endpoint. We check API availability during discovery and fall back to a direct read-only PostgreSQL connection to the Odoo database for Community-source migrations. The database connection method requires network access to the PostgreSQL host and a read-only database user with access to the Odoo schema.

  • Nutshell custom fields have restricted types compared to Odoo Studio

    Nutshell custom fields support Text, Long Text, Currency, Date, Checkbox, Dropdown, and Multi-Select types. Odoo Studio custom fields can include many2one (lookup to another model), many2many (multi-record relationship), and binary (file) types that have no direct Nutshell equivalent. We export the full field definition set during discovery and remap relational Odoo fields to informational text fields in Nutshell, noting which lookups are demoted to plain-text references. The customer reviews the remapping during scoping and approves the field strategy before migration.

  • Odoo automation rules and AI lead scoring are Enterprise-only and do not migrate

    Odoo's CRM automation rules (base.action.rule, ir.actions.server scoped to CRM) and predictive lead scoring (crm.scoring.rule) are Enterprise-exclusive features that depend on Odoo's action framework and AI infrastructure. Nutshell Workflow Rules (available from Pro tier) provide automation triggers, conditions, and actions but are a different model with different capabilities. We export a written inventory of every active Odoo automation rule and scoring rule with its trigger, conditions, actions, and recommended Nutshell Workflow Rule equivalent. The customer's admin rebuilds automations post-migration using Nutshell's builder.

  • Activity history can exceed single-batch import capacity

    Odoo mail.activity tables in active sales deployments frequently contain hundreds of thousands of records. Nutshell's import interface accepts records in batches, and large activity imports require sequencing after parent Lead records are confirmed present to avoid orphaned task references. We chunk activity exports into batches of 5,000 records, validate parent-record resolution per batch, and remap the Odoo user_id to Nutshell User by email lookup. Any HubSpot-style email thread threading is flattened to individual task entries since Nutshell's activity timeline is record-level, not thread-level.

Migration approach

Six steps for a successful Odoo CRM to Nutshell data migration

  1. Discovery and data audit

    We audit the source Odoo database across edition (Community vs Enterprise vs Odoo.sh), version, installed modules, custom fields on crm.lead and res.partner, pipeline stage count and order, sales team configuration, activity volume estimates, and any custom addons that extend the CRM model. For Community sources without API access, we establish a read-only PostgreSQL connection to the Odoo database. The discovery output is a written migration scope document that lists every object to migrate, every custom field with its target Nutshell type, every Enterprise-only feature to flag, and the lead/opportunity split rule.

  2. Field mapping design and Nutshell schema setup

    We design the field mapping from Odoo to Nutshell for every standard and custom field, remapping Odoo relational types (many2one, many2many) to Nutshell text equivalents where no direct type exists. We create Nutshell custom fields on the People, Company, and Lead objects to carry Odoo's custom fields and the odoo_record_type__c discriminator. Pipeline stages are created in Nutshell with names and order matched to Odoo's crm.team.stage.rel configuration. This schema is validated in Nutshell's sandbox before any data loads.

  3. Sandbox migration and reconciliation

    We run a full migration into a Nutshell trial or sandbox environment using a representative data sample. The customer's CRM lead reconciles record counts (People in, Companies in, Leads in, Tasks in), spot-checks 20-40 random records against the Odoo source for field accuracy, and reviews the activity timeline on sample Leads. Any mapping corrections, field type issues, or stage configuration gaps surface here before production migration begins.

  4. Owner reconciliation and User provisioning

    We extract every distinct Odoo user referenced on crm.lead records (create_uid, write_uid) and activity records and match by email against the destination Nutshell team's User list. Owners without a matching Nutshell User go to a reconciliation queue for the customer's admin to provision before record import resumes. Activity assignments in Odoo map to Nutshell Task assignments by the same email-lookup resolution.

  5. Production migration in dependency order

    We run production migration in record-dependency order: Companies first (since People link to them), then People, then Leads (with odoo_record_type__c populated from the crm.lead type field), then Tags, then Activity history as Tasks linked to parent Leads. Each phase emits a row-count reconciliation report before the next phase begins. Custom fields are mapped per the approved field strategy. File attachments from Odoo's ir.attachment table are uploaded as Nutshell files linked to the corresponding Lead after parent-record confirmation.

  6. Cutover, validation, and automation inventory handoff

    We freeze Odoo writes during cutover, run a final delta migration of any records modified during the migration window, then designate Nutshell as the system of record. We deliver the written Odoo automation and scoring inventory document to the customer's admin team with Nutshell Workflow Rule equivalents documented for each automation. We support a five-business-day hypercare window for reconciliation issues raised by the sales team. We do not rebuild Odoo automation rules as Nutshell Workflow Rules inside the migration scope; that work uses the inventory document as its input and is an admin task or separate engagement.

Platform deep dives

Context on both ends of the pair

Odoo CRM logo

Odoo CRM

Source

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

Nutshell

Destination

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

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 Odoo CRM and Nutshell.

  • 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

    Odoo CRM: Not publicly documented; no published rate limit found in Odoo's official developer documentation.

  • Data volume sensitivity

    B

    Odoo CRM doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

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

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

Can't find your answer?

Walk through your Odoo CRM to Nutshell migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Odoo CRM to Nutshell migrations land between three and five weeks for accounts under 15,000 Contacts, 3,000 Opportunities, and no custom addon fields. Migrations with custom Odoo Studio fields, large activity histories (over 200,000 mail.activity records), or multi-team CRM configurations move to six to ten weeks because of field-type remapping, activity threading, and the Enterprise feature audit. Discovery and scoping add one to two weeks before migration begins.

Adjacent paths

Related migrations to explore

Ready when you are

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