CRM migration
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
Source
Nutshell
Destination
Compatibility
9 of 10
objects map 1:1 between Odoo Field Service and Nutshell.
Complexity
BStandard
Timeline
48–72 hours
Overview
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.
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 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
Nutshell
Deal
1:1Odoo 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)
Nutshell
Person
1:1Odoo 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)
Nutshell
Company + Person
many:1Odoo 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
Nutshell
Company (address fields) + Custom Fields
1:1Odoo'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
Nutshell
Deal (line items)
1:1Products 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
Nutshell
Company Custom Fields
1:1Odoo 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
Nutshell
Person / Company Custom Fields
1:1Odoo 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)
Nutshell
Note
1:1Odoo 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
Nutshell
Deal Custom Fields
1:1Technician 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)
Nutshell
Nutshell Custom Fields
1:1Any 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.
| Odoo Field Service | Nutshell | Compatibility | |
|---|---|---|---|
| field.service.task | Deal1:1 | Fully supported | |
| res.partner (Technician type) | Person1:1 | Fully supported | |
| res.partner (Customer type) | Company + Personmany:1 | Fully supported | |
| field.service.location | Company (address fields) + Custom Fields1:1 | Fully supported | |
| product.product / field.service.product.line | Deal (line items)1:1 | Fully supported | |
| field.service.equipment / maintenance.equipment | Company Custom Fields1:1 | Fully supported | |
| field.service.tag | Person / Company Custom Fields1:1 | Fully supported | |
| mail.message (task chatter) | Note1:1 | Fully supported | |
| account.analytic.line / timesheet | Deal Custom Fields1:1 | Fully supported | |
| Odoo Custom Fields (ir.model.fields) | Nutshell Custom Fields1: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.
Odoo Field Service gotchas
Database version upgrade is not a direct restore
Custom fields use x_ column naming that can collide
ir.attachment binaries can exceed API upload limits
Chatter messages use HTML that requires sanitization
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
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.
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.
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.
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.
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.
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
Odoo Field Service
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 Odoo Field Service 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
Odoo Field Service: Not publicly documented; Odoo documentation notes timeout thresholds for large exports and imports that effectively cap batch size.
Data volume sensitivity
Odoo Field Service 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 Odoo Field Service to Nutshell migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Odoo Field Service
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.