ERP migration
Field-level mapping, validation, and rollback between Odoo Enterprise and Microsoft Dynamics 365 Business Central. We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Business Central.
Odoo Enterprise
Source
Microsoft Dynamics 365 Business Central
Destination
Compatibility
9 of 14
objects map 1:1 between Odoo Enterprise and Microsoft Dynamics 365 Business Central.
Complexity
BStandard
Timeline
6-10 weeks
Overview
Moving from Odoo Enterprise to Microsoft Dynamics 365 is a cross-platform ERP migration that requires reconciling fundamentally different data architectures. Odoo uses a single shared res.partner model for individuals and organizations; Dynamics 365 separates Accounts (organizations) from Contacts (individuals), requiring a structural split at migration time. Odoo's country-specific fiscal localization modules—embedding tax rates, Chart of Accounts templates, and reporting requirements—must be explicitly remapped to the destination's country-matched localization. We extract from Odoo via XML-RPC External API or direct PostgreSQL read for self-hosted instances, resolve parent-record dependencies, and load into Dynamics 365 Finance, Business Central, or Operations depending on the customer's edition. We do not migrate Odoo Workflows, Studio customizations, or Enterprise-only modules (POS Enterprise, CRM Enterprise, Documents, Social, AI) as code; we deliver a written inventory of every affected module, automation, and custom view for the customer's admin to rebuild in Dynamics.
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 Enterprise platform overview
Scorecard, SWOT, gotchas, and pricing for Odoo Enterprise.
Destination platform
Microsoft Dynamics 365 Business Central platform overview
Scorecard, SWOT, gotchas, and pricing for Microsoft Dynamics 365 Business Central.
Data migration guide
The complete Dynamics 365 Business Central migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
Dynamics 365 Business Central migration checklist
Pre- and post-cutover tasks for moving onto Microsoft Dynamics 365 Business Central.
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 Enterprise object lands in Microsoft Dynamics 365 Business Central, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Odoo Enterprise
res.partner
Microsoft Dynamics 365 Business Central
Account and Contact (split required)
1:manyOdoo's res.partner serves as both individual and organizational contact; Dynamics 365 separates these into Account (the company or organization) and Contact (the individual). We split at migration time using Odoo's partner properties: commercial companies and vendors map to Account; individuals and customer contacts map to Contact linked to an Account via the AccountID lookup. The original partner type (customer, vendor, both) is preserved in a custom field partner_type__c on both Account and Contact for segmentation and reporting.
Odoo Enterprise
Product.product (variants)
Microsoft Dynamics 365 Business Central
Item and Item Variant
1:1Odoo product variants (size, color, dimension combinations) map to Dynamics 365 Item Variants. The base product template becomes the Dynamics Item with type = Inventory or Service. Variant attributes map to Item Variant records with distinct Item Tracking codes. We preserve the Odoo product routes (make-to-order, dropship) as warehouse setup in Dynamics. SKU (product.default_code) maps to Dynamics Item Number.
Odoo Enterprise
product.template (BoM)
Microsoft Dynamics 365 Business Central
Bill of Materials and Production BOM
1:1Odoo product templates with Bill of Materials (mrp.bom) map to Dynamics Production BOMs. Routing operations (mrp.routing.workcenter) map to Dynamics Work Centers and Machine Centers. We preserve consumption tracking, operation times, and work order dependencies. Note that Odoo's flexible BoM (multi-level, kit products) requires careful sequencing in Dynamics because production order explosion behaves differently between platforms.
Odoo Enterprise
sale.order
Microsoft Dynamics 365 Business Central
Sales Order
1:1Odoo sale orders map to Dynamics Sales Orders with Order Lines, scheduled shipment dates, and payment terms preserved. The Odoo linked delivery (stock.picking) and invoice state map to Dynamics shipment status and invoice status. We resolve the Odoo sales person (user_id) to the Dynamics User, and the Odoo pricelist to the Dynamics Price List at migration time.
Odoo Enterprise
purchase.order
Microsoft Dynamics 365 Business Central
Purchase Order
1:1Odoo purchase orders map to Dynamics Purchase Orders with vendor, lines, receipts, and bills. Receipt-to-bill matching (stock.picking linked to account_move) is preserved as receipt and invoice status on the Dynamics Purchase Order. Historical partially-received PO states are preserved.
Odoo Enterprise
account.move (invoices)
Microsoft Dynamics 365 Business Central
Posted Sales Invoice, Posted Purchase Invoice, or Journal Entry
1:1Odoo customer invoices, vendor bills, and journal entries map to Dynamics Posted Invoices and Journal Entries. We separate open (draft) invoices from posted invoices because open invoices require account configuration before they can be posted in Dynamics. Credit notes map to Dynamics Sales Credit Memos. The Odoo fiscal position mapping to tax codes is preserved as Dynamics Tax Groups with country-matched configuration.
Odoo Enterprise
account.account (Chart of Accounts)
Microsoft Dynamics 365 Business Central
G/L Account
lossyOdoo Chart of Accounts entries map to Dynamics G/L Accounts only when the destination instance uses an equivalent country localization. We do not attempt cross-country accounting localization migration without explicitly remapping every affected account code, account type, and tax receipt tag to the destination's country-matched Chart of Accounts template. This step requires the customer's finance team to validate account mapping before migration and is scoped as a configuration-heavy phase.
Odoo Enterprise
stock.quant, stock.move, stock.picking
Microsoft Dynamics 365 Business Central
Item Ledger Entry, Value Entry, and Warehouse Receipt/Shipment/Transfer
1:1Odoo stock quants (on-hand quantities), stock moves (history), and pickings (transfers) map to Dynamics warehouse management entries. Lot and serial number traceability migrates to Dynamics Item Tracking Codes. Quant snapshots are migrated as inventory periods to preserve historical on-hand positions without generating new transactions in Dynamics.
Odoo Enterprise
project.project and project.task
Microsoft Dynamics 365 Business Central
Project and Project Task
1:1Odoo projects and tasks map to Dynamics 365 Project Operations projects and tasks. Sub-task hierarchies, assignees, tags, and stage pipelines migrate. We flag any Odoo project automation (automated actions on project.task) as requiring rebuild in Dynamics Project Service Automation or Power Automate; automated stage logic does not migrate as code.
Odoo Enterprise
hr.employee
Microsoft Dynamics 365 Business Central
Worker
1:1Odoo employee records (hr.employee) including contracts, department assignments, and employment status migrate to Dynamics 365 Human Resources Workers. Active employment status maps to Dynamics Worker status. Historical payslip data migrates as read-only records. Note that Odoo's payroll module is separate from its HR module; payroll data migration requires specific country localization configuration in Dynamics.
Odoo Enterprise
crm.lead
Microsoft Dynamics 365 Business Central
Lead or Opportunity
1:manyOdoo CRM leads that are unqualified prospects map to Dynamics 365 Leads. Leads that have progressed to a sales opportunity map to Dynamics Opportunities. The Odoo lead status and probability map to Dynamics Lead Status and Opportunity Stage. We flag Enterprise CRM features (CRM Enterprise automation, lead scoring, team selling) that require rebuild in Dynamics Sales Accelerator or Power Automate.
Odoo Enterprise
Custom models (x_custom_model)
Microsoft Dynamics 365 Business Central
Custom Table and Extension
1:1Odoo custom models created via Odoo Studio or ir.model.fields are accessible via xmlrpc and migrate as Dynamics 365 custom tables. We pre-create the destination schema including all field types, lookup relationships, and validation rules before data import. Custom module Python code does not migrate; we document the custom model's logic for the customer's developer to reimplement as a Dynamics extension.
Odoo Enterprise
Attachments / Documents
Microsoft Dynamics 365 Business Central
SharePoint Document Library or Notes
lossyOdoo stores attachments in PostgreSQL (ir_attachment with db_datas) and the filestore directory. We extract both, reconstruct the filestore tree, and relink attachments to their original records in Dynamics SharePoint or as Notes. For Dynamics 365 Business Central, SharePoint integration must be enabled and configured before attachment migration; we handle the setup during the configuration phase.
Odoo Enterprise
Fiscal Position (account.fiscal.position)
Microsoft Dynamics 365 Business Central
Tax Configuration and Customer/Vendor Templates
lossyOdoo fiscal positions (tax and account mapping based on partner country/VAT) are critical for EU VAT compliance. We validate that the destination's country-specific tax codes can represent the same fiscal positions and flag any gaps. Tax Group configuration in Dynamics must be completed before invoice migration to ensure posted invoices carry the correct tax amounts.
| Odoo Enterprise | Microsoft Dynamics 365 Business Central | Compatibility | |
|---|---|---|---|
| res.partner | Account and Contact (split required)1:many | Fully supported | |
| Product.product (variants) | Item and Item Variant1:1 | Fully supported | |
| product.template (BoM) | Bill of Materials and Production BOM1:1 | Fully supported | |
| sale.order | Sales Order1:1 | Fully supported | |
| purchase.order | Purchase Order1:1 | Fully supported | |
| account.move (invoices) | Posted Sales Invoice, Posted Purchase Invoice, or Journal Entry1:1 | Fully supported | |
| account.account (Chart of Accounts) | G/L Accountlossy | Fully supported | |
| stock.quant, stock.move, stock.picking | Item Ledger Entry, Value Entry, and Warehouse Receipt/Shipment/Transfer1:1 | Fully supported | |
| project.project and project.task | Project and Project Task1:1 | Fully supported | |
| hr.employee | Worker1:1 | Fully supported | |
| crm.lead | Lead or Opportunity1:many | Fully supported | |
| Custom models (x_custom_model) | Custom Table and Extension1:1 | Fully supported | |
| Attachments / Documents | SharePoint Document Library or Noteslossy | Mapping required | |
| Fiscal Position (account.fiscal.position) | Tax Configuration and Customer/Vendor Templateslossy | 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 Enterprise gotchas
Enterprise-to-Community downgrade leaves orphaned module references
25% legacy surcharge for older Odoo versions
XML-RPC API lacks public rate limit documentation
Official upgrade service ignores custom and third-party modules
Fiscal localization modules tie accounting data to country
Microsoft Dynamics 365 Business Central gotchas
Named-user licensing has no concurrent-use relief
API rate limits throttle large-volume migrations
Historical posted transactions require selective migration scoping
NAV-to-Business Central cloud migration requires partner coordination
Custom fields and AL extensions require separate migration handling
Pair-specific challenges
Migration approach
Discovery and edition alignment
We audit the source Odoo Enterprise instance across version (v14-v18), deployed modules, custom models, PostgreSQL schema, Enterprise-only module count, and fiscal localization country. We pair this with a Dynamics 365 edition assessment: Business Central Essentials ($80/user) covers most SMB migrations with standard financials, inventory, and sales; Business Central Premium ($110/user) adds Service Management; Dynamics 365 Finance ($180-$300/user) is required for multi-entity, multi-country financial consolidation. The discovery output is a written migration scope with object inventory, Edition recommendation, and a data-cleanse checklist for the customer's team to address before migration.
Schema design and res.partner split architecture
We design the destination Dynamics 365 schema before any data moves. This includes provisioning custom tables and fields (with API names matched to Odoo custom model names), configuring the country-matched Chart of Accounts, setting up Tax Groups and Tax Codes to mirror Odoo's fiscal positions, creating the Account-Contact split rule from the Odoo is_company and partner flags, configuring warehouse locations to match Odoo stock locations, and setting up production calendars for any manufacturing migration. Schema is validated in a Dynamics 365 Sandbox before production migration begins.
Sandbox migration and reconciliation
We run a full migration into a Dynamics 365 Sandbox environment using production-like data volume. The customer's finance and operations leads reconcile record counts (Accounts, Contacts, Items, Sales Orders, Purchase Orders, Posted Invoices, Projects), spot-check fifty to one hundred random records against the Odoo source, and validate fiscal position and tax code mapping. Any mapping corrections, account code adjustments, or tax group gaps are resolved in the Sandbox. Sign-off on the Sandbox reconciliation is required before production migration begins.
Data extraction from Odoo
We extract data from Odoo via XML-RPC External API for Odoo Online and Odoo.sh, or via direct PostgreSQL read for self-hosted instances. We implement batch chunking (500 records per batch) with exponential backoff and jitter on API responses, and we monitor for HTTP 503 errors that indicate server-side timeout on shared infrastructure. Enterprise-only module references are stripped from the extraction or flagged as custom-object candidates depending on the migration strategy agreed during scoping. We extract in dependency order: Companies (Account candidates), Contacts (Contact candidates), Products, then transactional records.
Production migration in dependency order
We run production migration in strict record-dependency order: Chart of Accounts (G/L Accounts), Tax Groups and Tax Codes (validated by finance team), Locations and Warehouses, Products with BoM and variants, Accounts and Contacts (with split applied), Sales Orders, Purchase Orders, Posted Invoices, Projects and Tasks, Manufacturing (work orders and routing), Activity history, and Custom Objects last. Each phase emits a row-count reconciliation report before the next phase begins. Fiscal position validation happens before any posted invoice is loaded.
Cutover, validation, and Enterprise module handoff
We freeze Odoo write access during cutover, run a final delta migration of any records modified during the migration window, then set Dynamics 365 as the system of record. We deliver a written inventory of every Odoo Enterprise-only module, Studio customization, automated action, and server action requiring rebuild in Dynamics (as Power Automate flows, Dynamics extensions, or third-party AppSource solutions). We support a two-week hypercare window for reconciliation issues. We do not rebuild Odoo Workflows, Studio views, or Enterprise automations as code; those are documented for the customer's Dynamics partner or admin team.
Platform deep dives
Odoo Enterprise
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Business Central
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 Enterprise and Microsoft Dynamics 365 Business Central.
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 Enterprise: Not publicly documented; timeouts observed on Odoo.sh at high request volumes.
Data volume sensitivity
Odoo Enterprise 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 Enterprise to Microsoft Dynamics 365 Business Central migration scoping. Not seeing yours? Book a call.
Walk through your Odoo Enterprise to Microsoft Dynamics 365 Business Central 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 Enterprise
Other ways to arrive at Microsoft Dynamics 365 Business Central
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.