ERP migration
Field-level mapping, validation, and rollback between Microsoft Dynamics 365 Business Central and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
Microsoft Dynamics 365 Business Central
Source
Odoo ERP
Destination
Compatibility
11 of 12
objects map 1:1 between Microsoft Dynamics 365 Business Central and Odoo ERP.
Complexity
BStandard
Timeline
4-8 weeks
Try the reverse
Overview
Moving from Microsoft Dynamics 365 Business Central to Odoo ERP is a platform switch with structural data-model differences that require deliberate mapping decisions. Business Central organizes transactional data around de-normalized data entities that abstract away the underlying normalized table structure; Odoo uses direct relational tables that expose schema differences BC hides. We resolve that abstraction gap by extracting BC data entities via the REST API v2.0, flattening them to source table records, then mapping to typed Odoo records with the correct foreign-key resolution. Chart of Accounts localization, item costing methods (FIFO, Average, Standard), and tax rate configurations require Odoo-side setup before any master data import. Approval workflows, RapidStart configuration packages, and AL extensions do not migrate; we deliver a written inventory of these for the customer's Odoo partner to rebuild. Open sales and purchase orders migrate with original document dates and due dates preserved; posted transaction history migrates as opening balances carried forward to a defined cutoff date.
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
Microsoft Dynamics 365 Business Central platform overview
Scorecard, SWOT, gotchas, and pricing for Microsoft Dynamics 365 Business Central.
Destination platform
Odoo ERP platform overview
Scorecard, SWOT, gotchas, and pricing for Odoo ERP.
Data migration guide
The complete Odoo ERP migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Source platform guide
Dynamics 365 Business Central migration guide
Understand the data you're exporting from Microsoft Dynamics 365 Business Central before mapping it.
Destination checklist
Odoo ERP migration checklist
Pre- and post-cutover tasks for moving onto Odoo ERP.
Source checklist
Dynamics 365 Business Central migration checklist
Exit checklist for unwinding your Microsoft Dynamics 365 Business Central 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 Microsoft Dynamics 365 Business Central 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.
Microsoft Dynamics 365 Business Central
Customer
Odoo ERP
Contact (under CRM app)
1:1Business Central Customer master records map to Odoo CRM Contacts with the company flag set to create an associated Partner record. We extract the t Customer table fields (No., Name, Address, Contact, Payment Terms Code, Credit Limit, Posting Group) and map them to Odoo res.partner fields, preserving the BC customer number as a reference field. Payment terms from BC (e.g., NET30) are mapped to Odoo Account Payment Terms by name match.
Microsoft Dynamics 365 Business Central
Vendor
Odoo ERP
Contact (with Supplier flag)
1:1Business Central Vendor records map to Odoo res.partner records with the Supplier checkbox enabled, activating the Purchase app visibility. We map Vendor Posting Group from BC to Odoo's Property Stock Valuation account and Property Cost of Goods Sold account by name lookup. Pay-to addresses map to the Partner's Contact records for multi-address vendors.
Microsoft Dynamics 365 Business Central
Item (Inventory Item)
Odoo ERP
Product (storable)
1:1Business Central Inventory Items map to Odoo Product records with type=product (storable). We resolve BC's Item Category code to Odoo Product Category, map Unit of Measure from BC's Item Unit of Measure to Odoo's uom.uom table, and carry forward the costing method (FIFO, Average, Standard) to Odoo's inventory valuation setting. The Costing Method is a critical mapping decision because BC and Odoo handle negative inventory differently and the setting must be configured in Odoo before any stock moves are imported.
Microsoft Dynamics 365 Business Central
Item (Service Item)
Odoo ERP
Product (service)
1:1Business Central Service items map to Odoo Product records with type=service. These do not carry stock or valuation implications and import without Odoo-side inventory configuration. BC's default unit of measure maps to Odoo's service UOM.
Microsoft Dynamics 365 Business Central
G/L Account
Odoo ERP
Account (chart of accounts)
lossyThe Business Central Chart of Accounts maps to Odoo's account.account table. We extract G/L Account records with their Account Type (Posting, Heading, Total, Begin-Total, End-Total) and map BC account numbers to Odoo code. The customer must configure the Odoo Chart of Accounts template matching their country localization before this import runs. We flag any BC account with a Consolidation account type or Detailed Counting flag as requiring manual Odoo configuration. This step is the prerequisite for all financial record imports.
Microsoft Dynamics 365 Business Central
Customer Ledger Entry (open invoices)
Odoo ERP
Account Move (open invoices)
1:1Open, unposted Business Central sales invoices map to Odoo account.move records of type=out_invoice in draft state. BC's document-level structure (header with line items) maps to Odoo's invoice line structure, with BC's VAT product mappings resolved to Odoo account.tax records by tax rate and tax scope. Due dates and payment terms carry forward from BC. Posted AP invoices from BC are mapped to Odoo account.move records of type=in_invoice with posting dates preserved.
Microsoft Dynamics 365 Business Central
Sales Order (open)
Odoo ERP
Sale Order (draft)
1:1Open, unposted Business Central Sales Orders migrate to Odoo sale.order records in state=draft. BC's Sales Header (Order No., Sell-to Customer No., Order Date, Shipment Date) maps to Odoo's sale.order fields. BC's Sales Line table maps to Odoo's order line records with product reference resolved to the Odoo product ID via SKU or item number. We flag BC orders with drop-ship or special order flags for Odoo-specific configuration because Odoo handles these through warehouse routes rather than document flags.
Microsoft Dynamics 365 Business Central
Purchase Order (open)
Odoo ERP
Purchase Order (draft)
1:1Open, unposted Business Central Purchase Orders map to Odoo purchase.order records in state=draft. Expected receipt dates from BC map to Odoo's date_planned field. BC vendor item references are mapped to Odoo vendor Pricelist entries for the associated product. We resolve the vendor's Odoo Partner ID using the vendor number lookup established during vendor migration.
Microsoft Dynamics 365 Business Central
Item Ledger Entry (open quantity)
Odoo ERP
Quant (stock.quant)
1:1Business Central Item Ledger Entry records with positive open quantity are mapped to Odoo stock.quant records representing on-hand inventory at the cutover date. BC's Location Code maps to Odoo Stock Location via name lookup, and the Lot/Serial Number from BC maps to stock.productionlot. BC Value Entry cost layers are preserved for Odoo's average cost calculation on first receipt. Historical posted ledger entries (closed transactions) are not replayed; instead we carry forward the open quantity balance as an opening Quant.
Microsoft Dynamics 365 Business Central
Fixed Asset
Odoo ERP
Asset (account_asset)
1:1Business Central Fixed Asset records map to Odoo account.asset records. We carry forward the Acquisition Cost, Depreciation Starting Date, Depreciation Method (Straight-line, Declining Balance), and Number of Depreciation Years. BC's Depreciation Book assignments map to Odoo's Asset Category with the corresponding journal. Insurance policy and location details migrate as asset notes.
Microsoft Dynamics 365 Business Central
Job
Odoo ERP
Project (project)
1:1Business Central Job records with WBS task breakdowns and resource time entries map to Odoo Project records with task lines and timesheet entries. BC Job Ledger Entries map to Odoo account.analytic.line records linked to the Project. BC Job posting groups are mapped to Odoo analytic account tags. Open Job tasks migrate as Odoo project.task records; closed tasks migrate as project.task records in a completed stage.
Microsoft Dynamics 365 Business Central
Bank Account
Odoo ERP
Bank Journal + Account
1:1Business Central Bank Account records map to Odoo account.journal records of type=bank with the linked account.account record carrying the Bank Account Posting Group from BC. Open bank account ledger entries from BC are mapped to Odoo account.move.line records in the bank journal.
| Microsoft Dynamics 365 Business Central | Odoo ERP | Compatibility | |
|---|---|---|---|
| Customer | Contact (under CRM app)1:1 | Fully supported | |
| Vendor | Contact (with Supplier flag)1:1 | Fully supported | |
| Item (Inventory Item) | Product (storable)1:1 | Fully supported | |
| Item (Service Item) | Product (service)1:1 | Fully supported | |
| G/L Account | Account (chart of accounts)lossy | Fully supported | |
| Customer Ledger Entry (open invoices) | Account Move (open invoices)1:1 | Fully supported | |
| Sales Order (open) | Sale Order (draft)1:1 | Fully supported | |
| Purchase Order (open) | Purchase Order (draft)1:1 | Fully supported | |
| Item Ledger Entry (open quantity) | Quant (stock.quant)1:1 | Fully supported | |
| Fixed Asset | Asset (account_asset)1:1 | Fully supported | |
| Job | Project (project)1:1 | Fully supported | |
| Bank Account | Bank Journal + Account1: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.
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
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 source system audit
We extract a full inventory of Business Central data entities, tables, and record volumes across all companies in the tenant. We audit the Chart of Accounts structure, item category and costing method distribution, open order and invoice counts by status, item ledger entry totals by location, fixed asset register size, job count and active task volume, and the count and structure of any AL extensions. We confirm the Odoo edition (Community or Enterprise), hosting model (Odoo.sh, on-premises, or private cloud), and the Odoo apps installed. This output is a written migration scope with record counts per object, the BC-to-Odoo object mapping table, and the list of prerequisite Odoo configuration steps.
Odoo-side prerequisite configuration
Before any data import begins, the customer configures the Odoo Chart of Accounts from the country-specific template, selects the inventory valuation and costing method per product category, creates account.tax records matching the tax mapping worksheet, and sets up warehouse locations. We provide the configuration checklist and validate the Odoo-side setup against the BC data model before beginning extraction. This step prevents the common failure mode where imported records reference Odoo accounts, taxes, or locations that do not yet exist.
Data extraction, flattening, and transformation
We extract Business Central data via the REST API v2.0 with OAuth 2.0 authentication, using the data entity endpoints as the primary interface. We flatten entity records to source table fields, resolve foreign-key references (Customer No., Vendor No., Item No., Location Code, Account No.) against lookup tables, and format the output as staged CSV files organized by object. We apply the BC-to-Odoo field mapping table, transform date formats (BC uses UTC timestamps; Odoo uses a localized datetime format), and handle BC's multi-currency exchange rate table by preserving the rate against the Odoo res.currency record.
Sandbox rehearsal and reconciliation
We run a full rehearsal migration into an Odoo staging or sandbox environment using production-like data volumes. We generate a reconciliation report comparing record counts, field counts, and sampled record values against the source BC database. The customer's Odoo lead spot-checks 25-50 records across each object type and signs off the mapping before production migration begins. This rehearsal also surfaces missing Odoo configuration (chart of accounts gaps, unmapped tax rates, unhandled BC custom fields) for resolution before production.
Production migration in dependency order
We run production migration in record dependency order: account.account (COA), res.partner (customers and vendors), product.product (items by type), account.journal (bank accounts and journals), stock.location (warehouses), account.asset (fixed assets), stock.quant (open inventory balances as of cutover date), account.move (open AP/AR invoices), sale.order (open sales orders), purchase.order (open purchase orders), account.asset.depreciation (depreciation lines), project.project and project.task (Jobs). Each phase emits a row-count reconciliation report validated against the BC source before the next phase begins. We use Odoo's XML-RPC or CSV import API with batch chunking and retry logic for large object classes.
Cutover, validation, and workflow handoff
We freeze BC writes during the cutover window, run a final delta migration of any records modified during the migration run, then enable Odoo as the system of record. We deliver the approval workflow and AL extension inventory document to the customer's Odoo partner for workflow rebuild. We support a one-week hypercare window where we resolve reconciliation issues raised during the first business cycle. We do not rebuild BC workflows as Odoo Studio flows or Python modules inside the migration scope; that work is a separate engagement.
Platform deep dives
Microsoft Dynamics 365 Business Central
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 Microsoft Dynamics 365 Business Central 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
Microsoft Dynamics 365 Business Central: Maximum 5 concurrent requests per user with a request queue size of 95; HTTP 429 returned when exceeded.
Data volume sensitivity
Microsoft Dynamics 365 Business Central exposes a bulk API — large-volume migrations stream efficiently.
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 Microsoft Dynamics 365 Business Central to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your Microsoft Dynamics 365 Business Central 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 Microsoft Dynamics 365 Business Central
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.