ERP migration
Field-level mapping, validation, and rollback between Odoo ERP and Acumatica. We move data and schema; workflows are rebuilt natively in Acumatica.
Odoo ERP
Source
Acumatica
Destination
Compatibility
14 of 15
objects map 1:1 between Odoo ERP and Acumatica.
Complexity
BStandard
Timeline
5–10 business days
Try the reverse
Overview
Odoo ERP stores customers, vendors, and contacts in a single res.partner model, while Acumatica maintains separate Customer and Vendor entities with distinct financial and shipping configurations. This architectural split means Odoo contacts used in both sales and purchasing contexts require duplication during migration — one Customer record and one Vendor record in Acumatica per Odoo partner. We extract Odoo account moves as AR/AP invoices via the XML-RPC API, map analytic-account assignments to Acumatica dimensions, and preserve original posting dates as custom fields since Acumatica sets its own CreatedDate at import time. For inventory, Odoo product.product variants map to Acumatica InventoryItem records with stockable/non-stockable designations. Sale orders and purchase orders migrate as SalesOrder and PurchaseOrder documents with line items, delivering schedules, and owner-resolved user assignments. Custom fields created in Odoo Studio become User-Defined Fields (UDFs) in Acumatica with the Usr prefix. Workflows, automation rules, and server actions do not migrate — these must be rebuilt in Acumatica's screen-level workflows or Power BI reporting layer. Reports, dashboards, and approval sequences require manual reconstruction based on Odoo workflow exports we provide as reference documentation.
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
Acumatica platform overview
Scorecard, SWOT, gotchas, and pricing for Acumatica.
Data migration guide
The complete Acumatica 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
Acumatica migration checklist
Pre- and post-cutover tasks for moving onto Acumatica.
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 Acumatica, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Odoo ERP
res.partner (customer role)
Acumatica
Customer
1:1Odoo partners with customer=True map directly to Acumatica Customers. The primary address, email, phone, and VAT registration fields transfer as-is. Secondary addresses on the Odoo partner become Shipping Addresses on the Acumatica Customer — each linked via the Address tab with a separate address record.
Odoo ERP
res.partner (vendor role)
Acumatica
Vendor
1:1Odoo partners with supplier=True map to Acumatica Vendors. Payment terms, fiscal information, and bank account details carry over as Vendor attributes. Acumatica's VendorClass assignment (e.g., Domestic, Foreign) should be set based on country or tax configuration from the Odoo partner record.
Odoo ERP
res.partner (dual role)
Acumatica
Customer + Vendor (two records)
1:manyOdoo partners flagged as both customer and vendor require duplication into separate Customer and Vendor records in Acumatica. We preserve the original Odoo partner ID in both records as SourcePartnerID__c custom fields for traceability. Merging is not possible in Acumatica since the two entity types have separate screens, access rights, and posting behaviors.
Odoo ERP
product.product (stockable)
Acumatica
InventoryItem (stockable)
1:1Odoo stockable products map to Acumatica InventoryItem records with the Stockable item type. The product.template fields (name, default_code, list_price, standard_price) transfer as ItemID, Description, Base Price, and Cost fields. Post-migration, the Acumatica Item Types screen must be configured to enable inventory tracking for each migrated item.
Odoo ERP
product.product (consumable/service)
Acumatica
InventoryItem (non-stock)
1:1Odoo consumables and services map to Acumatica Non-Stock Items. These items lack inventory tracking in Acumatica by default; the Non-Stock flag prevents stock transactions from being posted against them. If the Odoo product has bills of materials, those do not migrate and must be reconstructed as Acumatica bills of materials if manufacturing is in scope.
Odoo ERP
product.attribute.value (variant)
Acumatica
Matrix Item / Stock Item variant
1:1Odoo product variants created via attributes (size, color, etc.) do not map to a native variant structure in Acumatica. Acumatica Matrix Items handle attribute combinations differently — each matrix generates child stocking IDs per attribute value. We create the parent Matrix Item and generate child items for each Odoo variant, linking back to the source variant via SourceVariantID__c.
Odoo ERP
sale.order
Acumatica
SalesOrder
1:1Odoo sale.order documents migrate as Acumatica SalesOrders with header fields (name, partner_id, date_order, commitment_date) and line items (product_id, product_uom_qty, price_unit, discount). Order-status workflow states (draft, sent, sale, done, cancel) map to Acumatica statuses (on-hold, pending, open, completed, cancelled) using value mapping on the status field.
Odoo ERP
account.move (out-invoice)
Acumatica
ARInvoice
1:1Posted Odoo customer invoices migrate as Acumatica ARInvoices. The invoice date becomes the document date, the Odoo journal entry number becomes the reference, and line items carry over with tax assignment. Odoo's partial payment handling (invoice with residual) requires mapping to Acumatica's Payment Plan feature if those records exist.
Odoo ERP
account.move (in-bill)
Acumatica
APInvoice
1:1Odoo vendor bills map to Acumatica APInvoices. Vendor location and payment terms from the Odoo vendor record carry forward. If the Odoo bill is linked to a purchase order via Odoo's PO-Bill flow, the Acumatica APInvoice can reference the corresponding PO Receipt if that workflow is replicated.
Odoo ERP
stock.picking (receipt)
Acumatica
Receipt
1:1Odoo incoming shipments (picking type = in) map to Acumatica Receipts against a Purchase Order. Lot numbers and serial numbers assigned at receipt in Odoo carry over as Lot/Serial Nbrs on the Acumatica receipt line. If no PO exists in Acumatica for the receipt, we create a standalone Receipt document and flag it for reconciliation.
Odoo ERP
stock.picking (delivery)
Acumatica
Shipment
1:1Odoo outgoing shipments map to Acumatica Shipments, each directly linked to its corresponding Sales Order. Shipment line quantities align with the done_quantity values from the Odoo stock.move records, preserving the exact shipped amounts. Back-order references that existed in Odoo transfer as linked shipment documents in Acumatica, maintaining the relationship chain between original transfers and subsequent partial shipments.
Odoo ERP
analytic.account
Acumatica
Subaccount (dimension value)
1:1Odoo analytic accounts (used for project accounting, cost-center tracking) map to Acumatica Subaccount dimension values. The analytic.account name becomes the Subaccount description; the code maps to the SubaccountID. Subaccounts must be created under the appropriate Subaccount segment in the Chart of Accounts screen before the migration run.
Odoo ERP
stock.productionlot
Acumatica
Lot/Serial Nbr
1:1Odoo lot numbers (stock.productionlot) carrying item ID, lot number, and expiration date migrate as Lot/Serial Nbr records in Acumatica's Lot/Serial Nbrs screen. The link between lot and item is preserved via the ItemID field on the lot record. FIFO enforcement via lot expiration requires Lot/Serial Class configuration in Acumatica.
Odoo ERP
res.users
Acumatica
Users (employee-based)
1:1Odoo users map to Acumatica users by email address matching. The Odoo partner_id on sale orders and account moves resolves to the matched Acumatica user. Unmatched owners are flagged as exceptions before migration; your Acumatica admin either creates matching users or reassigns records to a fallback owner during the migration plan review.
Odoo ERP
ir.attachment
Acumatica
Files / Notes
1:1Odoo file attachments stored in ir.attachment (binary fields linked to records) re-upload to Acumatica Files attached to the corresponding entity (Customer, Vendor, SO, Invoice). Large files follow Acumatica's file size limits per document type. Inline images in Odoo notes are downloaded and rehosted in Acumatica's note storage.
| Odoo ERP | Acumatica | Compatibility | |
|---|---|---|---|
| res.partner (customer role) | Customer1:1 | Fully supported | |
| res.partner (vendor role) | Vendor1:1 | Fully supported | |
| res.partner (dual role) | Customer + Vendor (two records)1:many | Fully supported | |
| product.product (stockable) | InventoryItem (stockable)1:1 | Fully supported | |
| product.product (consumable/service) | InventoryItem (non-stock)1:1 | Fully supported | |
| product.attribute.value (variant) | Matrix Item / Stock Item variant1:1 | Fully supported | |
| sale.order | SalesOrder1:1 | Fully supported | |
| account.move (out-invoice) | ARInvoice1:1 | Fully supported | |
| account.move (in-bill) | APInvoice1:1 | Fully supported | |
| stock.picking (receipt) | Receipt1:1 | Fully supported | |
| stock.picking (delivery) | Shipment1:1 | Fully supported | |
| analytic.account | Subaccount (dimension value)1:1 | Fully supported | |
| stock.productionlot | Lot/Serial Nbr1:1 | Fully supported | |
| res.users | Users (employee-based)1:1 | Fully supported | |
| ir.attachment | Files / Notes1: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
Acumatica gotchas
API user licenses cap concurrent sessions and request throughput
Multi-tenant filtering requires CompanyID awareness
Custom fields require separate discovery before field mapping
Notes and attachments use a separate linked table structure
Implementation timelines frequently run 3–9 months end-to-end
Pair-specific challenges
Migration approach
Inventory Acumatica chart of accounts and dimension structure
Before any data moves, we inventory the Acumatica chart of accounts, dimension definitions, and item-class configuration. For every Odoo analytic account we identify a corresponding Subaccount value; for every product category we identify an ItemClass. This inventory generates a pre-migration setup checklist your Acumatica consultant completes — creating Subaccount values, configuring Tax zones, and setting item classes ensures transactional records can post without referential integrity errors when the migration run begins.
Extract and deduplicate Odoo res.partner records by role
We export all Odoo res.partner records via XML-RPC in batches of 1,000 using the fields_get and search_read methods. Each record is evaluated for customer_rank and supplier_rank flags to determine whether it creates a Customer, a Vendor, or both in Acumatica. Partners with both flags create two Acumatica records and store the original Odoo ID in a SourcePartnerID__c custom field on each. Duplicates based on VAT number or email are flagged for manual resolution before the migration run.
Export product catalog and build matrix-item mapping plan
All Odoo product.product records are exported including product.template attributes, variant combinations, and stock-valuation settings. Products are grouped by type (stockable, consumable, service). Stockable products with variants are flagged for Acumatica Matrix Item conversion — we produce a matrix-generation plan listing the parent item and all child stocking IDs to create. Non-stock products land as standard InventoryItem records with the Non-Stock item type. The product export also includes current cost (standard_price) and price list data for Customer-Specific Price List population.
Migrate transactional documents in dependency order
Sales orders, purchase orders, invoices, and stock moves are exported from Odoo in sequence respecting foreign-key dependencies: Customers and Vendors before Orders, Orders before Invoices, and Purchase Receipts before AP Invoices. Each document type is exported with its full line-item set, analytic-account assignments, lot/serial number links, and owner (user) assignments. The owner resolves by email match against Acumatica users. Any Odoo document with a state that has no Acumatica equivalent (e.g., Odoo's 'cancel' state) is migrated with its status preserved as a custom field so the record appears in Acumatica for historical reference.
Run sample migration with field-level diff before full commit
A representative slice — typically 200–500 records spanning customers, vendors, products, sales orders, invoices, and a few stock receipts — migrates into a pre-production Acumatica instance. We generate a field-level diff comparing source values against the destination record values for every mapped field. You review the diff to confirm that lot numbers, analytic-account codes, payment terms, and pricing are correct before the full run commits. Any field mapping that returns unexpected values is adjusted in the migration configuration before the production run.
Execute full migration with delta-pickup window and rollback plan
The full migration runs against your Acumatica production environment with a delta-pickup window of 24–48 hours after the cutover window opens. Any Odoo records created or modified during the cutover are captured in the delta pass and applied to Acumatica. Every migration operation is logged to an audit trail. If reconciliation fails — for example, if a count of posted invoices does not match between Odoo and Acumatica — one-click rollback reverts the Acumatica environment to its pre-migration state and the migration reruns after the root cause is addressed.
Platform deep dives
Odoo ERP
Source
Strengths
Weaknesses
Acumatica
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 Odoo ERP and Acumatica.
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
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 Acumatica migration scoping. Not seeing yours? Book a call.
Walk through your Odoo ERP to Acumatica 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 Acumatica
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.