CRM migration

Migrate from Odoo Field Service to Nutshell

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

Odoo Field Service logo

Odoo Field Service

Source

Nutshell

Destination

Nutshell logo

Compatibility

90%

9 of 10

objects map 1:1 between Odoo Field Service and Nutshell.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Odoo Field Service is a field-service-management module inside the broader Odoo ERP ecosystem. It tracks field tasks, work orders, technician assignments, location hierarchies, equipment, product consumption, and timesheet logs across Odoo's project, inventory, and accounting modules. Nutshell is a standalone CRM built around three primary objects: Company, Person, and Deal, with optional custom fields for Companies, Persons, and Leads. Nutshell has no native field-service task object, so Odoo field tasks migrate as Nutshell Deals with a custom priority field, and task status maps to Deal stages. Odoo technician records become Nutshell Persons with a Role set to 'Technician', and Odoo customer and location data map to Nutshell Company records. Our migration reads from Odoo's XML-RPC API, and we write into Nutshell via their REST API. We surface Odoo's custom fields, location hierarchies, equipment records, and multi-technician assignments as Nutshell custom fields — giving your team a clean reference point to rebuild workflows, scheduling rules, and equipment-tracker logic inside Nutshell's automation framework after 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

Odoo Field Service logo

Odoo Field Service

What's pushing teams away

  • High implementation cost: users report that per-user pricing plus partner consulting fees make Odoo FSM expensive relative to standalone FSM alternatives for teams under 20 users.
  • Steep learning curve: multiple reviews cite the broad feature set as overwhelming for new users, with onboarding requiring significant time investment before teams feel productive.
  • Bank reconciliation pain: uploading bank statements does not automatically match transactions to invoices, forcing manual review that frustrates accounting-focused users.
  • Mobile limitations in the field: users report difficulties accessing information on the mobile app in rural areas or with limited connectivity, directly undermining the field service use case.
  • Feature-rich but customization-heavy: power users note that achieving specific business workflows requires developer customization, which becomes technical debt during upgrades.

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 Field Service objects map to Nutshell

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

field.service.task

maps to

Nutshell

Deal

1:1
Fully supported

Odoo FSM tasks have priority, stage, assigned technician, location, scheduled date, duration, product lines, timesheet entries, and customer signature. Nutshell has no native FSM task object, so tasks migrate as Nutshell Deals with a custom Priority field, and Odoo task stages map to Nutshell Deal stages.

Odoo Field Service

res.partner (Technician type)

maps to

Nutshell

Person

1:1
Fully supported

Odoo partner records marked as technicians are imported directly as Nutshell Person records. We set the Role field on each Person to 'Technician' and copy the name, email, phone, and mobile number. The original Odoo partner ID is stored in a custom field (Odoo_Partner_ID__c) for traceability and post-migration reconciliation. If the technician's email matches an existing Nutshell user, that user becomes the Person record owner, enabling immediate Deal assignment.

Odoo Field Service

res.partner (Customer type)

maps to

Nutshell

Company + Person

many:1
Fully supported

Odoo customer partners with an address become a Nutshell Company record. The customer's contact person under that partner becomes a linked Nutshell Person record with a role of 'Customer'. Multi-contact Odoo partners collapse to a primary Nutshell Person plus additional Person records linked to the same Company.

Odoo Field Service

field.service.location

maps to

Nutshell

Company (address fields) + Custom Fields

1:1
Fully supported

Odoo's nested location model (site > building > floor > room) does not have a Nutshell equivalent. We flatten each location to the full street address on the target Company record and surface the parent-child hierarchy as a Custom Field for reference. Locations without an Odoo partner are imported as standalone Nutshell Companies.

Odoo Field Service

product.product / field.service.product.line

maps to

Nutshell

Deal (line items)

1:1
Fully supported

Products consumed on Odoo FSM tasks — parts, labor rates, service fees — migrate as line items on the corresponding Nutshell Deal. We preserve product name, quantity, and unit price. Odoo product categories that have no Nutshell equivalent become deal notes for manual categorization after migration.

Odoo Field Service

field.service.equipment / maintenance.equipment

maps to

Nutshell

Company Custom Fields

1:1
Fully supported

Odoo equipment records carry serial number, equipment type, maintenance schedule, and linked location. Nutshell has no asset object, so we store the equipment name, serial number, and linked location as Custom Fields on the related Nutshell Company. Full equipment-tracker capability requires a post-migration third-party asset tool.

Odoo Field Service

field.service.tag

maps to

Nutshell

Person / Company Custom Fields

1:1
Fully supported

Odoo FSM tags on tasks and locations migrate as comma-separated text in a Nutshell Custom Field (Tags__c) on the related Person or Company record. Tag groups are preserved in the field label so the team knows which taxonomy each tag set belongs to.

