CRM migration
Field-level mapping, validation, and rollback between ServiceMax and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
ServiceMax
Source
Odoo CRM
Destination
Compatibility
10 of 12
objects map 1:1 between ServiceMax and Odoo CRM.
Complexity
BStandard
Timeline
72–96 hours
Overview
ServiceMax is a field-service execution platform built on the Salesforce Force.com data model, organizing data around Work Orders, Installed Base (assets), Service Contracts, and SFM Transactions. Its schema references Salesforce object IDs, Account lookups, and custom configuration profiles that have no native counterpart in Odoo CRM. Odoo CRM uses a single res.partner model for contacts and companies, stores opportunities in crm.lead with a unified lead/opportunity state, and handles product assets through the stock and maintenance modules. We migrate ServiceMax Work Orders and Cases as CRM leads, Installed Base items as product variants with extended properties, Service Contracts as Odoo subscriptions, and technician owner records as Odoo res.users linked by email match. SFM Transactions, SFM Wizards, Counter Rules, Mobile Permissions, and all workflow automation must be rebuilt in Odoo Studio or through Python modules — we export configuration definitions as JSON and document the functional intent for your Odoo partner. Our migration engine reads ServiceMax via the Salesforce REST API (OAuth) or exported CSV bundles, transforms field values to Odoo XML-RPC write format, and commits via batched API calls with rollback on partial failure.
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 ServiceMax 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.
ServiceMax
Work Order (SVMXC__Service_Order__c)
Odoo CRM
crm.lead
1:1ServiceMax Work Orders carry a status, priority, scheduled date, assigned technician, and line items for parts consumed. We decompose the header into an Odoo crm.lead record and the parts-consumption lines into stock.move or sale.order.line records depending on whether the destination uses Odoo inventory. Original Work Order number preserved in a custom Char field for traceability.
ServiceMax
Case / Incident (SVMXC__Site_Issue__c)
Odoo CRM
crm.lead
1:1ServiceMax Cases represent reported equipment issues logged by customers or technicians. Each case maps directly to an Odoo crm.lead with type 'lead' and the case subject as the lead name. Priority and reported-on date migrate as custom fields; resolved status maps to Odoo's won/lost stage states.
ServiceMax
Installed Base / Asset (SVMXC__Installed_Product__c)
Odoo CRM
product.product
1:1ServiceMax Installed Base stores per-serial product configuration, installation location, parent asset hierarchy, warranty end date, and entitlement status. We map each Installed Base record to an Odoo product.product variant with custom fields capturing serial number, installation date, parent asset reference, and warranty expiry. Entitlement status becomes a custom selection field or links to an Odoo subscription record.
ServiceMax
Service Contract (SVMXC__Service_Contract__c)
Odoo CRM
sale.subscription
1:1ServiceMax Service Contracts define entitlement scope, covered products, billing frequency, and SLA terms. Odoo's subscription module handles recurring billing and contract-line coverage. Contract lines mapping to covered assets use Odoo's subscription.template line model. Contract status (Active, Expired, Cancelled) maps to Odoo subscription state with value mapping.
ServiceMax
Product (Product2)
Odoo CRM
product.template / product.product
1:1Standard Salesforce Product2 objects map directly to Odoo product.template with variants created per serial-number grouping for Installed Base entries. Serviceable flag and product type (Part vs. Service vs. Asset) migrate as custom selection fields. Product descriptions, list prices, and cost prices transfer to corresponding Odoo fields, while product categories map to Odoo product.category records for inventory grouping.
ServiceMax
Account (Account)
Odoo CRM
res.partner
many:1ServiceMax Accounts are Salesforce Contacts' parent organizations. Odoo collapses this into res.partner where the same record can act as both company (is_company=True) and individual contact. We map the primary Account to a company-type partner and all related Contacts to child partner records under the same parent_id.
ServiceMax
Contact (Contact)
Odoo CRM
res.partner
many:1ServiceMax Contacts and Odoo res.partner use the same relational model — individual person records linked to an organization. We migrate each Contact as a res.partner with is_company=False. Email, phone, mobile, job title, and address fields map directly. Multiple Contact roles per Account collapse to Odoo's partner function tags.
ServiceMax
Technician / Resource (SVMXC__Dispatcher_Resource__c)
Odoo CRM
res.users
1:1ServiceMax technicians and dispatch resources are Salesforce users with scheduling permissions. We match them to Odoo res.users by email. Unmatched technicians are flagged for team assignment before migration. Skill certifications, working hours, and territory assignments migrate as custom fields on the user record or as Odoo resource.calendar entries.
ServiceMax
Parts Inventory (SVMXC__Parts_Request__c / StockMove)
Odoo CRM
stock.picking / stock.move
1:1ServiceMax parts consumption and request records map to Odoo stock.picking (internal transfers or deliveries) and stock.move lines. Quantities, product variants, source/destination locations, and transaction dates carry over. Parts request status (Pending, Fulfilled, Back-ordered) maps to Odoo stock move state. Lot/serial numbers on parts transfer to Odoo stock.lot records linked to the relevant product variants.
ServiceMax
Technical Attributes (SVMXC__Technical_Attributes__c)
Odoo CRM
product.attribute.value / ir.property
1:1ServiceMax Technical Attributes store dynamic property definitions on assets — temperature ranges, voltage specs, serial configuration. Odoo has no native equivalent. We create Odoo product.attribute lines per technical attribute group and store attribute values on the product.variant as attribute values. Complex multi-value attributes get custom fields on product.product.
ServiceMax
SFM Transaction / Smart Doc / Checklist
Odoo CRM
no_equivalent
1:1ServiceMax SFM Transactions define custom data-entry screens, Smart Docs for field reports, and Checklist templates. Odoo has no equivalent object. We export SFM Transaction definitions as JSON from the ServiceMax Migration Tool and deliver them as documentation for Odoo custom module development. Workflow and data-entry logic must be rebuilt.
ServiceMax
Counter Rule (SVMXC__Counter_Details__c)
Odoo CRM
no_equivalent
1:1ServiceMax Counter Rules trigger preventive maintenance based on meter readings (hours used, cycles completed). Odoo maintenance module supports preventive maintenance schedules but lacks a counter-trigger model. We map active counter thresholds as maintenance frequency rules on the linked product.asset record and flag counter-rule logic for Odoo custom module implementation.
| ServiceMax | Odoo CRM | Compatibility | |
|---|---|---|---|
| Work Order (SVMXC__Service_Order__c) | crm.lead1:1 | Fully supported | |
| Case / Incident (SVMXC__Site_Issue__c) | crm.lead1:1 | Fully supported | |
| Installed Base / Asset (SVMXC__Installed_Product__c) | product.product1:1 | Fully supported | |
| Service Contract (SVMXC__Service_Contract__c) | sale.subscription1:1 | Fully supported | |
| Product (Product2) | product.template / product.product1:1 | Fully supported | |
| Account (Account) | res.partnermany:1 | Fully supported | |
| Contact (Contact) | res.partnermany:1 | Fully supported | |
| Technician / Resource (SVMXC__Dispatcher_Resource__c) | res.users1:1 | Fully supported | |
| Parts Inventory (SVMXC__Parts_Request__c / StockMove) | stock.picking / stock.move1:1 | Fully supported | |
| Technical Attributes (SVMXC__Technical_Attributes__c) | product.attribute.value / ir.property1:1 | Fully supported | |
| SFM Transaction / Smart Doc / Checklist | no_equivalent1:1 | Fully supported | |
| Counter Rule (SVMXC__Counter_Details__c) | no_equivalent1: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.
ServiceMax gotchas
API call limits reset on a 24-hour rolling window
SFM Transaction and Wizard dependencies create migration loops
Configuration Profile migration excludes Default profiles
Large Technical Attributes configurations slow the Migration Tool UI
Pricing and Billing UI missing from browser mode
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
Audit ServiceMax data model and export configuration definitions
We connect to the ServiceMax Salesforce org via OAuth API access (read-only scope) and enumerate all active Work Orders, Installed Base records, Service Contracts, Accounts, Contacts, Cases, and custom SFM configurations. We simultaneously export SFM Transaction definitions, SFM Wizard definitions, Technical Attributes, Counter Rules, and Configuration Profiles from the ServiceMax Migration Tool (migrate.servicemax.com). This JSON bundle becomes the functional specification for Odoo rebuild work. We also capture the Salesforce API rate-limit allocation to size the migration batch window.
Design Odoo schema: custom fields, product attributes, subscription templates
Before data moves, we create the Odoo custom fields required for ServiceMax data that has no direct counterpart — x_work_order_number__c on crm.lead, x_serial_number__c on product.product, x_entitlement_status__c on sale.subscription, x_parent_asset_id__c for Installed Base hierarchy, and x_counter_threshold__c for preventive maintenance triggers. For Technical Attributes with multi-value pick-lists, we create Odoo product.attribute and product.attribute.value records. We set up the crm.lead stage pipeline to mirror ServiceMax Work Order statuses. All schema changes are documented in the FlitStack migration plan for Odoo admin sign-off before import begins.
Migrate partners and contacts first, then products and assets, then work orders
Odoo enforces referential integrity — res.partner must exist before crm.lead records can reference a partner_id, and product.product must exist before Installed Base records can link to it via custom fields. We sequence the migration in three passes: (1) Accounts → res.partner (company), then Contacts → res.partner (individual) with parent_id set; (2) Product2 → product.template with variants created for each serial-number Installed Base record; (3) Work Orders and Cases → crm.lead with owner resolved by email match to res.users. Each pass includes a field-level validation report comparing source field values to destination field values before commit.
Run a representative sample migration and produce a field-level diff report
A sample of 200–500 records (50 Work Orders, 50 Installed Base records, 50 Contacts, 30 Accounts, 20 Service Contracts, and a sampling of Cases and technician assignments) migrates first. We generate a field-level diff showing every source field, its migrated value in Odoo, any transformation applied, and any field that could not be mapped. You review the diff and confirm that Work Order status mapping, Installed Base hierarchy resolution, and technician owner assignment meet expectations. We iterate the field mapping plan based on your feedback before the full run.
Execute full migration with delta-pickup window and audit log
The full migration runs in batches against the Odoo XML-RPC API (Enterprise Custom plan) or via CSV import (Community). FlitStack AI captures a migration timestamp and re-queries ServiceMax for any records created or modified in the 24–48 hour delta window. All operations are written to an audit log (operation type, source ID, destination ID, field, before/after value, timestamp, operator). If reconciliation shows missing records or broken relationships, one-click rollback reverts the Odoo instance to its pre-migration snapshot state.
Deliver SFM configuration export and rebuild reference documentation
After data migration completes, we deliver the ServiceMax Migration Tool JSON export (SFM Transactions, SFM Wizards, Counter Rules, Mobile Permissions, Technical Attributes, and Configuration Profiles) organized by functional domain, along with a FlitStack rebuild guide that maps each ServiceMax screen element to its Odoo Studio equivalent. This gives your Odoo administrator a head-start on rebuilding the field workflows and checklist screens that cannot migrate as data.
Platform deep dives
ServiceMax
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between ServiceMax and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across ServiceMax and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between ServiceMax 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
ServiceMax: Salesforce API limits apply—reported ~5,000 API calls per org per 24-hour rolling window, with per-application limits within that.
Data volume sensitivity
ServiceMax 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 ServiceMax to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your ServiceMax 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 ServiceMax
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.