ERP migration
Field-level mapping, validation, and rollback between Odoo ERP and Dolibarr ERP. We move data and schema; workflows are rebuilt natively in Dolibarr ERP.
Odoo ERP
Source
Dolibarr ERP
Destination
Compatibility
11 of 15
objects map 1:1 between Odoo ERP and Dolibarr ERP.
Complexity
BStandard
Timeline
4-8 weeks
Try the reverse
Overview
Moving from Odoo ERP to Dolibarr is a simplification and cost-reduction migration. Odoo's all-in-one architecture with 80+ apps sharing one PostgreSQL database collapses into Dolibarr's lighter modular stack where you activate only the modules you need on a single PHP application. We export from Odoo via XML-RPC or JSON-RPC using External IDs as the import reference, chunk large datasets in batches of 500-1,000 records, and import into Dolibarr through its CSV import interface or REST API with module-activation validation confirmed before each object phase. Odoo's multi-company and Odoo Studio customizations require explicit re-design in Dolibarr because Dolibarr does not share Odoo's company-scoped record isolation or Studio-style field builder. We do not migrate Odoo Workflows, Manufacturing Orders, or Bills of Materials as working records; these map to Dolibarr project notes, third-party notes, or are flagged as rebuild-required post-migration.
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.
Source platform
Odoo ERP platform overview
Scorecard, SWOT, gotchas, and pricing for Odoo ERP.
Destination platform
Dolibarr ERP platform overview
Scorecard, SWOT, gotchas, and pricing for Dolibarr ERP.
Data migration guide
The complete Dolibarr migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Source platform guide
Odoo ERP migration guide
Understand the data you're exporting from Odoo ERP before mapping it.
Destination checklist
Dolibarr migration checklist
Pre- and post-cutover tasks for moving onto Dolibarr ERP.
Source checklist
Odoo ERP migration checklist
Exit checklist for unwinding your Odoo ERP setup cleanly.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Odoo ERP object lands in Dolibarr ERP, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Odoo ERP
Partner (Contact/Company)
Dolibarr ERP
ThirdParty + Contact
1:manyOdoo Partner records (type contact vs company) split into Dolibarr ThirdParty (soc: company record) and Dolibarr Contact (socpeople: individual contact record linked by fk_soc). We preserve partner categories as Dolibarr categories and bank details as Dolibarr bank account records. Address fields (street, city, zip, country) map to Dolibarr address fields directly.
Odoo ERP
Partner Category
Dolibarr ERP
Category
lossyOdoo partner categories map to Dolibarr categories with type = Customer or Supplier. Categories are resolved before partner import so that the category reference is satisfied at import time.
Odoo ERP
Product
Dolibarr ERP
Product (Article)
1:1Odoo Products map to Dolibarr products (type product or service). Product type (stockable, consumable, service) maps to Dolibarr finished, raw material, or service. List price maps to Sell price; standard cost maps to Cost price. Product variants via attribute combinations flatten to separate Dolibarr product rows if Dolibarr variant handling is not enabled.
Odoo ERP
Sales Order
Dolibarr ERP
Order (Commande)
1:1Odoo sale.order records map to Dolibarr orders (commande). Order state (draft, sale_order, done, cancel) maps to Dolibarr status (Draft, Validated, On Bill, Billed, Cancelled). Order lines map with product reference, quantity, unit price, and tax resolved from Odoo's fiscal position. We import orders before invoices so that order references are available for invoice linkage.
Odoo ERP
Invoice (account.move)
Dolibarr ERP
Invoice (Facture)
1:1Odoo account.move records (move_type out_invoice, out_refund) map to Dolibarr invoices and credit notes. Posted invoices are imported as closed records; draft invoices are imported as draft. Odoo's invoice lines map to Dolibarr invoice lines with product, quantity, price, and tax. Fiscal positions that affect tax computation require post-migration configuration in Dolibarr's tax and third-party settings.
Odoo ERP
Purchase Order
Dolibarr ERP
Order Supplier (CommandeFournisseur)
1:1Odoo purchase.order records map to Dolibarr supplier orders (commande fournisseur). State mapping follows the same draft-confirm-done lifecycle. Supplier invoice linkage imports as separate Dolibarr invoice records linked to the supplier third-party.
Odoo ERP
Project
Dolibarr ERP
Project (Projet)
1:1Odoo project.project records map to Dolibarr projects. Project stages map to Dolibarr project status values. Projectued and effective dates transfer directly. Project-linked tasks import as Dolibarr tasks in a second pass using project ID lookups resolved at migration time.
Odoo ERP
Task
Dolibarr ERP
Task (Task)
1:1Odoo project.task records map to Dolibarr tasks linked to the corresponding project. Sub-tasks (parent_id hierarchy) map as tasks with a parent task reference where Dolibarr's hierarchy model permits; otherwise sub-task notes are appended to the parent task description. Stage names transfer as-is; priority maps from Odoo's priority to Dolibarr's task priority field.
Odoo ERP
Stock Location
Dolibarr ERP
Warehouse (Entrepot)
lossyOdoo stock.location records map to Dolibarr warehouses (entrepot). Multi-level Odoo location hierarchies (view locations, internal locations, partner locations) flatten to one Dolibarr warehouse per distinct location used for stock tracking. Virtual and partner locations are excluded from the stock import phase.
Odoo ERP
Stock Quant
Dolibarr ERP
Stock Movement
1:1Odoo stock.quant on-hand quantities per location map to Dolibarr stock product quantities at the warehouse level. Lot/serial number traceability is preserved where present but flagged for manual verification post-import because Dolibarr's lot tracking module may not be activated in all customer configurations.
Odoo ERP
Chart of Accounts
Dolibarr ERP
Account (Plan de comptes)
1:1Odoo account.account records (code, name, user_type) map to Dolibarr accounting accounts. Country-specific tax groups and fiscal position rules require explicit configuration in Dolibarr's accounting module setup and cannot be imported as working rules. We deliver a written account mapping table for the customer's accountant to configure the destination chart before go-live.
Odoo ERP
Tax
Dolibarr ERP
Tax (Taxe)
1:1Odoo account.tax records (name, type_tax_use, amount, tax_group) map to Dolibarr taxes with scope (sale/purchase) and rate. Tax computation method (included in price vs excluded) transfers. Fiscal position automation does not migrate; Dolibarr's third-party country-based rules require manual configuration post-import.
Odoo ERP
Custom Field (ir.model.fields)
Dolibarr ERP
ExtraField (extrafields)
lossyOdoo custom fields defined via ir.model.fields (ttype: char, text, integer, float, boolean, selection, many2one, many2many) map to Dolibarr extrafields where Dolibarr's data model supports an equivalent field type. Selection-type custom fields migrate as Dolibarr select or varchar fields. many2many fields require manual mapping because Dolibarr handles multi-value links differently from Odoo's relational model.
Odoo ERP
Attachment (ir.attachment)
Dolibarr ERP
Document
1:1Odoo ir.attachment records with a public URL store map to Dolibarr documents linked to the parent record (third-party, product, order, invoice, project) via the file URL. Large binary attachments should be provided as public URLs for Dolibarr to reference rather than uploaded as base64-encoded blobs. Dolibarr document management requires the Module1 (GED/document) module to be activated.
Odoo ERP
Employee (hr.employee)
Dolibarr ERP
Contact (role = Employee)
1:1Odoo hr.employee records map to Dolibarr contacts with the Employee category assigned and a role property marking them as internal resources. Employee-specific fields (emergency contacts, attendance, contracts) are Odoo HR module-specific and have no Dolibarr equivalent; these are flagged in the handoff document for manual review.
| Odoo ERP | Dolibarr ERP | Compatibility | |
|---|---|---|---|
| Partner (Contact/Company) | ThirdParty + Contact1:many | Fully supported | |
| Partner Category | Categorylossy | Fully supported | |
| Product | Product (Article)1:1 | Fully supported | |
| Sales Order | Order (Commande)1:1 | Fully supported | |
| Invoice (account.move) | Invoice (Facture)1:1 | Fully supported | |
| Purchase Order | Order Supplier (CommandeFournisseur)1:1 | Fully supported | |
| Project | Project (Projet)1:1 | Fully supported | |
| Task | Task (Task)1:1 | Fully supported | |
| Stock Location | Warehouse (Entrepot)lossy | Fully supported | |
| Stock Quant | Stock Movement1:1 | Fully supported | |
| Chart of Accounts | Account (Plan de comptes)1:1 | Mapping required | |
| Tax | Tax (Taxe)1:1 | Fully supported | |
| Custom Field (ir.model.fields) | ExtraField (extrafields)lossy | Fully supported | |
| Attachment (ir.attachment) | Document1:1 | Fully supported | |
| Employee (hr.employee) | Contact (role = Employee)1: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.
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
Dolibarr ERP gotchas
Foreign key constraint errors on cross-distribution database restore
SQL injection vulnerabilities in version 9.0.1
Custom fields stored as JSON in extraoptions require field-by-field deserialization
Decimal precision and rounding configuration affects price fields
No native iOS/Android app forces reliance on browser
Pair-specific challenges
Migration approach
Discovery and Odoo version audit
We audit the source Odoo instance: active modules, Odoo version, partner count, order volume, active inventory locations, custom fields via ir.model.fields, Odoo Studio modifications, and multi-company configuration. We also confirm which Dolibarr modules the customer plans to activate (CRM, Invoicing, Stock, Projects, HR, etc.) because Dolibarr only creates target tables for active modules. The discovery output is a written migration scope document listing every Odoo model to migrate, every Dolibarr module to activate, and the source Odoo version required for schema resolution.
Schema design and module activation checklist
We design the Dolibarr destination schema: which Dolibarr modules activate, which account categories map from Odoo's chart of accounts, how partner categories map to Dolibarr categories, and whether Dolibarr's production or MRP module is active for manufacturing data. We create a pre-migration checklist for the customer's Dolibarr admin confirming module activation and base configuration (company info, currency, warehouse locations, tax rates) before any import begins. This step prevents the common issue where Dolibarr silently lacks a target table because the required module is not active.
Sandbox migration and reconciliation
We run a full migration into a test Dolibarr instance using production-like data volume. The customer's team reviews record counts (third-parties in, contacts in, orders in, invoices in), spot-checks 25-50 records against the Odoo source, and validates that Dolibarr's PDF invoice output matches the customer's branding requirements. Any field mapping corrections, partner split logic adjustments, or module activation gaps surface here. Production migration does not begin until the customer signs off on the sandbox reconciliation report.
Partner split and export in dependency order
We export Odoo data in dependency order. Partner data is the first export: company-type partners become Dolibarr third-parties; contact-type partners are held for a second pass after third-parties are created. We export in batches of 500-1,000 records using Odoo search_read with offset iteration, capturing External IDs for cross-reference during import. Products and price lists export next, followed by warehouse locations, then sales orders, then invoices, then projects and tasks. Each batch emits an export count that we compare against the import count in Dolibarr before the next phase begins.
Production migration with row-count reconciliation
We run production migration in the confirmed dependency sequence: third-parties, contacts (with fk_soc resolved), products, warehouse locations, stock quantities, sales orders, purchase orders, invoices, projects, tasks, and custom fields. Each phase validates the import row count against the export count before the next phase starts. any mismatches halt migration and trigger a diagnostic pass. Dolibarr CSV imports are used for most object types; we validate column headers and value formats against Dolibarr's import field requirements before submitting each batch. Large Odoo exports are chunked in 500-record segments with a 2-second delay between batches to avoid API timeouts.
Cutover, validation, and workflow rebuild handoff
We freeze Odoo write access during the cutover window, run a final delta migration of any records created or modified since the last batch, then confirm Dolibarr as the system of record. We deliver a written inventory of every Odoo Workflow, automated action, and module-level automation that cannot migrate to Dolibarr, along with a rebuild recommendation for each. Dolibarr's action/event trigger system (if the Agenda module is active) can replace some Odoo workflow triggers but requires manual configuration. We support a one-week hypercare window for reconciliation issues; post-migration admin support, training, and workflow rebuild are outside standard migration scope.
Platform deep dives
Odoo ERP
Source
Strengths
Weaknesses
Dolibarr 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 Odoo ERP and Dolibarr 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
Odoo ERP: Not publicly documented by Odoo.
Data volume sensitivity
Odoo 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 Odoo ERP to Dolibarr ERP migration scoping. Not seeing yours? Book a call.
Walk through your Odoo ERP to Dolibarr 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 Odoo ERP
Other ways to arrive at Dolibarr 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.