ERP migration
Field-level mapping, validation, and rollback between Deskera ERP and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
Deskera ERP
Source
Odoo ERP
Destination
Compatibility
9 of 10
objects map 1:1 between Deskera ERP and Odoo ERP.
Complexity
BStandard
Timeline
6-10 weeks
Overview
Moving from Deskera ERP to Odoo ERP is a multi-module schema translation across accounting, inventory, and manufacturing. Deskera stores customers and vendors as separate entity types while Odoo consolidates them into a single Partner object with a contact_type discriminator, requiring a routing step at migration time. Journal entries in Deskera map to Odoo account.move records, but Odoo's journal sequence must be provisioned first so that move names follow the correct prefix-number pattern. Multi-level Bills of Materials with operations and work-center references migrate as flat component records with a supplemental routing map, because Deskera's MRP engine structures operations differently from Odoo's Manufacturing app. Custom fields defined on Deskera objects carry over as Odoo custom fields or supplementary lookup tables, and we clean duplicate partner records before the Partner import to avoid Odoo's deduplication conflicts. Workflows, automations, and scheduled jobs do not migrate; we deliver a written inventory of these for the customer's admin to rebuild in Odoo Studio or via Python scripts.
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 Deskera ERP object lands in Odoo ERP, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Deskera ERP
Chart of Accounts
Odoo ERP
Account
1:1Deskera's Chart of Accounts (with account codes, names, and standard account types) maps directly to Odoo Accounting's account.account records. We extract the full COA export, map account codes and names verbatim, and preserve Deskera's account_type as Odoo account type (asset, liability, equity, revenue, expense). Multi-currency settings on accounts carry over as currency_id references. If Deskera stores tax codes separately, we provision Odoo account.tax records alongside the COA before any journal entry migration begins, because Odoo requires tax accounts to exist before journal lines referencing them can post.
Deskera ERP
Customer
Odoo ERP
Partner (contact_type = customer)
1:1Deskera Customer records from /v1/account (type filter) migrate to Odoo res.partner with contact_type = contact and customer_rank set to positive for deduplication. We map billing_address and shipping_address from Deskera's address block to Odoo street, city, state_id, zip, and country_id fields. Email, phone, and tax ID carry over verbatim. We deduplicate by email match before insert to avoid Odoo's partner ranking producing duplicate customer records. Vendor records route through the same pipeline with contact_type = vendor and vendor_rank set accordingly.
Deskera ERP
Vendor
Odoo ERP
Partner (contact_type = vendor)
1:1Deskera Vendor records share the same /v1/account API endpoint with a type filter. We separate vendor from customer records at extraction time using the entity type flag, then load into Odoo res.partner with contact_type = vendor and vendor_rank set. Vendor-specific fields (payment terms, bank details if stored) map to Odoo property fields on the partner record. The same deduplication-by-email logic applies to avoid creating duplicate vendor records when a contact also appears as a customer in Deskera.
Deskera ERP
Journal Entry
Odoo ERP
Account Move
1:1Deskera journal entries with debit/credit line amounts and account references map to Odoo account.move records. We provision the target Odoo journal (purchase, sale, general, miscellaneous) and its sequence (defining the move_name prefix-number format) before any move creation, because Odoo enforces sequence integrity at insert time. Deskera's optional Class, Location, and Department dimensions carry over as custom fields on account.move.line since Odoo Accounting does not have native multi-dimensional accounting. We migrate the account.move.line records with debit, credit, account_id, and analytic_distribution references preserved.
Deskera ERP
Inventory Item
Odoo ERP
Product (product_type = stockable / consumable / service)
1:1Deskera Item records (SKU, name, unit of measure, cost, on-hand quantity) map to Odoo product.template and product.product records. We map Deskera's item type (stockable vs. service vs. consumable) to Odoo's product_type. Category mapping routes Deskera's item_category to Odoo product.category. On-hand quantities from Deskera's stock module post to Odoo stock.quant records at the relevant warehouse location. Lot and serial number data from Deskera's batch/serial tracking migrates to Odoo stock.lot records, with a supplemental reconciliation report documenting any lot numbers that span multiple Deskera warehouses.
Deskera ERP
Sales Order
Odoo ERP
Sale Order
1:1Deskera Sales Order records link to customer and line items with pricing rules. We map the order header (customer reference, order date, payment terms) and all line items (product, quantity, unit price, tax) to Odoo sale.order and sale.order.line. The customer reference in Deskera becomes the Odoo Client Order Reference field. Closed orders are migrated selectively per the customer's accounting cut-off preference; open orders migrate in full with state set to sale_order. Note that Deskera's order-to-invoice workflow may differ from Odoo's sale_order-to-account_move pipeline; we document the discrepancy so the admin can align the invoicing policy post-migration.
Deskera ERP
Purchase Order
Odoo ERP
Purchase Order
1:1Deskera Purchase Order records migrate to Odoo purchase.order with vendor linkage and expected receipt dates preserved. Line items map to purchase.order.line with product, quantity, and unit cost from Deskera's cost field. Open POs migrate with state = purchase to allow further receipt processing in Odoo. Closed historical POs migrate selectively based on the customer's accounting cut-off period; any PO with an invoice date before the cut-off is documented in the supplemental migration report rather than loaded. Vendor lead times in Deskera carry over to Odoo's supplier info on the product form.
Deskera ERP
Bill of Materials
Odoo ERP
Bill of Materials (Manufacturing app)
1:1Deskera multi-level Bills of Materials with component items, quantities per assembly, and production routing migrate to Odoo mrp.bom records with mrp.bom.line children. We preserve multi-level BOM nesting (parent assembly with child sub-assemblies) by sequencing parent BOM creation before child BOM creation to satisfy Odoo's foreign-key constraint. Deskera MRP operations and work-center assignments migrate as supplemental routing records in a separate migration table because Odoo separates workcenter operations from BOM components differently than Deskera's combined MRP approach. The routing map is delivered as a written handoff document for the customer's Odoo partner or manufacturing admin to reassemble in the Manufacturing app.
Deskera ERP
Employee
Odoo ERP
Employee
1:1Deskera People employee records (name, email, department, job title, manager relationship) map to Odoo hr.employee. We extract organizational structure as hr.department and parent_id links. Current compensation record and leave balance values migrate to Odoo as supplemental fields on the employee form or as entries in an attached migration table. Effective-dated historical payroll records are flagged for manual reconciliation because Deskera's payroll engine and Odoo's HR module handle salary structures and run payroll differently. Attendance and timesheet data from Deskera (if used) can be migrated as hr.attendance or account.analytic.line records depending on the Odoo apps installed.
Deskera ERP
Custom Field
Odoo ERP
Custom Field (ir.model.fields)
lossyDeskera custom field definitions and their values migrate to Odoo's ir.model.fields registry and onto the target records. We capture the Deskera custom field name, data type, and applicable objects during scoping, then pre-create the Odoo custom field via the ORM or directly in the database before importing values. Multi-select, date, number, and text types map to their Odoo equivalents (selection, datetime, float/integer, char/text). Custom field values that cannot map directly to a typed Odoo field are stored in a supplemental JSON field on the target record and delivered with a data dictionary so the admin can decide on post-migration field splitting.
| Deskera ERP | Odoo ERP | Compatibility | |
|---|---|---|---|
| Chart of Accounts | Account1:1 | Fully supported | |
| Customer | Partner (contact_type = customer)1:1 | Fully supported | |
| Vendor | Partner (contact_type = vendor)1:1 | Fully supported | |
| Journal Entry | Account Move1:1 | Fully supported | |
| Inventory Item | Product (product_type = stockable / consumable / service)1:1 | Fully supported | |
| Sales Order | Sale Order1:1 | Fully supported | |
| Purchase Order | Purchase Order1:1 | Fully supported | |
| Bill of Materials | Bill of Materials (Manufacturing app)1:1 | Fully supported | |
| Employee | Employee1:1 | Fully supported | |
| Custom Field | Custom Field (ir.model.fields)lossy | 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.
Deskera ERP gotchas
Hidden implementation and setup fees inflate perceived cost
No free trial means migration scoping is irreversible
Undocumented API rate limits risk migration pauses
BOM and manufacturing data requires manual routing review
CRM mobile app lacks reporting functionality
Odoo ERP gotchas
No rollback for CSV imports
External ID conflicts on re-import
Many2many field encoding in CSV imports
Large export timeouts require batching
Version schema drift between Odoo releases
Pair-specific challenges
Migration approach
Discovery and migration scope definition
We audit the Deskera portal across active modules (accounting, inventory, manufacturing, HR, CRM), record counts per object type, custom field definitions, and any multi-entity or multi-warehouse configurations. We identify journal names and sequences in Deskera, BOM depth and routing complexity in the MRP module, and the scope of historical data to migrate versus archive. The discovery output is a written migration scope document specifying which objects migrate, which are archived as supplemental records, and which Deskera workflows and automations are documented for rebuild in Odoo rather than migrated.
Destination schema provisioning in Odoo
We set up the Odoo destination environment before any data moves: we create the Chart of Accounts with correct account types, provision journals with their sequences and prefixes, create product categories matching Deskera item categories, configure warehouse locations and inventory settings, and pre-create any custom fields on target Odoo models using ir.model.fields. We enable the Odoo Manufacturing app and create the BOM model structure if Deskera People HR data is in scope. The schema is provisioned in a staging Odoo environment first, validated by the customer's admin, then deployed to the production Odoo instance before data migration begins.
Data extraction from Deskera with throttling and staging validation
We export all source objects from Deskera using their REST API with x-access-token header authentication. We apply conservative request throttling and monitor for 429 responses throughout extraction, restarting any throttled export from the last checkpoint. Exported data is staged in a structured intermediate format (CSV or JSON) and reconciled against Deskera's record counts before transformation begins. Any custom field definitions and their values are extracted alongside their parent records and stored with a data dictionary for Odoo field creation. Lot and serial number data is audited for cross-warehouse name collisions during this phase.
Partner deduplication and party-type routing
We process Deskera's customer and vendor extracts to resolve party-type routing and deduplication. Records where the same email or company name appears in both customer and vendor extracts are flagged for the customer's admin to confirm whether to create one Partner record with both types or two separate records. After deduplication resolution, we load partners into Odoo res.partner in contact_type batches (all customers first, then all vendors, with mixed-type records loaded last with both flags set). Partner loading must complete before any sales order, purchase order, or journal entry migration that references a party can proceed.
Production migration in dependency order
We run the production migration in strict dependency order: Chart of Accounts and tax codes first (required for journal lines and product costs); partners second (required for sales orders, purchase orders, and journal entry references); inventory items and product templates third (required for sales order lines, purchase order lines, and BOM components); BOM structures fourth (with parent-before-child sequencing for nested assemblies); Journal Entries fifth (with journal and sequence provisioned in step 2); Sales Orders sixth; Purchase Orders seventh; Employee records eighth. Each phase emits a row-count reconciliation report against the Deskera source before the next phase begins. Lot and serial number data loads last, with warehouse disambiguation applied before insert.
Cutover, validation, and automation rebuild handoff
We freeze Deskera writes during cutover, run a final delta migration of any records created or modified during the migration window, then designate Odoo as the system of record. We deliver the written automation and workflow inventory document to the customer's admin team, detailing each Deskera automation's trigger, conditions, actions, and the recommended Odoo equivalent (Odoo Studio actions, Python server actions, or automated actions). We support a one-week hypercare window for reconciliation issues raised by the customer's team. We do not rebuild Deskera automations as Odoo workflows inside the migration scope; that work is a separate engagement or an internal admin task.
Platform deep dives
Deskera ERP
Source
Strengths
Weaknesses
Odoo ERP
Destination
Strengths
Weaknesses
Complexity grading
Standard ERP migration. 2 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Deskera ERP and Odoo ERP.
Object compatibility
2 of 8 objects need a mapping; the rest are 1:1.
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
Deskera ERP: Not publicly documented.
Data volume sensitivity
Deskera ERP 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 Deskera ERP to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your Deskera ERP to Odoo ERP migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Deskera ERP
Other ways to arrive at Odoo ERP
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.