CRM migration
Field-level mapping, validation, and rollback between MobiWork and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
MobiWork
Source
Odoo CRM
Destination
Compatibility
12 of 13
objects map 1:1 between MobiWork and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
MobiWork organizes field-service operations around Customers, Prospects, Work Orders, Quotes, Invoices, and Scheduling — a flat, mobile-first object model optimized for dispatch and job completion tracking. Odoo CRM uses a relational model built on res.partner (contacts and companies merged into one object), crm.lead (which serves as both lead and opportunity depending on stage), crm.team for pipeline ownership, and sale.order for quotations that convert to sales orders. The migration maps MobiWork Customers and Prospects to res.partner records, Work Orders to crm.lead records using a custom work_order_ids One2Many, Quotes to sale.order, and preserves service-contract and form-attachment data as binary fields or custom file storages. We surface technician assignments, job status, and progressive-billing flags as Odoo custom fields on crm.lead so reporting continuity is maintained. Workflows, automations, and dispatching rules do not migrate — Odoo Studio or server actions must be rebuilt on the destination side. The migration runs via Odoo's xmlrpc/JSON-RPC API at standard rate limits, with batched commits and rollback capability built into the FlitStack execution layer.
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 MobiWork 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.
MobiWork
Customer
Odoo CRM
res.partner
1:1MobiWork Customer records map directly to Odoo res.partner with type='contact' and customer_rank set to a positive value. The partner's address, phone, email, and website fields migrate as direct field-to-field assignments. MobiWork's 'Customer Since' date maps to Odoo's date field or a custom partner field.
MobiWork
Prospect
Odoo CRM
res.partner
1:1MobiWork Prospects map to res.partner with customer_rank=0 (not yet a customer). If the Prospect has a company name, Odoo sets is_company=True and creates a child contact record. If Prospect has only a person name, it becomes an individual res.partner contact. The distinction is stored as a custom field on the partner for reporting clarity.
MobiWork
Work Order
Odoo CRM
crm.lead
1:1Each MobiWork Work Order becomes an Odoo crm.lead opportunity record. The lead's name field holds the Work Order description or ticket number. Custom fields on crm.lead store the original Work Order ID, assigned technician (linked via res.users), job status, and parts used. The migration preserves the parent Customer link via the lead's partner_id many2one.
MobiWork
Work Order Status
Odoo CRM
crm.stage
1:1MobiWork status values (Scheduled, In Progress, On Hold, Completed, Invoiced, Cancelled) map to Odoo crm.stage records defined per crm.team. We create stages matching the source labels and set sequence order. Probability values on stages are applied from Odoo's defaults unless the source data contains historical win-rate data to override them.
MobiWork
Quote
Odoo CRM
sale.order
1:1MobiWork Quotes migrate as Odoo sale.order records in the 'Quotation' state (sale.sale.sale_order). Line items map to sale.order.line with product_id, product_uom_qty, price_unit, and discount. Quote expiration dates map to sale.order.validity_date. Accepted quotes are flagged so they can be confirmed as sale orders post-migration.
MobiWork
Invoice / Progressive Billing
Odoo CRM
account.move
1:1MobiWork invoices and progressive billing entries map to Odoo account.move records of type='out_invoice'. Since Odoo invoicing is tightly coupled to the sale.order confirmation workflow, FlitStack migrates invoice headers and lines while noting the source Work Order reference so the link can be re-established in Odoo after sales order confirmation.
MobiWork
Service Contract / Recurring Invoice
Odoo CRM
sale.subscription (or account.move)
1:1MobiWork Recurrent Services and Service Contracts map to Odoo sale.subscription if the Odoo Subscriptions app is installed. If not, the recurring schedule and rate are stored as custom fields on the linked res.partner or crm.lead, and the billing logic is rebuilt using Odoo's automated actions or cron jobs post-migration.
MobiWork
User / Technician
Odoo CRM
res.users
1:1MobiWork Users (technicians, dispatchers, admins) are matched to Odoo res.users by email address. Unmatched users are flagged with a migration report. MobiWork admin-defined roles map to Odoo groups (Sales / Field Service / Manager) if the appropriate groups exist in the target database.
MobiWork
Electronic Form (Pictures, Signatures, PDFs)
Odoo CRM
ir.attachment
1:1MobiWork form attachments (images, signature captures, PDF reports) migrate as Odoo ir.attachment records linked to the corresponding crm.lead or res.partner via res_model and res_id. Files are downloaded from MobiWork's storage and uploaded to Odoo's filestore or the configured S3 bucket. Binary fields on the parent record are populated with the primary image or signature if Odoo's form view references them.
MobiWork
Custom Field (MobiWork-specific)
Odoo CRM
ir.model.fields (x_studio / x_)
1:1Every MobiWork custom field gets a corresponding custom field on the appropriate Odoo model (res.partner, crm.lead, sale.order). Field type is mapped: text → char, number → float or integer, date → date, dropdown → selection, checkbox → boolean. Selection options are migrated as selection values on the field. Fields are created via the Odoo migration plan before data loads begin.
MobiWork
Scheduling / Dispatch Record
Odoo CRM
crm.lead (custom fields)
many:1MobiWork scheduling data (appointment date, assigned technician, dispatch window) is merged into the target crm.lead as custom datetime fields (x_scheduled_date, x_dispatch_window_start, x_dispatch_window_end) and a many2one to res.users for the assigned technician. Odoo's calendar module can be connected post-migration for full scheduling visualization.
MobiWork
Payment / Transaction Record
Odoo CRM
account.payment + account.move
1:1MobiWork payment records (processed via Clearent or Stripe integrations) migrate as Odoo account.payment records linked to the corresponding account.move invoice. Payment method and transaction ID are stored in account.payment fields (payment_method_line_id, ref). If the source shows an unmatched payment, it is held in a staging table for manual resolution.
MobiWork
Parts & Services Catalog
Odoo CRM
product.product
1:1MobiWork Parts and Services Catalog items migrate as Odoo product.product records with full fidelity. Product type (Stockable, Consumable, Service) is inferred from the MobiWork catalog category. Unit of measure maps to uom_id and uom_po_id. Pricing migrates to list_price and standard_price fields, and product descriptions, barcodes, and vendor information transfer to name, barcode, and seller_ids fields respectively.
| MobiWork | Odoo CRM | Compatibility | |
|---|---|---|---|
| Customer | res.partner1:1 | Fully supported | |
| Prospect | res.partner1:1 | Fully supported | |
| Work Order | crm.lead1:1 | Fully supported | |
| Work Order Status | crm.stage1:1 | Fully supported | |
| Quote | sale.order1:1 | Fully supported | |
| Invoice / Progressive Billing | account.move1:1 | Fully supported | |
| Service Contract / Recurring Invoice | sale.subscription (or account.move)1:1 | Fully supported | |
| User / Technician | res.users1:1 | Fully supported | |
| Electronic Form (Pictures, Signatures, PDFs) | ir.attachment1:1 | Fully supported | |
| Custom Field (MobiWork-specific) | ir.model.fields (x_studio / x_)1:1 | Fully supported | |
| Scheduling / Dispatch Record | crm.lead (custom fields)many:1 | Fully supported | |
| Payment / Transaction Record | account.payment + account.move1:1 | Fully supported | |
| Parts & Services Catalog | product.product1:1 | Mapping required |
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.
MobiWork gotchas
No public API means migration is export-constrained
30-day post-cancellation export window
Tier-gated objects require plan upgrade to migrate
Integration attachments require separate handling
Annual prepayment is mandatory across all tiers
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 MobiWork data export and map to Odoo schema
FlitStack extracts MobiWork data via the platform's export tools and API, cataloging every object (Customer, Prospect, Work Order, Quote, Invoice, Product, User) and its field inventory. We build a migration plan that lists every custom field requiring Odoo-side creation via Settings > Technical > Models > Fields, names the target crm.stage records per team, and specifies the Odoo sale.order and account.move mapping for the invoicing objects. This plan is reviewed with your Odoo admin before any data moves.
Create Odoo custom fields and stage configuration
Before the first record is written to Odoo, FlitStack creates all custom fields identified in the audit — x_work_order_id, x_scheduled_date, x_labor_hours, x_parts_used, x_completed_date, and x_customer_since on crm.lead and res.partner. We create crm.stage records matching MobiWork status labels per crm.team, and configure the sale.order sequence if custom quotation numbering is needed. This step ensures Odoo's schema is ready to accept data without type-cast errors during the load.
Resolve user and contact identity by email
MobiWork Users (technicians, dispatchers) and Contacts (Customers, Prospects) are matched to Odoo res.users and res.partner by email address. Contacts without a matching email are created as new res.partner records. Users without a matching Odoo login are flagged in the migration report — teams either invite the user to Odoo before cutover or assign their records to a fallback salesman. No Work Order migrates without an owner assignment on the crm.lead.user_id field.
Run a sample migration with field-level diff
FlitStack executes a representative slice migration — typically 200–500 records spanning Customers, Work Orders, Quotes, and a few Invoices — and produces a field-level diff comparing source values against destination fields. You verify that stage mapping, custom field population, owner resolution, and attachment links match expectations. Discrepancies are corrected in the migration scripts before the full run commits. This step typically completes within a few hours and can be scheduled during business hours.
Execute full migration with delta-pickup window
The full record set migrates in sequenced batches: res.partner contacts first, then crm.lead opportunities, then sale.order quotations, then account.move invoices, then ir.attachment files. A delta-pickup window (24–48 hours after the full run starts) captures any records created or modified in MobiWork during the cutover. FlitStack's audit log records every operation, and one-click rollback reverts the Odoo database to its pre-migration state if reconciliation fails.
Platform deep dives
MobiWork
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between MobiWork and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across MobiWork and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between MobiWork 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
MobiWork: Not publicly documented.
Data volume sensitivity
MobiWork 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 MobiWork to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your MobiWork 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 MobiWork
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.