CRM migration
Field-level mapping, validation, and rollback between Odoo Field Service and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Odoo Field Service
Source
Odoo CRM
Destination
Compatibility
9 of 10
objects map 1:1 between Odoo Field Service and Odoo CRM.
Complexity
BStandard
Timeline
24–48 hours
Overview
Odoo Field Service and Odoo CRM share the same underlying database in Odoo — both use res.partner for contacts, product.product for inventory items, and res.users for owners. The core migration challenge is not a cross-platform export but a module-internal consolidation, because fieldservice.task and crm.lead are separate model families that do not auto-link despite living in one database. We read field service data directly from PostgreSQL and write into the CRM model graph, preserving foreign-key integrity. Tasks that originated from sales orders or helpdesk tickets can be associated to CRM opportunities through the original SO/opportunity link. Equipment records migrate as product.product with variant tracking so CRM users can quote service parts. Service-type classifications, priority levels, scheduling windows, and technician assignments map as custom fields or value-mapped pick-list values. State/status values (New, Confirmed, In Progress, Done, Cancelled) require value-by-value mapping to CRM stage names. Time-tracking entries from field service become project.timesheet records linked to CRM projects. FlitStack AI sequences the migration so partner records exist before tasks, and products exist before equipment-to-product conversion. Workflows, report designs, and access rights do not transfer — those are rebuilt in Odoo Studio post-migration.
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 Odoo CRM, 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
fieldservice.equipment
Odoo CRM
product.product / product.template
1:1Equipment records convert to product.product with serial number stored in product.variant tracked_by_serial. If equipment has child sub-equipment, the hierarchy is preserved as bom结构 (bill of materials) on the parent product or as custom fields on product.product. Brand, model, and maintenance contract dates migrate as product attributes or custom fields on the product record.
Odoo Field Service
fieldservice.task
Odoo CRM
crm.lead / project.task / mail.message
many:1Tasks are distributed across three CRM objects: tasks linked to a customer opportunity become activities on crm.lead (logged as mail.message or project.task depending on whether project.project is enabled); standalone tasks without a sales link migrate as project.task under a CRM-linked project; raw task metadata (service type, scheduling window, priority) is preserved as custom fields on the linked record. The mapping plan determines which pattern applies per task origin (SO-generated, helpdesk-generated, or manual).
Odoo Field Service
res.partner (customer on task)
Odoo CRM
res.partner
1:1Partner records are identical in both modules since Field Service and CRM share the same res.partner model. No conversion is required. Email and address fields are identical. FlitStack AI resolves any orphaned partners by email match and creates new partner records where the email has no match in the destination database.
Odoo Field Service
product.product (service materials on task)
Odoo CRM
product.product
1:1Materials and spare parts logged on fieldservice.task line as product.product records migrate directly since the product model is shared. Product categories, standard prices, and vendorinfo data transfer as-is. If a material was created inline in Field Service without a full product record, FlitStack AI creates the product.product record before linking it to the migrated task activity.
Odoo Field Service
res.users (technician / assignee)
Odoo CRM
res.users
1:1Technician and dispatcher user accounts in Field Service are res.users records identical to CRM users. Owner and assignee assignments on tasks resolve by email match to the destination res.users records. Unmatched users are flagged before migration and assigned to a fallback CRM team member designated by the customer.
Odoo Field Service
fieldservice.location
Odoo CRM
res.partner (address) + google_maps_link
1:1Field service locations store a partner address, GPS coordinates, and location-specific instructions. In CRM, this data maps to the partner's contact address with google_maps_link preserved as a custom char field, and geo-coordinates stored in partner.latitude and partner.longitude if those fields are active in the Odoo configuration.
Odoo Field Service
fieldservice.skill / fieldservice.tag
Odoo CRM
product.tag / custom field on res.partner
1:1Technician skills and task tags in Field Service have no direct CRM equivalent. Skills migrate as a custom m2m field on res.users (Technician_Skills__c analog in Odoo Studio) or as product.tag records for service-type classification. Task tags migrate as a custom tag field on project.task. Customer specifies which model they prefer during planning.
Odoo Field Service
project.project (Field Service project if enabled)
Odoo CRM
project.project
1:1If the Field Service configuration uses project.project to group tasks, the project records migrate 1:1. Odoo CRM can link crm.lead to project.project via project_ids on the lead, enabling service delivery tracking alongside the sales opportunity. The project name, customer link, and stage map directly.
Odoo Field Service
fieldservice.worksheet / attachment
Odoo CRM
ir.attachment
1:1Worksheet PDFs, technician signatures, and uploaded photos stored as ir.attachment in Field Service migrate directly as Odoo's attachment model is shared across all modules. File size limits from the Odoo configuration apply. Inline images in notes are extracted, re-hosted in the destination filestore, and re-linked to the migrated CRM record.
Odoo Field Service
mail.message / mail.activity (task chatter)
Odoo CRM
mail.message / project.task
1:1Task chatter messages and activity logs in Field Service migrate to the linked project.task or crm.lead chatter. Original timestamps, author res.users, and body content (HTML) are preserved. Automated Odoo internal notes and emails sent flag migrate as mail.message records. Customer portal messages are preserved but access rights on crm.lead may need reconfiguration in Odoo Studio.
| Odoo Field Service | Odoo CRM | Compatibility | |
|---|---|---|---|
| fieldservice.equipment | product.product / product.template1:1 | Fully supported | |
| fieldservice.task | crm.lead / project.task / mail.messagemany:1 | Fully supported | |
| res.partner (customer on task) | res.partner1:1 | Fully supported | |
| product.product (service materials on task) | product.product1:1 | Fully supported | |
| res.users (technician / assignee) | res.users1:1 | Fully supported | |
| fieldservice.location | res.partner (address) + google_maps_link1:1 | Fully supported | |
| fieldservice.skill / fieldservice.tag | product.tag / custom field on res.partner1:1 | Fully supported | |
| project.project (Field Service project if enabled) | project.project1:1 | Fully supported | |
| fieldservice.worksheet / attachment | ir.attachment1:1 | Fully supported | |
| mail.message / mail.activity (task chatter) | mail.message / project.task1: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
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
Inventory Field Service schema and build the migration map
FlitStack AI reads the Odoo database directly (on-premise PostgreSQL) or via XML-RPC API (Odoo Online/Sh) to inventory every field service task, equipment record, location, partner, product, and timesheet entry. We identify the sale.order bridge for tasks that originated from sales orders so we can trace the crm.lead link before migrating. Equipment records are classified by tracking type (serialized vs lot vs none) and any bill-of-materials sub-components are flagged for bom conversion. This inventory produces a migration map that specifies which source records map to which destination model, what custom fields need to be created in Odoo Studio, and what value-mapping tables are required for state-to-stage translation. The map is reviewed with your Odoo admin before any data moves.
Create CRM custom fields and configure stage/value mappings
FlitStack AI creates the custom fields on project.task and crm.lead that carry Field Service-specific metadata (service type, scheduling window, territory, original create date) using Odoo's ir.model.fields API or directly in the database. The Odoo Studio XML is exported and delivered as a migration asset so the fields can be reapplied in future Odoo version upgrades. We configure the state-to-stage value mapping table for every distinct Field Service state value so no status information is dropped. If project.project needs to be enabled for CRM opportunity delivery tracking, we deliver the configuration steps and verify the project_ids link is available on crm.lead in your Odoo version.
Run sample migration and verify task-to-opportunity linkage
A representative slice of field service records — typically 200–500 tasks spanning multiple states, equipment records, and partner accounts — migrates first. We verify that tasks linked to sale orders correctly attach to the corresponding CRM opportunity, that standalone tasks land under the correct project.task with CRM-linked project, and that equipment reclassification produces valid product.product records with tracking enabled. A field-level diff report is generated showing source values vs destination values for every mapped field. Your admin reviews the sample before the full migration is scheduled. If the task-to-opportunity bridge logic needs adjustment, the mapping rules are updated at this stage.
Full migration with delta-pickup and post-migration validation
All remaining records migrate in dependency order: res.partner first, then product.product, then project.project, then project.task with timesheets, then equipment. FlitStack AI maintains the original id, create_date, and write_date from the source records in custom fields so reporting continuity is preserved. A delta-pickup window of 24–48 hours runs concurrently with the cutover, capturing any Field Service records modified during the migration window. An audit log records every operation. After migration, FlitStack AI runs a reconciliation report comparing record counts, state distribution, and partner linkage integrity. One-click rollback reverts the CRM database to its pre-migration state if the reconciliation fails. Workflows, report designs, access rights, and sharing rules are not migrated — FlitStack AI delivers an export of your Field Service workflow definitions as an Odoo Studio rebuild reference for your admin.
Platform deep dives
Odoo Field Service
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Odoo Field Service and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Odoo Field Service and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Odoo Field Service and Odoo CRM.
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 Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Odoo Field Service 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 Odoo Field Service
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.