ERP migration
Field-level mapping, validation, and rollback between Axelor ERP and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
Axelor ERP
Source
Odoo ERP
Destination
Compatibility
11 of 12
objects map 1:1 between Axelor ERP and Odoo ERP.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Axelor ERP to Odoo ERP is a cross-schema migration between two Java- and Python-based open-source ERP platforms that share broad functional coverage but diverge significantly on community size, deployment model, and automation architecture. Axelor's Partner object (covering customers, suppliers, and prospects) splits into Odoo's separate Contact and Company (Account) records, requiring a one-to-many transformation that we handle at import time. Axelor's custom Studio domain models are XML-defined and live outside the standard schema; we enumerate every non-standard object during scoping by inspecting the application's domain XML files or requesting a full database schema dump. Odoo's XML-RPC API enforces a default rate ceiling that requires batch chunking for large datasets. We do not migrate BPM workflows, Axelor Studio automations, or Forms as code; we deliver a written inventory of every active process definition and Studio-built object requiring manual rebuild in Odoo Workflow or Studio.
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 Axelor 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.
Axelor ERP
Partner
Odoo ERP
Contact and Company/Account
1:manyAxelor Partner is a unified object covering customers, suppliers, and prospects with role classification stored as a field. We split Axelor Partner records into Odoo Contact (the person) and Company (the Account/Company) using the partner's role attribute to determine which records are companies versus individuals. Addresses, bank details, and contact persons stored as related Axelor records migrate to Odoo Contact address fields and bank account records respectively. We normalise the email-to-contact lookup as the dedupe key on import.
Axelor ERP
Product
Odoo ERP
Product Template
1:1Axelor Products (stocked items and services with BOM support) map to Odoo Product Template. Product variants, units of measure, and supplier info stored as related Axelor records migrate to Odoo Product Template variants, uom_id, and seller_ids. Multi-UoM support on Axelor normalises to Odoo's UoM categories and conversion ratios. Product costing method (standard, average, FIFO) migrates as Odoo's cost_method field.
Axelor ERP
Sale Order
Odoo ERP
Sale Order
1:1Axelor Sale Orders with line items, taxes, discounts, and status workflows map directly to Odoo sale.order. Order-to-invoice linkage from Axelor's originId migrates as Odoo's origin field linking the sale order to the created account.move. We extract confirmed, partially fulfilled, and cancelled order history and preserve order status as Odoo state values. Customer address and contact person resolve via the Partner-to-Contact/Company lookup.
Axelor ERP
Purchase Order
Odoo ERP
Purchase Order
1:1Axelor Purchase Orders migrate to Odoo purchase.order using the same line-item, tax, and discount mapping as Sale Orders. Vendor address resolves via the Supplier partner classification from Axelor. Open purchase orders at migration time are flagged so that in-flight receipts and moves are reconciled after cutover.
Axelor ERP
Invoice
Odoo ERP
Account Move (Customer/Vendor Invoice)
1:1Axelor multi-currency, multi-company-aware invoices map to Odoo account.move records with move_type set to out_invoice or in_invoice. Invoice lines, tax computation, payment terms, and overdue flags migrate as Odoo invoice line entries and account.payment.term references. Open versus historical invoices are separated so that only posted invoices affect Odoo's accounting ledger at migration time.
Axelor ERP
Project
Odoo ERP
Project
1:1Axelor Projects with Tasks, Milestones, Time Entries, and Invoicing Plans map to Odoo project.project. The full project hierarchy including subtask nesting, assigned users, and billing rates migrate as Odoo project task records and analytic account entries. Project status and any Axelor custom fields on the project record map to Odoo project custom fields. Billing rates migrate to project pricing rules on the Odoo project.
Axelor ERP
Task
Odoo ERP
Task
1:1Axelor Tasks belonging to Projects with status, priority, assignees, and custom fields map to Odoo project.task. Subtask inheritance that varies by Axelor version is flattened where Odoo does not support nested tasks natively. Task assignments resolve via the Owner-to-User email lookup. Time entries stored against Axelor Tasks migrate as Odoo account.analytic.line linked to the project.
Axelor ERP
Stock Move / Inventory
Odoo ERP
Stock Move / Quant
1:1Axelor Stock Moves tracking internal transfers, receipts, and shipments with real-time inventory impact map to Odoo stock.move and stock.quant. Move lines, warehouse assignments, and lot/serial numbers migrate as Odoo stock.move.line and stock.lot records. Open moves at migration time are flagged so that the customer reconciles any in-flight transfers after cutover. Current stock levels migrate as Odoo stock.quant records for inventory valuation accuracy on day one.
Axelor ERP
General Ledger / Accounting
Odoo ERP
Account (Chart of Accounts) + Journal Entry
1:1The Axelor Chart of Accounts, Journals, and Journal Entries with debit/credit lines and analytic accounts map to Odoo's account.account, account.journal, and account.move tables. This is the highest-risk object in the migration because chart-of-accounts structure varies significantly between deployments. We review the source database schema during scoping to identify the exact journal and account configuration before designing the Odoo account.account entries. Historical journal entries migrate as Odoo account.move records in draft state for customer review before posting.
Axelor ERP
Employee
Odoo ERP
Employee / Hr Employee
1:1Axelor Employee records with contact info, job title, department, and employment dates map to Odoo hr.employee. Reporting-line structure migrates as the parent_id and coach_id relationships in Odoo hr.employee. Employment dates and department assignments are preserved for HR reporting continuity. Any Axelor custom fields on the employee record are noted for manual field creation in Odoo before employee data import.
Axelor ERP
Bill of Materials (BOM)
Odoo ERP
BoM (mrp.bom)
1:1Axelor BOMs defining product component lists and routing steps for manufacturing map to Odoo mrp.bom records. BOM versioning in Axelor is preserved by mapping the active BOM to the Odoo mrp.bom with the latest effective date; alternate BOMs are carried as mrp.bom records with alternative flag. Routing steps map to Odoo mrp.workcenter records linked to the BOM. This mapping is only in scope when the Odoo Manufacturing module is activated on the destination instance.
Axelor ERP
Custom Objects (Studio)
Odoo ERP
Custom Object
1:1Axelor Studio custom domain objects require explicit enumeration during scoping. We request access to the application's XML domain files or a full database schema dump to identify every non-standard model. Each custom Studio object is then mapped to an Odoo custom model with __c suffix and equivalent field types. Custom Studio fields that reference standard Axelor objects (Partner, Product, Order) are created as Odoo many2one or many2many fields pointing to the corresponding standard Odoo model. BPM workflows built in Axelor Studio do not migrate as code.
| Axelor ERP | Odoo ERP | Compatibility | |
|---|---|---|---|
| Partner | Contact and Company/Account1:many | Fully supported | |
| Product | Product Template1:1 | Fully supported | |
| Sale Order | Sale Order1:1 | Fully supported | |
| Purchase Order | Purchase Order1:1 | Fully supported | |
| Invoice | Account Move (Customer/Vendor Invoice)1:1 | Fully supported | |
| Project | Project1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Stock Move / Inventory | Stock Move / Quant1:1 | Fully supported | |
| General Ledger / Accounting | Account (Chart of Accounts) + Journal Entry1:1 | Mapping required | |
| Employee | Employee / Hr Employee1:1 | Fully supported | |
| Bill of Materials (BOM) | BoM (mrp.bom)1:1 | Fully supported | |
| Custom Objects (Studio) | Custom Object1: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.
Axelor ERP gotchas
Custom Studio domain models require manual enumeration
BPM workflow definitions are not standard data records
Multi-company inter-company journals need manual reconciliation mapping
Attachment file binaries require separate storage migration
Version upgrade breaks custom entity field overrides
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 schema enumeration
We audit the source Axelor ERP instance across all active modules, custom Studio domain models (via XML domain file inspection or database schema dump), active BPM process definitions, and inter-company journal configuration. We document the chart of accounts structure, active journal types, and any overridden entity fields from prior Axelor version upgrades. We pair this with Odoo edition selection: Community for free deployments with self-hosting, Odoo.sh for managed cloud, or on-premise with a paid plan. The discovery output is a written migration scope, object inventory, and Odoo configuration plan.
Schema design and custom object provisioning
We design the destination Odoo schema before any data moves. This includes activating the required Odoo modules (Sales, Purchase, Inventory, Manufacturing, Accounting, Project, HR), provisioning custom fields to hold any Axelor custom fields that do not map to standard Odoo fields, configuring the chart of accounts (mapped from the Axelor account structure), setting up warehouse and location hierarchy for inventory, and designing the inter-company journal split strategy. Schema is validated in an Odoo staging database before production migration begins.
Staging migration and reconciliation
We run a full migration into an Odoo staging environment using production-like data volume. The customer's functional lead reconciles record counts per object (Partners in vs Contacts and Companies in, Products in, Orders in, Invoices in, Projects in, Stock Quants in, Journal Entries in), spot-checks 25-50 random records against the Axelor source, and validates that the account.move states are correct for open vs historical invoices. Mapping corrections are applied in the staging environment before production migration begins.
Owner and user reconciliation
We extract every distinct Axelor user referenced as an owner on Partners, Orders, Projects, and Stock Moves and match by email against the Odoo destination instance's res.users table. Any Axelor user without a matching Odoo user is placed in a reconciliation queue. The customer's Odoo admin provisions any missing users (active or inactive depending on whether the original Axelor user is still active) before record import resumes. Employee records are imported after user provisioning so that the responsible_user_id on tasks and projects can be resolved.
Production migration in dependency order
We run production migration in record-dependency order: Company/Account (from Axelor Partners classified as organisations) first, then Contact (from Axelor Partners classified as individuals, with parent_id resolved to the matching Account), Product Template, Sale Orders, Purchase Orders, Invoices (as draft account.move for review), Project and Tasks, Employees, Stock Quants and open Stock Moves, BOMs (when Manufacturing is active), Journal Entries (as draft account.move), and Custom Objects last (because they often have many2one lookups to standard objects). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and workflow rebuild handoff
We freeze Axelor write access during cutover, run a final delta migration of any records modified during the migration window, then mark Odoo as the system of record. We validate open purchase orders, in-progress manufacturing orders, and open stock moves one final time against the source. We deliver the BPM workflow inventory and Studio automation document to the customer's admin team for rebuild in Odoo Workflow or Studio. We support a one-week hypercare window where we resolve reconciliation issues raised by the customer's team. We do not rebuild Axelor BPM workflows as Odoo Workflow inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
Axelor ERP
Source
Strengths
Weaknesses
Odoo ERP
Destination
Strengths
Weaknesses
Complexity grading
Standard ERP migration. 1 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 Axelor ERP and Odoo ERP.
Object compatibility
1 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
Axelor ERP: Not publicly documented.
Data volume sensitivity
Axelor 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 Axelor ERP to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your Axelor 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 Axelor 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.