CRM migration

Migrate from Odoo Field Service to Odoo CRM

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 logo

Odoo Field Service

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

90%

9 of 10

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

Complexity

BStandard

Timeline

24–48 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

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

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

maps to

Odoo CRM

product.product / product.template

1:1
Fully supported

Equipment 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

maps to

Odoo CRM

crm.lead / project.task / mail.message

many:1
Fully supported

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

maps to

Odoo CRM

res.partner

1:1
Fully supported

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

maps to

Odoo CRM

product.product

1:1
Fully supported

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

maps to

Odoo CRM

res.users

1:1
Fully supported

Technician 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

maps to

Odoo CRM

res.partner (address) + google_maps_link

1:1
Fully supported

Field 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

maps to

Odoo CRM

product.tag / custom field on res.partner

1:1
Fully supported

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

maps to

Odoo CRM

project.project

1:1
Fully supported

If 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

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

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

maps to

Odoo CRM

mail.message / project.task

1:1
Fully supported

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

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

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

  • Field Service tasks do not auto-link to CRM opportunities without a sale.order bridge

    Odoo Field Service tasks and CRM leads occupy the same database but belong to separate model families — fieldservice.task and crm.lead are not the same object and do not share a foreign-key relationship. Tasks created from a sales order in Field Service carry a sale_line_id link back to sale.order, but the task itself has no crm.lead foreign key. FlitStack AI resolves this by tracing the sale.order → sale_order_line → crm.lead link where it exists, then attaching the migrated task as a project.task activity on the found opportunity. Tasks without a sales order bridge become standalone project.task records under a CRM-linked project. This mapping decision must be confirmed during the planning phase because it affects how service history appears in the CRM pipeline view.

  • Field Service state values require explicit value-by-value mapping to CRM stage names

    fieldservice.task uses Odoo workflow states — New, Confirmed, In Progress, Done, Cancelled — which are stored as XML state transitions in the FSM module. Odoo CRM uses crm.stage with pick-list stage names that are completely independent. There is no automatic translation between a field service state and a CRM stage. Teams that have built business logic around field service states (e.g., routing rules, notifications, or SLA timers tied to 'Confirmed') need to have those translated into CRM stage-based automations post-migration. FlitStack AI creates a value-mapping table for each state-to-stage translation and preserves the original state as a custom field on the migrated task so no information is lost during the transition.

  • Equipment records have no native equivalent in Odoo CRM and must be reclassified as products

    fieldservice.equipment is its own model with fields for serial number, brand, model, maintenance contract, child equipment hierarchy, and customer link. Odoo CRM has no equipment object — it uses product.product for anything that can be sold, invoiced, or tracked as inventory. Migrating equipment therefore requires reclassifying each record as a product with variant tracking enabled for serialized items. If the equipment has a bill of materials or sub-components, those need to be converted to a product.bom structure. The reclassification is irreversible in Odoo since the equipment model is not available in CRM-only deployments. FlitStack AI creates the product records first, then updates the task-equipment links to point to the new product IDs before committing the migration.

  • Time-tracking entries in Field Service require a project.project to exist in CRM before migration

    Field Service stores timesheet entries in project.timesheet linked to a fieldservice.task. If the task's project_id is set, the timesheet entries exist in project.timesheet with a task_id link. In Odoo CRM, timesheets live in account.analytic.line (the analytic accounting model). CRM does not create a project.project automatically when an opportunity is created — it must be explicitly enabled via the CRM settings or linked to a project manually. FlitStack AI creates a project.project for each CRM opportunity that received migrated field service tasks before moving timesheet data, so the analytic lines have a valid project_id to link against. Without this step, timesheet migration fails on foreign-key validation.

  • Mobile app data, map routes, and GPS logs do not migrate — those are runtime state

    Odoo Field Service's mobile app stores GPS location pings, route traces, and mobile form submissions that are written to the database as task state updates and message logs. The route geometry (polyline data) and real-time GPS logs are not stored as discrete database records with field-level persistence — they exist as in-memory state on the mobile device and are not fully captured in the PostgreSQL schema. FlitStack AI migrates the task record state and chatter history, but the mobile app's dispatch map view, route replay, and geofence alert data cannot be reconstructed in Odoo CRM because CRM does not have a route geometry storage model. This is disclosed during planning so the team does not expect historical dispatch maps to appear in the CRM.

Migration approach

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

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

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

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

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

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.
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. All 8 core objects map 1:1 between Odoo Field Service and Odoo CRM.

B

Overall complexity

Standard migration

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

  • Object compatibility

    A

    All 8 core objects map 1:1 between Odoo Field Service and Odoo CRM.

  • 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 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 Odoo Field Service to Odoo CRM data migrations

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

Can't find your answer?

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 consultation

Most Odoo Field Service to Odoo CRM migrations complete in 24–48 hours of clock time for databases under 10,000 tasks. The planning and schema-setup phase adds 2–3 business days. Larger setups with 50,000+ records, complex equipment hierarchies with serial tracking, or multi-level bill-of-materials conversions extend the full timeline to 3–7 days. The longest single step is verifying the task-to-opportunity linkage logic against a representative sample before the full run commits.

Adjacent paths

Related migrations to explore

Ready when you are

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