Odoo Field Service

mail.message (task chatter)

maps to

Nutshell

Note

1:1
Fully supported

Odoo task chatter — internal notes, customer messages, and system logs — migrates as Nutshell Notes attached to the corresponding Deal. Each note preserves the original author, creation timestamp, and body text. Attachment references are stored as URLs pointing to the exported file store.

Odoo Field Service

account.analytic.line / timesheet

maps to

Nutshell

Deal Custom Fields

1:1
Fully supported

Technician timesheet entries logged against Odoo FSM tasks do not map to a native Nutshell object. We roll up total hours per task into a custom Number field (Total_Hours__c) on the target Nutshell Deal and store individual timesheet entries as JSON in a Long Text custom field for audit purposes.

Odoo Field Service

Odoo Custom Fields (ir.model.fields)

maps to

Nutshell

Nutshell Custom Fields

1:1
Fully supported

Any Odoo custom fields on field.service.task, res.partner, or field.service.location — including custom pick-list values, computed fields, and Odoo Studio fields — are read from ir.model.fields and reproduced as Nutshell Custom Fields on the corresponding Company or Person record, preserving data type, required flag, and pick-list options.

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 Field Service logo

Odoo Field Service gotchas

High

Database version upgrade is not a direct restore

Medium

Custom fields use x_ column naming that can collide

Medium

ir.attachment binaries can exceed API upload limits

Low

Chatter messages use HTML that requires sanitization

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 19 absorbed Field Service into Planning — FSM data lives in different tables by Odoo version

    Starting with Odoo 19.2, Field Service was officially discontinued and merged into the Odoo Planning application. The field.service.task model still exists in the database but is populated differently depending on whether you are on Odoo 15, 16, 17, 18, or 19. In Odoo 19 Planning, tasks are generated from planning.slot or project.task records rather than field.service.task directly. We probe the Odoo API during discovery to determine which model holds your FSM task data, then adjust the API query accordingly. Skipping this version check results in missed records or empty migrations for teams already on Odoo 19.

  • Odoo's nested location hierarchy has no direct Nutshell equivalent

    Odoo Field Service tracks locations with a full parent-child hierarchy (site > building > floor > room) via field.service.location, with each level stored as a separate related record. Nutshell Company has a single address model with no concept of sub-location hierarchy. We flatten each Odoo location to the top-level street address and surface the hierarchy as a custom Location_Level__c text field showing the full path (e.g., 'HQ / Building A / Floor 3 / Room 301'). Teams that depend on granular room-level scheduling must rebuild that logic using Nutshell custom fields or a third-party scheduling integration after migration.

  • Odoo multi-technician task assignments collapse to one Nutshell Deal owner

    Odoo Field Service allows assigning multiple technicians to a single task — each with their own role, scheduled hours, and timer. Nutshell's Deal object is owned by a single user. When an Odoo task has more than one technician, we assign the primary technician as the Deal owner and concatenate secondary technician names and their role assignments into a custom field (Additional_Technicians__c). This preserves the full team roster for audit purposes but requires post-migration review to redistribute work if your team uses multi-technician task logic.

  • Odoo invoicing and payment history does not migrate to Nutshell

    Odoo Field Service ties into Odoo Accounting — account.move records track invoicing, payments, and reconciliation linked to FSM tasks. Nutshell is a CRM and does not generate invoices or record payments. We do not migrate Odoo accounting records. The monetary value of tasks (from Odoo sale.order or account.move lines) is captured as the Nutshell Deal value, but open invoices, payment status, and reconciliation history must stay in Odoo Accounting or move to a dedicated accounting platform. We export the Odoo invoice records as a CSV reference file for your finance team to import into their accounting system.

  • Nutshell has no native equipment or asset management object

    Odoo Maintenance and Odoo FSM store equipment records with serial numbers, maintenance schedules, warranty dates, and linked locations in maintenance.equipment. Nutshell has no native asset or equipment management object. We capture the equipment name, serial number, maintenance schedule, warranty expiration, and the Odoo-linked location as separate custom fields on the Nutshell Company record. Any service contract references and parts replacement history are stored as a JSON payload in a long-text custom field. This approach retains equipment identification for reporting but does not replicate Odoo's maintenance calendar; teams requiring scheduling alerts should integrate a dedicated CMMS after cutover.

Migration approach

