ERP migration
Field-level mapping, validation, and rollback between Embrace ERP and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
Embrace ERP
Source
Odoo ERP
Destination
Compatibility
9 of 12
objects map 1:1 between Embrace ERP and Odoo ERP.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Embrace ERP to Odoo ERP is a database-first migration rather than an API pull, because Embrace does not expose a public REST or ODBC endpoint with documented rate limits. We work directly with the customer's Embrace database under scoped read-only credentials to produce structured extracts, then map those records to Odoo's modular schema using Odoo's XML-RPC and JSON-RPC APIs with batch chunking and parent-record resolution. The migration sequences Chart of Accounts and SARS-compliant tax codes first so that every financial transaction lands with correct account and tax references, followed by vendor and customer masters, then inventory items with bill-of-materials hierarchies, then open AP/AR aging detail for cutover reconciliation. We do not migrate iMBrace workflows or Embrace report definitions as code; we deliver written inventories of each for the customer's admin to rebuild in Odoo Studio. Document attachments migrate where the file export path is accessible, and any custom fields discovered during scoping are mapped individually to Odoo custom properties before import.
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 Embrace 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.
Embrace ERP
Chart of Accounts
Odoo ERP
Account (Accounting)
1:1Embrace account codes, descriptions, and hierarchical structure map directly to Odoo's account.account model with type, parent_id, and tags. We extract the full account tree from Embrace and create corresponding Odoo accounts before any transaction data lands. Any account codes that conflict with Odoo's reserved code ranges (view, receivable, payable, bank, cash, credit) are prefixed or remapped during the transform phase. South African statutory account types are mapped to Odoo's account.group structure for balance sheet and income statement categorization.
Embrace ERP
Tax Codes
Odoo ERP
Taxes
1:1Embrace's SARS-compliant tax codes and rate tables map to Odoo's account.tax records with the correct tax_scope set to Sale, Purchase, or None. We extract all active tax codes with current effective rates from Embrace and create Odoo taxes with the same name and percentage before any invoices are imported. Any compound tax configurations (e.g., VAT inclusive pricing splits) are noted for manual review and rebuilt as Odoo tax groups.
Embrace ERP
Customers
Odoo ERP
Contact (with Customer flag)
1:1Embrace customer master records (billing address, contact details, tax registration number, payment terms) map to Odoo res.partner with customer_rank set to positive so the record appears in the customer list. Tax registration fields from Embrace (VAT number, company registration) migrate to the partner's tax_id field. Payment terms migrate to account.payment.term and are linked via property_payment_term_id on the partner.
Embrace ERP
Vendors
Odoo ERP
Contact (with Vendor flag)
1:1Embrace vendor master records mirror customer structure with supplier-specific fields (banking details for payment configuration, supplier catalog references) and map to Odoo res.partner with supplier_rank set to positive. Banking details from Embrace are stored in a dedicated contact bank account (res.partner.bank) linked to the vendor partner. Vendor payment terms migrate to account.payment.term and are linked via property_supplier_payment_term_id.
Embrace ERP
Items (Inventory)
Odoo ERP
Product (storable)
1:1Embrace inventory items (stock codes, costing methods, warehouse locations, reorder parameters) map to Odoo product.product with type = product_type set to storable. Stock code becomes the product's default_code. Costing method (standard, average, FIFO) migrates to Odoo's costing_method field on the product category. Reorder parameters migrate to product.rule records for low-stock rules if Odoo's manufacturing or inventory module is active.
Embrace ERP
Bill of Materials
Odoo ERP
Bill of Materials
1:1Embrace BOM hierarchies and variant structures map to Odoo's mrp.bom records with type = normal or kit depending on the source structure. Component items resolve to product.product references already imported in the product phase. Routing dependencies (work center sequences, cycle times) migrate to mrp.workcenter and mrp.routing records if present in Embrace. BOM mapping requires the manufacturing module to be active in Odoo; if the customer does not activate it, BOM data is delivered as a structured inventory document for manual entry.
Embrace ERP
Open AP
Odoo ERP
Vendor Bill (open state)
1:1Embrace outstanding AP items (unpaid vendor invoices and credit notes) migrate to Odoo account.move with move_type = entry and a matching vendor bill journal entry. We extract the full aging detail (invoice date, due date, amount, partial payment history) and create Odoo bills in draft state so the customer's AP team can post them after verifying against source documents. Partial payments already processed in Embrace reduce the outstanding balance migrated.
Embrace ERP
Open AR
Odoo ERP
Customer Invoice (open state)
1:1Embrace outstanding AR items (unpaid customer invoices and credit notes) migrate to Odoo account.move with move_type = entry and a matching customer invoice journal entry. We extract aging detail with invoice date, due date, amount, and partial payment history, and create Odoo invoices in draft state for the customer's AR team to post after reconciliation. Any credit notes linked to open invoices are migrated as related entries so that the AR aging report reflects net outstanding correctly.
Embrace ERP
Custom Fields
Odoo ERP
Custom Fields (Ir.model.fields)
lossyEmbrace user-defined fields on master and transaction records vary between installations. We discover the complete custom-field schema during scoping (field name, data type, assigned object) and create matching Odoo custom fields using ir.model.fields before any data import. Any fields with unsupported data types (e.g., bespoke picklist values not documented in the base schema) are flagged for manual review before final import. Custom field values migrate as mapped property fields on the relevant Odoo model.
Embrace ERP
Documents and Attachments
Odoo ERP
Attachments (ir.attachment)
1:1Documents linked to transactions or master records in Embrace's document management layer are extracted via the accessible file export path and imported as ir.attachment records in Odoo linked to the corresponding res.partner, account.move, or stock.move via res_model and res_id. Any documents stored in non-standard paths or with proprietary formats that cannot be reached via the file export are flagged for manual migration and documented in the handoff report.
Embrace ERP
Users and Roles
Odoo ERP
Users and Access Rights
lossyEmbrace user accounts and role-based permissions are extracted and mapped to Odoo's res.users and ir.model.access records. We export role definitions as structured records and flag any permission sets that do not have a direct Odoo equivalent (e.g., module-restricted access in Embrace). Active and inactive user status is preserved. Passwords do not transfer; the customer's admin provisions new Odoo credentials post-migration.
Embrace ERP
iMBrace Workflows
Odoo ERP
Studio Automations (inventory only)
lossyWorkflows defined in iMBrace or the native Embrace workflow engine governing approval chains are exported as structured rule definitions and delivered as a written inventory for the customer's admin to rebuild in Odoo Studio or as Python server actions. We do not migrate workflows as executable code because Odoo's action-trigger model differs from Embrace's workflow engine. The inventory document lists each workflow's trigger, conditions, approvers, and recommended Odoo Studio equivalent.
| Embrace ERP | Odoo ERP | Compatibility | |
|---|---|---|---|
| Chart of Accounts | Account (Accounting)1:1 | Fully supported | |
| Tax Codes | Taxes1:1 | Mapping required | |
| Customers | Contact (with Customer flag)1:1 | Fully supported | |
| Vendors | Contact (with Vendor flag)1:1 | Fully supported | |
| Items (Inventory) | Product (storable)1:1 | Fully supported | |
| Bill of Materials | Bill of Materials1:1 | Fully supported | |
| Open AP | Vendor Bill (open state)1:1 | Fully supported | |
| Open AR | Customer Invoice (open state)1:1 | Fully supported | |
| Custom Fields | Custom Fields (Ir.model.fields)lossy | Mapping required | |
| Documents and Attachments | Attachments (ir.attachment)1:1 | Mapping required | |
| Users and Roles | Users and Access Rightslossy | Mapping required | |
| iMBrace Workflows | Studio Automations (inventory only)lossy | 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.
Embrace ERP gotchas
Limited data export tooling blocks self-service migration
Report customizations are not captured by standard exports
Custom fields create schema variation across clients
Upgrade path can invalidate bespoke modifications
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 scoping
We audit the Embrace database across modules in use (finance, inventory, manufacturing), custom field definitions, active user count, document volume, and historical depth by fiscal year. We pair this with a review of the customer's Odoo instance: edition selection (Community free vs Enterprise paid), module activation scope, and South African localization app requirements. The discovery output is a written migration scope document listing every object, estimated row count per table, and a preliminary mapping specification that the customer approves before database access is granted.
Database access and export specification
We work with the customer's Embrace DBA or IT team to establish scoped read-only database credentials. We document the exact database tables and columns required for each object, confirm export timing to avoid production impact, and run a validation extract on a test copy of the database. The export produces structured JSON or CSV files per object, with foreign key references preserved as raw IDs for later resolution. We do not write to the Embrace database at any point.
Odoo tax and account pre-configuration
Before any transactional data is imported, we create the complete Chart of Accounts and SARS-compliant tax codes in Odoo using account.account and account.tax records. This step ensures that every incoming AP/AR record resolves a valid account_id and tax_id at import time. We configure account groups for balance sheet and income statement categorization, and set up payment terms from the Embrace vendor and customer master records. This phase is validated in a test Odoo environment before production configuration begins.
Master data migration in dependency order
We migrate master data records in strict dependency order: users and access rights first (no dependencies), then Chart of Accounts and tax codes (foundation for all financial records), then contacts (customers and vendors with bank details), then products with BoM and variants, then custom field schema deployment via ir.model.fields. Each phase emits a row-count reconciliation report and a spot-check sample of 20-30 records validated against the source database before the next phase begins.
Open AP/AR cutover extraction and reconciliation
We extract open AP and AR aging detail from Embrace at the agreed cutover timestamp (typically end of business day before go-live). Outstanding invoice amounts, partial payments, credit notes, and aging buckets are mapped to Odoo account.move records in draft state. The customer's finance team reconciles the extracted open items against their own AP and AR subledger reports before we post the entries in Odoo. Any discrepancies are investigated and corrected before Odoo goes live.
Document and attachment migration
We run the document export from Embrace's accessible file paths and import attachments as ir.attachment records in Odoo, linked to the corresponding master or transaction record via res_model and res_id. Files that cannot be reached via the export path are logged individually in the handoff report. Documents are the final migration phase so that all parent records are already present in Odoo.
Go-live handoff and workflow inventory delivery
We freeze Embrace writes during cutover, run a final delta migration of any records modified during the migration window, then mark Odoo as the system of record. We deliver the iMBrace workflow inventory as a structured document listing each workflow's trigger, conditions, approvers, and recommended Odoo Studio equivalent for the customer's admin to rebuild. We deliver the custom report definition document for Odoo Studio reimplementation. We support a one-week post-go-live window for reconciliation issues raised by the customer's team.
Platform deep dives
Embrace 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 Embrace 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
Embrace ERP: Not publicly documented.
Data volume sensitivity
Embrace 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 Embrace ERP to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your Embrace 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 Embrace 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.