CRM migration

Migrate from The Service Manager to Odoo CRM

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

The Service Manager logo

The Service Manager

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

92%

11 of 12

objects map 1:1 between The Service Manager and Odoo CRM.

Complexity

BStandard

Timeline

3–5 days

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

The Service Manager tracks contacts, companies, and service records using its own object model — typically including incident tickets, change requests, and assignment groups tied to SLA tiers. Odoo CRM models the same entities as res.partner records (with company_type set to 'company' or 'person'), crm.lead objects for opportunities, and mail.activity records for interaction history. The core translation challenge is reshaping The Service Manager's ticket-centric data into Odoo's lead-and-opportunity model: incident IDs become custom fields on crm.lead, service priority maps to a custom priority field, and the assignment group resolves to an Odoo user via email match. FlitStack AI sequences the migration so partner records exist before opportunities reference them via partner_id, activities link to the correct res_model and res_id, and a 24–48 hour delta pickup window captures any in-flight changes during the Odoo cutover. Workflows, SLA rules, and notification templates do not migrate — we export them as rebuild references for your Odoo administrator.

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

The Service Manager logo

The Service Manager

What's pushing teams away

  • Customization ceiling—heavily customized FSM workflows become brittle after major platform upgrades and require reconfiguration.
  • Pricing escalation—per-technician or per-seat licensing costs compound as field teams scale, pushing organizations toward flat-rate alternatives.
  • Integration debt—FSM platforms without robust REST APIs require middleware for CRM and ERP connectivity, adding maintenance overhead.
  • Reporting gaps—out-of-box analytics lack the depth needed for multi-region performance comparisons without custom report builds.

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

Each row shows how a The Service Manager 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.

The Service Manager

Contact

maps to

Odoo CRM

res.partner (company_type='person')

1:1
Fully supported

Direct map for individual contacts. Odoo res.partner is a unified model for both persons and organizations — company_type='person' flags individual contacts. Partner records must exist before any opportunity references them via partner_id. Email match resolves owner to an Odoo user.

The Service Manager

Company

maps to

Odoo CRM

res.partner (company_type='company')

1:1
Fully supported

Direct map for organizations. Odoo res.partner with company_type='company' represents the organization. Address fields (street, city, country) map as separate fields on the same partner record. Parent-company hierarchy resolves via parent_id in a sequenced import to avoid orphaning. This ensures referential integrity across the imported dataset.

The Service Manager

Service Record / Ticket

maps to

Odoo CRM

crm.lead (custom fields)

1:1
Fully supported

The Service Manager tickets have no native Odoo equivalent. The ticket ID, priority, status, and description migrate as custom fields on crm.lead (x_tsm_ticket_id, x_tsm_priority, x_tsm_status). Your Odoo administrator recreates tickets natively in Odoo's helpdesk module post-migration as a separate workflow.

The Service Manager

Incident

maps to

Odoo CRM

crm.lead (custom fields)

1:1
Fully supported

Incidents map to crm.lead with incident-specific fields stored as custom properties. The resolved date becomes x_tsm_resolved_date; incident category maps to a custom selection field. Odoo's crm.lead type='lead' is used for unresolved incidents carried forward. These custom fields enable tracking and reporting of incident metrics within Odoo's analytics tools.

The Service Manager

Change Request

maps to

Odoo CRM

crm.lead (custom fields)

1:1
Fully supported

Change requests migrate as crm.lead records with x_tsm_change_id and a custom change_type field. If the change request relates to a specific opportunity, the res_id links to the corresponding crm.lead record. Approval history is preserved as a custom note field. for audit trails and compliance review.

The Service Manager

Assignment Group

maps to

Odoo CRM

res.users (user_id on crm.lead)

1:1
Fully supported

The Service Manager assignment groups contain multiple members. FlitStack AI resolves each group's primary member to an Odoo res.users record by email. If no match exists, the record is flagged for admin review before migration — no opportunity lands without a resolved owner_id.

The Service Manager

SLA Tier

maps to

Odoo CRM

Custom field on crm.lead

1:1
Fully supported

Odoo CRM has no native SLA tier equivalent for leads. SLA tier names from The Service Manager migrate as a custom selection field (x_tsm_sla_tier) on crm.lead. Post-migration, your team can configure Odoo's helpdesk SLA features if upgrading to the Service Desk module.

The Service Manager

Activity (Call / Email / Meeting)

maps to

Odoo CRM

mail.activity

1:1
Fully supported