Six steps for a successful Odoo Field Service to Nutshell data migration

  1. Odoo FSM version discovery and object inventory

    We connect to your Odoo instance via XML-RPC and probe the database schema to determine which Odoo version is running and where FSM task data lives (field.service.task for versions 15–18, planning.slot / project.task for Odoo 19 Planning). We inventory all active Odoo modules, count field.service.task records, res.partner records (technician and customer types), field.service.location records, product.product lines used in FSM, maintenance.equipment records, and any custom fields defined via ir.model.fields. This discovery output drives the migration scope and timeline estimate.

  2. Nutshell schema preparation and owner resolution

    Before data moves, we create the Nutshell Custom Fields needed to receive Odoo's FSM-specific data — custom_priority__c, custom_planned_hours__c, custom_total_hours__c, custom_gps_latitude__c, custom_gps_longitude__c, custom_signature__c, custom_equipment_name__c, custom_serial_number__c, custom_parent_location__c, tags__c, custom_original_create_date__c, and custom_last_modified_date__c on Companies and Deals. We also resolve Odoo technician partner IDs to Nutshell users by email match so Deal owners can be assigned correctly. Any technician without a matching Nutshell user is flagged for your team to create the user account before the full run.

  3. Technicians and customers first, tasks second

    Nutshell Deals require a valid accountId (Company) and ownerId (user) to be saved. We sequence the migration to resolve these foreign keys first: Odoo technician partners become Nutshell Persons with Role = Technician, Odoo customer partners become Nutshell Companies with their contact Persons, and Odoo locations become Companies (or supplemental address data on existing Companies). Only after all Companies and Persons are committed does the FSM task-to-Deal migration run, ensuring every Deal can link to its customer Company and assigned technician owner without orphan records.

  4. Sample migration with field-level diff

    A representative slice of 100–500 records migrates first — spanning technician Persons, customer Companies, location records, FSM Tasks as Deals, and a sample of product line items and timesheet entries. We generate a field-level diff comparing the source Odoo record values against the destination Nutshell record values, so you can verify priority mapping, stage mapping, location address flattening, and owner resolution before the full run commits. You approve the diff before we proceed to the full migration.

  5. Full migration run with delta-pickup window

    The full Odoo FSM dataset migrates into Nutshell. A delta-pickup window — typically 24–48 hours — captures any Odoo FSM tasks, technician updates, or location changes made during the cutover while your team continues working in Odoo. FlitStack AI uses scoped read access on Odoo during this window so your team is not locked out. After the delta window closes, we stop writes to Odoo, re-run any changed records into Nutshell, and run a reconciliation count check against the source record totals before declaring the migration complete.

  6. Post-migration validation and manual-rebuild handoff

    We run a full reconciliation pass: total Deal count vs. Odoo task count, total Company count vs. Odoo customer partner count, and a field sampling check on custom fields. We deliver an exported CSV of Odoo equipment records, Odoo FSM workflow definitions (for manual rebuild reference), and the Odoo invoice CSV for your finance team. Any unmapped data is documented in a gap report. FlitStack AI's audit log records every operation, and one-click rollback is available if reconciliation fails.

Platform deep dives

Context on both ends of the pair

Odoo Field Service logo

Odoo Field Service

Source

Strengths

  • All-in-one ERP integration: FSM tasks automatically link to Sales orders, Invoices, and Inventory without manual re-entry.
  • Multiple planning views: Kanban, Gantt, Calendar, and Map give dispatchers flexibility to plan by workflow, timeline, time slot, or geography.
  • Mobile app for field technicians: covers end-to-end task completion including worksheet filling, parts recording, and signature capture.
  • Free tier available: Odoo Online One App Free plan lets small teams evaluate FSM before committing to a paid subscription.
  • Open-source community: OCA maintains field-service-maintenance and other FSM extensions that extend functionality beyond the core module.

Weaknesses

  • Per-user pricing scales directly: every technician, dispatcher, and admin adds to the monthly bill, making it expensive for large field teams.
  • Bank reconciliation is manual: the accounting module does not auto-match bank statements to invoices, requiring accounting staff to review mismatches manually.
  • iOS navigation bug: clicking Navigate to on task locations fails on iOS devices, breaking route planning in the field for Apple users.
  • Upgrade path requires OpenUpgrade: Odoo database upgrades between versions are not simple restores; community users must use OCA/OpenUpgrade scripts or migrate one version at a time.
  • Limited standalone FSM branding: the module is positioned as one app within the Odoo suite rather than a dedicated FSM product, making it harder to evaluate in isolation.
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 Field Service 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 Field Service: Not publicly documented; Odoo documentation notes timeout thresholds for large exports and imports that effectively cap batch size.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Odoo Field Service to Nutshell migrations complete in 48–72 hours of clock time for under 10,000 records. Odoo versions 19 and above (where Field Service is absorbed into Odoo Planning) add discovery time because we must probe the database schema to find where FSM task data lives. Sets with more than 100,000 records or deep custom-field inventories extend to 5–10 days. The longest single step is typically the pre-migration schema setup — creating Nutshell Custom Fields and resolving Odoo technician partner IDs to Nutshell users before data can move.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Odoo Field Service.
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