ERP migration
Field-level mapping, validation, and rollback between Odoo ERP and Epicor Prophet 21. We move data and schema; workflows are rebuilt natively in Epicor Prophet 21.
Odoo ERP
Source
Epicor Prophet 21
Destination
Compatibility
10 of 14
objects map 1:1 between Odoo ERP and Epicor Prophet 21.
Complexity
BStandard
Timeline
6-10 weeks
Try the reverse
Overview
Moving from Odoo ERP to Epicor ERP is a cross-platform structural migration that maps one of the broadest open-source ERP object sets onto one of the deepest mid-market manufacturing ERPs. Odoo's PostgreSQL-backed ORM exposes Partners, Products, BoMs, Manufacturing Orders, Sales Orders, and Inventory via XML-RPC or JSON-RPC using External IDs as the import reference. Epicor Kinetic receives this data through its Data Management Tool (DMT) with over 60 import templates and built-in business logic validation. The migration requires a five-phase dependency sequence: master data (Partners, Products, chart of accounts) first, then inventory locations, then BoM structures, then manufacturing orders, then transactional history. Workflows, Odoo Studio customizations, and Odoo.sh CI/CD pipelines do not migrate; we deliver a written inventory of Odoo automations and custom modules for the customer's Epicor partner 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.
Source platform
Odoo ERP platform overview
Scorecard, SWOT, gotchas, and pricing for Odoo ERP.
Destination platform
Epicor Prophet 21 platform overview
Scorecard, SWOT, gotchas, and pricing for Epicor Prophet 21.
Data migration guide
The complete Epicor ERP 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
Epicor ERP migration checklist
Pre- and post-cutover tasks for moving onto Epicor Prophet 21.
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 Epicor Prophet 21, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Odoo ERP
Partner (Contacts/Companies)
Epicor Prophet 21
Customer and Supplier
1:manyOdoo Partner records split into Epicor Customer (for sales-facing contacts) and Supplier (for procurement-facing contacts) based on Odoo's partner_type field. Partner categories map to Epicor Customer or Supplier type codes. Email, phone, and address fields migrate directly; the country/state hierarchy maps to Epicor's territory and state/province fields. Multi-company Odoo partners (where one partner belongs to multiple Odoo companies) require Epicor Company records to be provisioned first so that the customer can assign Customer records to the correct legal entity.
Odoo ERP
Product (Items)
Epicor Prophet 21
Part
1:1Odoo Product records map to Epicor Part master. The Odoo product type (stockable, consumable, service) maps to the Epicor Part Type field (Stocked, Non-Stocked, Service). The Odoo default_code or barcode becomes the Epicor Part Number; list_price and standard_cost map to the Epicor standard cost and sales price fields. Product variants in Odoo (via attribute combinations) map to Epicor Part Revisions with configuration codes, though multi-variant products may require manual disambiguation in Epicor's Revisions module.
Odoo ERP
Bill of Materials (BoM)
Epicor Prophet 21
Bill of Materials
1:1Odoo BoM records with type kit, manufactured, or phantom map to Epicor BoM structures with the same bom type designation. Odoo BoM lines (product + quantity + unit of measure) map to Epicor BoM materials with the same component Part numbers and quantity-per relationships. Multi-level BoM hierarchies (nested subassemblies) resolve as Epicor multi-level BoMs with the parent-part revision number referencing each sub-assembly's revision. Phantom BoMs in Odoo flatten at the Epicor MRP level as configured.
Odoo ERP
Manufacturing Order (MO)
Epicor Prophet 21
Job
1:1Odoo Manufacturing Order records map to Epicor Job records. The Odoo MoType (manufacture, subcontract, kit) maps to Epicor Job Type. Odoo MO states (draft, confirmed, in progress, done) map to Epicor Job status fields. The linked BoM in Odoo references the corresponding Epicor Part and BoM revision, allowing Epicor Job to pull materials from the mapped BoM. Workorder sequences in Odoo map to Epicor Job Operations with sequence, work center, and cycle time information. Odoo MO dates (scheduled start, deadline) migrate as Epicor Job start and due dates.
Odoo ERP
Stock Move / Inventory Quant
Epicor Prophet 21
Part Tracker / Bin Quantity
lossyOdoo stock.quant records track on-hand quantities per location and lot/serial. We map Odoo stock locations to Epicor Warehouses and Bin locations, resolving the location hierarchy (warehouse > location > shelf) into Epicor's Site > Warehouse > Bin structure. Current on-hand quantities from Odoo stock.quant migrate to Epicor Part Tracker records per Part and Bin. Lot and serial number traceability migrates to Epicor Part Lot records if Odoo uses lot management; manual verification of lot assignments is required post-import because lot naming conventions may differ between platforms.
Odoo ERP
Sales Order
Epicor Prophet 21
Order
1:1Odoo sale.order records map to Epicor Order. Order lines (product + quantity + price) map to Epicor OrderDtl with the mapped Part numbers. The Odoo order state (draft, sale, done, cancelled) maps to Epicor OrderHed status and OrderDtl status. The linked Odoo Partner (customer) resolves to the Epicor Customer record established in the master data phase. Fiscal positions from Odoo that affect tax computation map to Epicor Tax connectivity rules, but country-specific tax group rules require explicit configuration in Epicor Tax Maintenance post-import.
Odoo ERP
Invoice (account.move)
Epicor Prophet 21
AR Invoice or AP Invoice
1:1Odoo account.move records with move_type out_invoice, out_refund, in_invoice, in_refund map to Epicor AR Invoice and AP Invoice records respectively. The invoice number, date, due date, and amount migrate to Epicor InvoiceHed and InvoiceDtl. Posted invoices in Odoo are non-editable and migrate as locked records in Epicor; any corrections require credit memos in Epicor per standard accounting practice. Open (unpaid) invoices migrate with their payment terms and outstanding amounts so that the AR/AP aging reports remain accurate.
Odoo ERP
Chart of Accounts
Epicor Prophet 21
GL Account
1:1Odoo account.account records map to Epicor GL Account with account code, name, and account type. Country-specific tax groups and fiscal position rules from Odoo require explicit configuration in Epicor's Tax Maintenance and Fiscal Year Setup rather than direct data migration, because fiscal rules are jurisdiction-specific and need destination-system validation. We provide the Odoo chart of accounts as a reference file for the Epicor partner's configuration work.
Odoo ERP
Project
Epicor Prophet 21
Project
1:1Odoo project.project records map to Epicor Project. The project stage pipeline and task hierarchy migrate as Epicor WBS (Work Breakdown Structure) elements under the Project. Project manager assignment links to the Epicor User record resolved by email match. Odoo project-level billing rates migrate as Epicor Project Billing rates if the customer uses project accounting in Epicor.
Odoo ERP
Task
Epicor Prophet 21
Project Task
1:1Odoo project.task records map to Epicor Project Tasks under the corresponding WBS element. The task stage, assignee, deadline, and parent_id (sub-task hierarchy) migrate to Epicor with task sequence preserved. Custom stage names from Odoo Studio map to Epicor Project Task Status values, which the customer's project manager configures post-import.
Odoo ERP
Employee
Epicor Prophet 21
Employee
1:1Odoo hr.employee records map to Epicor Employee. We resolve Odoo employee email to the Epicor User record for User-linked employees. Odoo employee categories, emergency contacts, and HR-specific fields that are Odoo-specific do not have direct Epicor equivalents and are preserved in a custom reference file for the HR administrator to re-enter in Epicor HR module. Employee status (active, inactive) migrates to Epicor Employee status.
Odoo ERP
Custom Fields (ir.model.fields)
Epicor Prophet 21
Custom Fields
lossyOdoo custom fields defined via ir.model.fields or Odoo Studio require a different approach in Epicor. We document each custom field (name, ttype, selection options, stored or computed) as a specification for Epicor's UD (User-Defined) field or Epicor Customization approach. Epicor does not use the same custom field extension model as Odoo Studio; fields require Epicor partner involvement to implement as UD columns or customizations rather than being migrated as self-service extensions.
Odoo ERP
Taxes
Epicor Prophet 21
Tax Code / Tax Group
lossyOdoo account.tax records with scope (sale/purchase), tax_type (percent, fixed, group), and country-specific fiscal positions map to Epicor Tax Maintenance. Tax names and rates migrate as a reference; the Epicor tax connectivity rules (linking tax codes to customers, suppliers, and products) require manual configuration by the customer's Epicor partner or finance team because fiscal rules are jurisdiction-specific and cannot be blindly transferred between platforms without compliance review.
Odoo ERP
Attachment (ir.attachment)
Epicor Prophet 21
Document Management
1:1Odoo ir.attachment records store files as binary in PostgreSQL or as external URLs. We migrate file attachments that are accessible via public URL by registering them as Epicor Document Management entries linked to the relevant Part, Job, Order, or Customer record. Large binary attachments stored directly in Odoo's database require extraction and hosting on a file server or cloud storage, with the URL registered in Epicor's Document table. We flag attachments exceeding 25 MB for manual re-upload post-migration.
| Odoo ERP | Epicor Prophet 21 | Compatibility | |
|---|---|---|---|
| Partner (Contacts/Companies) | Customer and Supplier1:many | Fully supported | |
| Product (Items) | Part1:1 | Fully supported | |
| Bill of Materials (BoM) | Bill of Materials1:1 | Fully supported | |
| Manufacturing Order (MO) | Job1:1 | Fully supported | |
| Stock Move / Inventory Quant | Part Tracker / Bin Quantitylossy | Fully supported | |
| Sales Order | Order1:1 | Fully supported | |
| Invoice (account.move) | AR Invoice or AP Invoice1:1 | Fully supported | |
| Chart of Accounts | GL Account1:1 | Mapping required | |
| Project | Project1:1 | Fully supported | |
| Task | Project Task1:1 | Fully supported | |
| Employee | Employee1:1 | Fully supported | |
| Custom Fields (ir.model.fields) | Custom Fieldslossy | Not supported | |
| Taxes | Tax Code / Tax Grouplossy | Mapping required | |
| Attachment (ir.attachment) | Document Management1: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
Epicor Prophet 21 gotchas
Third-party bolt-on integrations complicate migration scope
Dirty data without standardized processes compounds migration risk
SDK customizations and BPMs may not survive platform upgrades
Report-based export only for non-technical users
Per-user pricing model requires accurate user count before migration planning
Pair-specific challenges
Migration approach
Discovery and source audit
We audit the source Odoo instance across edition (Community or Enterprise), PostgreSQL version, active modules (CRM, Sales, Inventory, Manufacturing, Accounting, Project), custom fields via ir.model.fields, Odoo Studio modifications, and third-party module dependencies. We identify the Odoo version and flag any ORM changes that affect field names between releases. We extract record counts per object and assess data quality (duplicate Partners, inconsistent BoM structures, incomplete lot traceability). The discovery output is a written migration scope with object-level record counts, a data quality issue register, and an Epicor edition recommendation based on the customer's operational complexity.
Epicor schema provisioning and DMT template development
We provision the Epicor destination environment in a non-production Epicor tenant or sandbox. We create the Part, Customer, Supplier, BoM, Job, Order, and Project records in Epicor's native configuration tools, mapping Odoo module scope to Epicor functional areas. Parallel to this, we develop DMT CSV templates that translate Odoo's search_read field outputs to Epicor DMT column headers, including all required lookup fields (Part Number, Customer ID, Supplier ID, Job Number, etc.). Each template is validated against Epicor's business rule engine before being approved for production use. Template development typically takes two to four weeks per major module.
Master data migration in dependency order
We execute the master data migration in strict dependency sequence: (1) Chart of Accounts and fiscal configuration reference (exported for manual Epicor configuration, not API-imported), (2) Customer and Supplier records resolved from Odoo Partners, (3) Part master records resolved from Odoo Products, (4) Part Lot records for lot-controlled parts (for traceability verification), (5) BoM structures with multi-level resolution (parent parts before subassembly children), (6) Inventory locations mapped to Epicor Warehouses and Bins. Each phase emits a row-count reconciliation report and a field-level spot-check of 25-50 records against the Odoo source before the next phase begins.
Transactional data migration and MO-to-Job conversion
Open Manufacturing Orders from Odoo convert to Epicor Job records using the BoM and routing data established in the master data phase. We map Odoo MO states to Epicor Job status, preserving scheduled start dates, due dates, and workorder operation sequences. Open Sales Orders and Invoices migrate with their current status and outstanding amounts. Inventory on-hand quantities from Odoo stock.quant migrate to Epicor Part Tracker per Bin. We flag any Odoo record with a broken foreign key (e.g., an Order referencing a deleted Partner) in a reconciliation queue for the customer to resolve before re-import.
Sandbox validation and reconciliation
We run a full migration into the Epicor non-production environment using production-equivalent data volume. The customer's operations lead reconciles record counts, spot-checks BoM explosion accuracy against Odoo source records, verifies lot traceability, and validates that open MOs appear as Epicor Jobs with correct material allocations. The Epicor partner configures tax connectivity rules during this phase with the Odoo fiscal position reference document. Any mapping corrections are applied to the DMT templates before production migration begins.
Production cutover, delta sync, and Odoo Studio handoff
We freeze Odoo writes during cutover, run a final delta migration of any records modified during the migration window (with a checkpoint timestamp applied at freeze), then mark Epicor as the system of record. We deliver the Odoo Studio customization inventory document to the customer and their Epicor partner for post-migration rebuild planning. We support a two-week hypercare window for reconciliation issues. We do not rebuild Odoo automations (ir.cron jobs, server actions, automated actions) as Epicor workflows inside the migration scope; these are documented for the Epicor partner's separate automation engagement.
Platform deep dives
Odoo ERP
Source
Strengths
Weaknesses
Epicor Prophet 21
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 Epicor Prophet 21.
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 Epicor Prophet 21 migration scoping. Not seeing yours? Book a call.
Walk through your Odoo ERP to Epicor Prophet 21 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 Epicor Prophet 21
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.