Logged calls, emails, and meetings from The Service Manager map to Odoo mail.activity records. activity_type_id differentiates call (phone), meeting (meeting), and email (email) types. user_id is resolved by email match; date_deadline carries the scheduled or completed date. The activity's res_model='crm.lead' and res_id point to the related opportunity.

The Service Manager

Note / Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

File attachments associated with tickets or contacts migrate as ir.attachment records. res_model='crm.lead' for opportunity attachments; res_model='res.partner' for contact attachments. res_id holds the target record's database ID. Binary content is re-uploaded; inline images in notes are extracted and stored as separate attachments.

The Service Manager

Custom Field (source system)

maps to

Odoo CRM

Custom field on target Odoo model

1:1
Fully supported

Any custom fields defined in The Service Manager that have no Odoo equivalent become custom fields on the target Odoo model (crm.lead or res.partner). FlitStack AI creates these fields before migration using Odoo's custom field API. Field type is preserved: text stays text, selection stays selection, date stays date.

The Service Manager

User / Technician

maps to

Odoo CRM

res.users

1:1
Fully supported

The Service Manager users and technicians are matched to Odoo res.users by email address. Inactive or deactivated users in Odoo are excluded from matching and flagged. If a technician has no corresponding Odoo user, their records are assigned to a designated fallback user and noted in the migration report.

The Service Manager

Contact-to-Company Association

maps to

Odoo CRM

res.partner (parent_id)

many:1
Fully supported

The Service Manager allows a contact to belong to multiple companies. Odoo's res.partner model supports one parent_id (the primary company). FlitStack migrates the primary association as parent_id on the contact partner record. Secondary company associations are stored as a custom note field (x_tsm_secondary_companies) for manual reconciliation if needed.

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.

The Service Manager logo

The Service Manager gotchas

High

Dense service history causes export pagination failures

Medium

Custom fields on Work Orders differ by FSM version

Medium

Serialized asset cross-references break after migration

Low

Parts inventory snapshot staleness at cutover

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

  • Odoo external API requires Custom plan — Standard plan users face CSV-only migration

    Odoo's External XML-RPC API is restricted to Custom plan subscribers at $37.40/user/month. Standard plan users ($24.90/user/month) cannot use programmatic API migration and must rely on CSV imports or upgrading before FlitStack can automate the data transfer. This limitation is documented in Odoo's community forums: the API access gate means Standard plan customers effectively have no automated migration path without a plan change. FlitStack surfaces this pre-migration and helps you decide whether to upgrade or accept CSV-based import as the migration vehicle.

  • Contact-company N:N associations collapse to a single parent_id in Odoo

    The Service Manager allows a contact to belong to multiple companies simultaneously. Odoo's res.partner model uses a single parent_id field for the primary company association; there is no native many-to-many contact-to-company model. FlitStack migrates the most recently modified company as parent_id and stores secondary associations in a custom note field (x_tsm_secondary_companies). Your Odoo administrator must decide whether to leave secondary associations as reference notes or build a custom contact-company relationship model using Odoo's ir_attachment-style relational tables.

  • Ticket and incident records have no native Odoo equivalent and require custom field reconstruction

    The Service Manager's ticket and incident model does not map to any native Odoo CRM object. Odoo's crm.lead is designed for sales opportunities, not IT service tickets. FlitStack migrates ticket data as custom fields on crm.lead (x_tsm_ticket_id, x_tsm_status, x_tsm_priority, x_tsm_incident_type), but Odoo's native helpdesk module — if installed separately — uses helpdesk.ticket as its own object with different field names and relationships. Your team needs to plan whether tickets should live in the CRM as lead records or be reconstructed in the helpdesk module post-migration.

  • Odoo stage probability is embedded in stage_id — manual reconfiguration needed after migration

    In Odoo CRM, the probability percentage is stored on the stage_id record itself (stage_id.probability), not as a separate field on crm.lead. The Service Manager typically stores ticket priority and resolution probability as independent fields. After migration, FlitStack maps each The Service Manager priority tier to an Odoo stage with the corresponding probability value, but your Odoo administrator should review the stage configuration in Settings > CRM > Stages to confirm the probability values match your business rules. Changing a stage's probability after go-live affects revenue forecasting.

  • Workflows, SLA rules, and notification templates do not migrate and require Odoo-native rebuild

    The Service Manager workflows governing ticket routing, SLA escalation timers, and automated notifications have no equivalent in Odoo CRM's native automation model. Odoo uses action rules and server actions triggered on crm.lead write events — a different paradigm from event-driven SLA escalation. FlitStack exports The Service Manager workflow definitions as JSON and PDF rebuild references. Odoo's automated actions (under Settings > Technical > Actions) handle the functional equivalent, but the configuration is fully custom and must be rebuilt by your Odoo administrator or consultant.

