CRM migration
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
Source
Odoo CRM
Destination
Compatibility
11 of 12
objects map 1:1 between The Service Manager and Odoo CRM.
Complexity
BStandard
Timeline
3–5 days
Overview
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.
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 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
Odoo CRM
res.partner (company_type='person')
1:1Direct 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
Odoo CRM
res.partner (company_type='company')
1:1Direct 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
Odoo CRM
crm.lead (custom fields)
1:1The 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
Odoo CRM
crm.lead (custom fields)
1:1Incidents 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
Odoo CRM
crm.lead (custom fields)
1:1Change 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
Odoo CRM
res.users (user_id on crm.lead)
1:1The 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
Odoo CRM
Custom field on crm.lead
1:1Odoo 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)
Odoo CRM
mail.activity
1:1Logged 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
Odoo CRM
ir.attachment
1:1File 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)
Odoo CRM
Custom field on target Odoo model
1:1Any 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
Odoo CRM
res.users
1:1The 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
Odoo CRM
res.partner (parent_id)
many:1The 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.
| The Service Manager | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner (company_type='person')1:1 | Fully supported | |
| Company | res.partner (company_type='company')1:1 | Fully supported | |
| Service Record / Ticket | crm.lead (custom fields)1:1 | Fully supported | |
| Incident | crm.lead (custom fields)1:1 | Fully supported | |
| Change Request | crm.lead (custom fields)1:1 | Fully supported | |
| Assignment Group | res.users (user_id on crm.lead)1:1 | Fully supported | |
| SLA Tier | Custom field on crm.lead1:1 | Fully supported | |
| Activity (Call / Email / Meeting) | mail.activity1:1 | Fully supported | |
| Note / Attachment | ir.attachment1:1 | Fully supported | |
| Custom Field (source system) | Custom field on target Odoo model1:1 | Fully supported | |
| User / Technician | res.users1:1 | Fully supported | |
| Contact-to-Company Association | res.partner (parent_id)many: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.
The Service Manager gotchas
Dense service history causes export pagination failures
Custom fields on Work Orders differ by FSM version
Serialized asset cross-references break after migration
Parts inventory snapshot staleness at cutover
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
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.
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.
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.
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.
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
The Service Manager
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between The Service Manager and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across The Service Manager and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between The Service Manager 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
The Service Manager: Not publicly documented.
Data volume sensitivity
The Service Manager 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 The Service Manager to Odoo CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave The Service Manager
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.