ERP migration
Field-level mapping, validation, and rollback between Access ERP and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
Access ERP
Source
Odoo ERP
Destination
Compatibility
11 of 12
objects map 1:1 between Access ERP and Odoo ERP.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Access ERP to Odoo ERP is a structural migration that requires reconciling two fundamentally different ERP philosophies. Access ERP is a cloud-hosted mid-market platform from The Access Group built around a unified transactional database with quarterly automated upgrades and a highly configurable schema that routinely contains customer-specific custom fields invisible to standard exports. Odoo ERP is an open-source modular platform where the chart of accounts lives in account.account, customers and vendors are both res.partner records differentiated by customer_rank or supplier_rank, and every module extends the same relational model. We run a targeted discovery query against the live Access ERP database to enumerate every user-defined field and non-standard table before building the extraction spec, because standard database exports miss these additions entirely and risk silent data loss. We preserve the nominal ledger coding structure, resolve multi-currency account balances, map open purchase and sales invoices with their full line-item detail, and migrate document attachments as ir.attachment records linked to the corresponding Odoo model. Workflows, automations, approval chains, and custom Access-specific modules do not migrate; we deliver a written inventory of these for the customer's Odoo partner or admin to rebuild post-cutover.
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 Access 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.
Access ERP
Chart of Accounts
Odoo ERP
account.account + account.group
1:1Access ERP nominal ledgers with cost centre and department coding map to Odoo account.account with account.group defining the hierarchy. We preserve the nominal code as account.code and the description as name, and map cost centre and department dimensions to Odoo's analytic account model (account.analytic.account) which provides a secondary segmentation dimension not native to Access ERP. The customer configures the analytic plan in Odoo before migration runs.
Access ERP
Customer Master
Odoo ERP
res.partner (customer_rank)
1:1Access ERP customer records map to Odoo res.partner with customer_rank set to indicate a customer role. Address books (street, city, state, country, zip) map to partner address fields; payment terms from Access map to Odoo property_payment_term_id; credit limits map to credit_limit on the partner. Multi-currency customers receive a property_account_position_id for tax mapping. The customer/commercial partner distinction in Odoo (is_company vs individual contacts) is resolved from the Access company flag.
Access ERP
Vendor Master
Odoo ERP
res.partner (supplier_rank)
1:1Access ERP vendor records map to Odoo res.partner with supplier_rank set. Vendor payment terms, tax codes, and bank details migrate as supplier-specific fields on the partner record. Multi-currency vendor accounts receive a property_account_position_id for fiscal position mapping. The vendor's Accounts Payable nominal code from Access maps to property_account_payable_id on the Odoo partner.
Access ERP
Item / Stock Record
Odoo ERP
product.product + product.template
1:1Access ERP items map to Odoo product.product (stockable product variants) with product.template holding shared product attributes. Item code becomes default_code; item description becomes name. Warehouse-specific quantities from Access become stock.quant records per stock.location after location setup in Odoo. Reorder levels migrate to Odoo's stock.route rules and mrp_repairquotation.product_service_type constraints.
Access ERP
Bill of Materials
Odoo ERP
mrp.bom
1:1If the Access ERP database contains manufacturing data, BOM structures migrate to Odoo mrp.bom with bom_line entries referencing the migrated product.product records. Routing and work centre definitions from Access map to mrp.workcenter. We validate component availability and substitute part mappings before Odoo BOM import because mismatched component references are the most common BOM migration failure.
Access ERP
Purchase Order
Odoo ERP
purchase.order + purchase.order.line
1:1Open purchase orders migrate to Odoo purchase.order with vendor references (res.partner supplier_rank), order dates, and line items including product, quantity ordered and received, pricing, and taxes. Closed and received purchase orders migrate as historical records with state='done' for audit continuity. We preserve the purchase order number from Access as name for reconciliation against incoming goods receipts.
Access ERP
Sales Invoice / Accounts Receivable
Odoo ERP
account.move (type=out_invoice)
1:1Open AR invoices migrate to Odoo account.move with type='out_invoice', carrying customer references (res.partner), invoice dates, due dates, and amounts from Access. Line items (product, quantity, unit price, tax) migrate as account.move.line records. Historical paid invoices migrate as account.move with type='out_invoice' and state='posted' with payment registration in account.payment for full audit trail. The Access posting date becomes the Odoo invoice date.
Access ERP
AP Invoice and Payment
Odoo ERP
account.move (type=in_invoice) + account.payment
1:1Open AP invoices migrate to Odoo account.move with type='in_invoice', carrying vendor references, invoice dates, due dates, and amounts. Historical paid invoices migrate with state='posted' and linked account.payment records. Bank statement lines from Access's reconciliation data map to Odoo account.bank.statement records so the customer can continue bank reconciliation from the cutover point.
Access ERP
Bank and Cash Accounts
Odoo ERP
account.journal
1:1Access ERP bank account masters and cash book balances migrate to Odoo account.journal (type='bank' for bank accounts, type='cash' for cash). We preserve the bank account currency and set the default_account on the journal to the corresponding payable/receivable nominal code. Outstanding unreconciled transactions become Odoo account.move.line entries in the bank journal for the customer to reconcile post go-live.
Access ERP
Document Attachments
Odoo ERP
ir.attachment
1:1Access ERP stores document attachments at the transaction and master-record level. We export attachments in their native format and create ir.attachment records in Odoo linked to the corresponding model (purchase.order, account.move, res.partner, product.product) and res_id pointing to the migrated record's ID. Attachment filenames and create dates are preserved. Verification confirms all attachments link to valid records after migration completes.
Access ERP
User-Defined Tables and Custom Fields
Odoo ERP
Custom fields (x_) and custom models
lossyAccess ERP's highly configurable schema routinely contains custom fields and user-defined tables not present in standard exports. We run a discovery query against the live Access database to enumerate every user-defined field and non-standard table before building the extraction spec. Custom Access fields map to Odoo x_ prefix fields created via ir.model.fields with state='manual'. Access user-defined tables with complex relationships may require a custom Python migration script and are scoped separately during discovery.
Access ERP
User Accounts and Role Assignments
Odoo ERP
res.users
1:1Access ERP user accounts with role-based permissions and department assignments map to Odoo res.users. The Access access level and approval limits require manual configuration in Odoo's access control list (ACL) settings and multi-company rules post-migration. Inactive users from Access are created in Odoo as inactive records for historical activity attribution. We do not migrate user password hashes due to security; the customer's admin resets passwords at go-live.
| Access ERP | Odoo ERP | Compatibility | |
|---|---|---|---|
| Chart of Accounts | account.account + account.group1:1 | Fully supported | |
| Customer Master | res.partner (customer_rank)1:1 | Fully supported | |
| Vendor Master | res.partner (supplier_rank)1:1 | Fully supported | |
| Item / Stock Record | product.product + product.template1:1 | Fully supported | |
| Bill of Materials | mrp.bom1:1 | Fully supported | |
| Purchase Order | purchase.order + purchase.order.line1:1 | Fully supported | |
| Sales Invoice / Accounts Receivable | account.move (type=out_invoice)1:1 | Fully supported | |
| AP Invoice and Payment | account.move (type=in_invoice) + account.payment1:1 | Fully supported | |
| Bank and Cash Accounts | account.journal1:1 | Fully supported | |
| Document Attachments | ir.attachment1:1 | Mapping required | |
| User-Defined Tables and Custom Fields | Custom fields (x_) and custom modelslossy | Fully supported | |
| User Accounts and Role Assignments | res.users1: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.
Access ERP gotchas
No published pricing or online trial
Highly configurable schema creates hidden custom fields
Quarterly upgrade cadence can change field names mid-project
Bank reconciliation cut-off requires explicit stakeholder decision
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 Access ERP schema audit
We audit the live Access ERP database to enumerate all standard and non-standard tables, custom fields, user-defined tables, and active module usage. We extract record counts across chart of accounts, customers, vendors, items, purchase orders, AR/AP invoices, and document attachments. We document the nominal ledger hierarchy, cost centre structure, and any multi-currency account configuration. The discovery output is a written migration scope, a schema delta report listing every Access custom field with its Odoo mapping, and a recommended Odoo module stack (Accounting, Inventory, Purchase, Sales, Manufacturing as required).
Odoo environment setup and module installation
We install and configure the required Odoo apps (Accounting, Inventory, Purchase, Sales, Manufacturing) in a clean Odoo database. We configure the chart of accounts structure using the Access nominal ledger codes mapped to account.account with account.group for hierarchy. We configure warehouse locations (stock.location), the purchase and sales journals (account.journal), and any required fiscal positions for multi-currency accounts. We create the x_ custom fields identified during discovery via ir.model.fields before any data import begins.
Partner and product master migration
We migrate the Access ERP customer and vendor masters to res.partner records with appropriate customer_rank and supplier_rank assignments. The customer/commercial partner distinction is resolved from Access company flags. We then migrate product.product records with default_code, name, and stockable attributes. BOM structures migrate to mrp.bom where manufacturing data is in scope. Each phase emits a row-count reconciliation report before the next phase begins.
Transactional history migration in dependency order
We migrate open purchase orders first (purchase.order), then open and historical AR invoices (account.move type=out_invoice), then open and historical AP invoices (account.move type=in_invoice), then bank and cash account balances (account.journal) with outstanding unreconciled items. Document attachments (ir.attachment) are migrated last, linked to their parent records by resolved res_id. The bank reconciliation cut-off date agreed during planning determines which historical statements are migrated versus left in Access ERP as an archive.
Sandbox validation and reconciliation
We run the full migration into a staging Odoo environment using production-like data volume. The customer's finance and operations leads reconcile record counts, spot-check 25-50 records across each object against the Access ERP source, and verify the chart of accounts mapping. Any field mapping corrections, custom field additions, or nominal ledger adjustments are made during this phase. Sign-off on the staging reconciliation is required before production migration begins.
Production cutover and handoff
We freeze Access ERP writes during the cutover window, run a final delta migration of any records modified during the staging-to-production interval, then enable Odoo as the system of record. We deliver the workflow and automation inventory document listing every Access approval chain, custom workflow, and scheduled task requiring rebuild in Odoo Studio or via custom Python modules. We provide a one-week hypercare window for reconciliation issues raised by the customer's team. Post-migration admin configuration, Odoo Studio workflow rebuild, and user training are outside standard migration scope and are handled separately.
Platform deep dives
Access 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 Access 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
Access ERP: Not publicly documented.
Data volume sensitivity
Access 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 Access ERP to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your Access 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 Access 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.