Migration approach

Six steps for a successful The Service Manager to Odoo CRM data migration

  1. Schema discovery and Odoo custom field pre-creation

    FlitStack AI reads The Service Manager's object schema — contacts, companies, tickets, incidents, change requests, assignment groups, and custom fields — via your API or export. We identify every custom field that needs an Odoo counterpart and create the custom fields (x_tsm_*) on crm.lead and res.partner before any data moves. This pre-creation step ensures Odoo is ready to receive records on the first migration run without schema errors blocking the import.

  2. Partner and user resolution before opportunity migration

    Odoo requires res.partner records to exist before crm.lead records can reference them via partner_id. FlitStack sequences the migration: companies import first as res.partner with company_type='company', then contacts as res.partner with company_type='person' and parent_id linking to the correct company. Simultaneously, The Service Manager users and assignment group members are resolved by email match against Odoo res.users; unmatched accounts are flagged for your admin to invite or assign before the opportunity migration phase begins.

  3. Ticket and incident migration as custom fields on crm.lead

    Service records, incident tickets, and change requests are migrated as crm.lead records with ticket-specific data stored in custom fields (x_tsm_ticket_id, x_tsm_status, x_tsm_priority, x_tsm_incident_type, x_tsm_sla_tier, x_tsm_resolved_date). FlitStack sets the crm.lead type to 'lead' for open tickets and 'opportunity' for resolved records that map to a sales pipeline. Activities linked to each ticket (calls, emails, meetings) are migrated as mail.activity records with the correct res_model='crm.lead' and res_id pointing to the target opportunity.

  4. Sample migration with field-level diff and owner resolution audit

    A representative slice — typically 100–300 records spanning contacts, companies, opportunities, and activities — migrates first. FlitStack generates a field-level diff comparing source values against the destination records so you can verify custom field mapping, stage assignment, priority translation, and owner resolution before the full run. Any records that fail to resolve (missing partner, unmatched user, unmapped stage) are surfaced in a pre-flight report with specific resolution instructions.

  5. Full migration with delta-pickup and rollback readiness

    The full dataset migrates in sequenced batches: companies → contacts → opportunities → activities → attachments. A 24–48 hour delta-pickup window runs concurrently, capturing any records created or modified in The Service Manager during the cutover. FlitStack maintains a full audit log of every record operation. If reconciliation fails — a foreign key orphan, a field that did not resolve, or a record count discrepancy — one-click rollback reverts the Odoo environment to its pre-migration state so your team can investigate and retry without data loss.

Platform deep dives

Context on both ends of the pair

The Service Manager logo

The Service Manager

Source

Strengths

  • Work Order lifecycle management from creation through invoicing and closure.
  • Mobile application for field technicians with offline capability on many platforms.
  • Asset-centric data model linking equipment history to service records.
  • SLA and entitlement engine tied to service contract coverage rules.
  • Territory and routing management for multi-dispatcher field operations.

Weaknesses

  • Export tooling is often ad-hoc—custom SQL queries or manual CSV exports are common, with no guaranteed schema consistency across versions.
  • Large service history volumes create API pagination challenges; extracting five or more years of records requires batching and reconnection logic.
  • Custom fields proliferate in mature FSM deployments, increasing mapping complexity during migration scoping.
  • Billing integrations vary significantly by FSM platform; invoice-line detail preservation is not always guaranteed.
  • Licensing models are typically per-technician, meaning migration scoping must account for active versus inactive technician counts to avoid over-provisioning the destination.
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 The Service Manager and Odoo CRM.

B

Overall complexity

Standard migration

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

  • Object compatibility

    A

    All 8 core objects map 1:1 between The Service Manager 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

    The Service Manager: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your The Service Manager 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 The Service Manager to Odoo CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most The Service Manager to Odoo CRM migrations complete in 3–5 days of clock time for under 25,000 CRM records. Complex setups with 100,000+ records, extensive custom fields, or assignment-group-to-user resolution across large user directories extend to 10–14 days. Odoo's external API on the Custom plan is the fastest migration path; Standard plan CSV imports add manual preparation time. Additionally, FlitStack monitors migration health metrics to ensure data integrity throughout the process.

Adjacent paths

Related migrations to explore

Ready when you are

Move from The Service Manager.
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