ERP migration
Field-level mapping, validation, and rollback between eFacto ERP and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
eFacto ERP
Source
Odoo ERP
Destination
Compatibility
11 of 12
objects map 1:1 between eFacto ERP and Odoo ERP.
Complexity
CModerate
Timeline
4-6 weeks
Overview
Moving from eFacto ERP to Odoo ERP is a cross-platform data migration that begins with vendor-coordinated SQL export because eFacto publishes no public API endpoint reference. We extract the chart of accounts, customer and vendor masters, item catalogue with BOM structures, open receivables and payables, POS session aggregates, and current inventory by warehouse. On the Odoo side we configure the fiscal position, Indian GST tax mapping, and multi-company or multi-warehouse structure before loading via Odoo's XML-RPC API. We resolve the POS-to-journal linkage by building a receipt-to-journal-entry mapping table, since eFacto stores POS receipts in a separate transaction log from the general ledger. Open orders and partial payments carry forward as adjustments rather than resets. Custom SSRS reports and their underlying stored procedures export as RDL XML for manual rebuild in Odoo Reporting. Workflows, automations, and role-based permissions do not migrate; we deliver a written inventory of these for your Odoo administrator to configure 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 eFacto 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.
eFacto ERP
Chart of Accounts
Odoo ERP
Account
1:1eFacto stores the COA as a flat SQL table with account codes, names, and inactive flags. We extract all active accounts and map them to Odoo's account.account model, preserving the source account code as Odoo's code field. Inactive eFacto accounts are exported with their disable_date so the customer can decide whether to archive or import them. Odoo's internal_type (view, other, receivable, payable, liquidity) is assigned based on the account's usage in eFacto's G/L posting history. Indian GST reporting accounts are tagged with Odoo's tax_tag_ids for GST returns.
eFacto ERP
Customers
Odoo ERP
res.partner (customer=True)
1:1eFacto customer records include billing/shipping addresses, GSTIN/VAT IDs, payment terms, and credit limits. We map each customer to Odoo res.partner with customer_rank set for deduplication by phone and email. GSTIN is stored in Odoo's vat field for Indian compliance. If eFacto stores multiple contacts per customer, the primary contact migrates as partner and additional contacts as Odoo child contacts (res.partner with type=contact). Credit limits become Odoo's credit_limit field on the partner record.
eFacto ERP
Vendors
Odoo ERP
res.partner (supplier=True)
1:1Vendor records in eFacto include PAN/TIN registration, banking details for NEFT/RTGS, and purchase terms. These map to Odoo res.partner with supplier_rank set. PAN number migrates to the partner's ref field. Banking details (account number, IFSC code, bank name) migrate to Odoo's res.partner.bank records linked to the supplier partner. Payment terms from eFacto (Net 30, Net 60, etc.) map to Odoo's account.payment.term records that the administrator links to each supplier partner post-migration.
eFacto ERP
Items
Odoo ERP
product.product + product.template
1:1eFacto items carry SKU (hs_sku equivalent), description, unit of measure, standard cost, and selling price. We map to Odoo product.product (the storable product variant) and product.template. The source SKU becomes Odoo's default_code. If eFacto stores variant attributes (size, color) as separate fields, we split these into Odoo's product.attribute and product.attribute.value schema and create Odoo variants. BOM structures for manufactured items map to Odoo mrp.bom with the appropriate bom_line and bom_type (kit vs manufacture). UOMs from eFacto map to Odoo's uom.uom by matching the UOM name and category.
eFacto ERP
Open AP (Vendor Bills)
Odoo ERP
account.move (type=in_invoice, out_invoice)
1:1Open vendor bills from eFacto migrate to Odoo account.move with type=in_invoice. Each bill's partner_id, invoice_date, invoice_line_ids (product, quantity, price_unit, tax_ids), and payment_terms are preserved. Partial payments already applied in eFacto are carried forward as Odoo account.payment records linked to the invoice via the reconcile field. The migration_as_of_date determines which bills are considered open versus closed at cutover. Bills with status=draft in eFacto import as Odoo draft invoices; posted bills import as posted moves.
eFacto ERP
Open AR (Customer Invoices)
Odoo ERP
account.move (type=out_invoice)
1:1Open customer invoices from eFacto migrate to Odoo account.move with type=out_invoice. GST amounts are mapped to the appropriate tax lines using the GST rate derived from the item's HSN code and the customer's GSTIN state. Partial receipts applied in eFacto become Odoo account.payment records. Credit notes (eFacto credit memos) import as Odoo account.move with type=out_refund. The customer reconciles the migrated open AR in Odoo against actual bank statements during the cutover period.
eFacto ERP
Sales Orders
Odoo ERP
sale.order
1:1Open sales orders in eFacto migrate to Odoo sale.order with full line-item detail. Each order's customer_id, order_date, order_line_ids (product, quantity, price_unit, discount, taxes), and incoterms are preserved. Cancelled or fully fulfilled orders are archived and not imported. If eFacto stores custom fields on the sales order header, these migrate to Odoo sale.order custom fields created via Odoo Studio before migration. Pricelist assignments from eFacto map to Odoo's product.pricelist records.
eFacto ERP
Purchase Orders
Odoo ERP
purchase.order
1:1Open purchase orders migrate to Odoo purchase.order with vendor_id, order_date, and order_line_ids preserved. eFacto PO approval status maps to Odoo's picking_policy and invoice_status fields. If eFacto tracks incoming shipments against a PO, these link to Odoo stock.picking records created from the purchase.order's procurement group. Partial receipts are carried forward as stock move quantities rather than being reset.
eFacto ERP
POS Transactions
Odoo ERP
pos.order + account.bank.statement.line
1:1eFacto POS receipts are stored in a separate transaction log from the accounting ledger, so we build a mapping table linking each eFacto receipt number to the corresponding Odoo pos.order and account.bank.statement.line created during migration. Daily POS session aggregates from eFacto map to Odoo pos.session, which creates its own journal entries for cash reconciliation. Tender types (cash, card, UPI) from eFacto map to Odoo's pos.payment.method records. Shift and cashier IDs from eFacto link to Odoo pos.session's user_id. If the destination POS configures auto-reconciliation to a cash account, Odoo handles this natively going forward.
eFacto ERP
Inventory Stock
Odoo ERP
stock.quant
1:1Current stock quantities are extracted per eFacto warehouse and per batch/lot if applicable. We map each warehouse in eFacto to an Odoo stock.location (type=internal) within the Odoo warehouse structure. Batch/lot numbers from eFacto migrate to Odoo's stock.lot model linked to the product and quant. The stock_as_of_date is set on each stock.quant to indicate the snapshot date; historical valuation entries are not migrated, as Odoo recalculates stock valuation from the general ledger and incoming moves post-migration. If eFacto stores minimum stock rules, these map to Odoo's stock.rule (procurement rules) for reconfiguration by the warehouse manager.
eFacto ERP
Employees
Odoo ERP
hr.employee
1:1eFacto employee master records include designation, department, PAN, and bank account details for payroll. These map to Odoo hr.employee with department_id linking to Odoo's hr.department tree. PAN number migrates to the employee's identification_id field. Bank details migrate to Odoo's hr.employee.bank_account model. Salary structures, payroll history, and TDS configuration do not migrate because Odoo's payroll module handles these differently; we export the pay structure summary for the customer's HR administrator to re-enter in Odoo Payroll.
eFacto ERP
Custom Reports / SSRS Exports
Odoo ERP
External report rebuild
lossyCustom SSRS reports built on eFacto's stored procedures export as RDL XML and parameter definition files. These cannot be imported into Odoo because SSRS and Odoo Reporting use different engines. We deliver the exported RDL files, a description of each report's underlying SQL logic, and a mapping of report parameters to Odoo's equivalent data fields. The customer's Odoo administrator or a reporting consultant rebuilds equivalent reports using Odoo Studio, Pentaho, or a BI tool connected to Odoo's database. This is a manual rebuild task outside the data migration scope.
| eFacto ERP | Odoo ERP | Compatibility | |
|---|---|---|---|
| Chart of Accounts | Account1:1 | Mapping required | |
| Customers | res.partner (customer=True)1:1 | Mapping required | |
| Vendors | res.partner (supplier=True)1:1 | Mapping required | |
| Items | product.product + product.template1:1 | Mapping required | |
| Open AP (Vendor Bills) | account.move (type=in_invoice, out_invoice)1:1 | Fully supported | |
| Open AR (Customer Invoices) | account.move (type=out_invoice)1:1 | Fully supported | |
| Sales Orders | sale.order1:1 | Fully supported | |
| Purchase Orders | purchase.order1:1 | Fully supported | |
| POS Transactions | pos.order + account.bank.statement.line1:1 | Mapping required | |
| Inventory Stock | stock.quant1:1 | Mapping required | |
| Employees | hr.employee1:1 | Fully supported | |
| Custom Reports / SSRS Exports | External report rebuildlossy | Mapping required |
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.
eFacto ERP gotchas
No documented public REST API for bulk data export
POS transaction IDs do not auto-link to G/L entries
Custom SSRS reports depend on hard-coded SQL stored procedures
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 export access confirmation
We audit the eFacto environment for module usage, data volume per object, and current fiscal period status. The critical discovery item is confirming whether the customer has direct SQL read access to the eFacto database or must coordinate a vendor-facilitated export. If vendor coordination is required, we scope an additional two to four weeks for export scheduling. We also map the eFacto chart of accounts structure, POS session aggregation logic, and any custom fields on master records. The discovery output is a written scope document and an export format agreement (SQL query, CSV export, or direct connection).
Data profiling and cleansing
We extract sample data from eFacto across all target objects and run a profiling report that identifies duplicate records (SKUs, customer names, vendor names), inconsistent UOMs, missing required fields (blank GSTIN on vendors, null account codes), and inactive records that should be archived rather than migrated. The cleansing report is delivered to the customer for remediation before migration begins. Any unmapped custom fields are documented with their eFacto field names and data types for Odoo Studio configuration. This step runs in parallel with Odoo environment setup.
Odoo schema configuration
We configure the Odoo environment to receive the migrated data. This includes installing the required Odoo apps (Accounting, Inventory, Purchase, Sales, POS, HR), creating the COA from the eFacto chart of accounts export with GST tax tags, setting up warehouse and location hierarchy to match eFacto's multi-location structure, configuring GST fiscal positions and tax rates, creating product categories and UOM categories, and provisioning custom fields via Odoo Studio for any unmapped eFacto attributes. The Odoo configuration is validated in a staging database before production migration begins.
Staged migration into Odoo staging database
We run a full migration into an Odoo staging database using production-like data volume. Migration proceeds in dependency order: accounts first, then partners (customers and vendors with bank details), then products with BOM structures, then open invoices and credit notes (both AP and AR), then sales and purchase orders, then POS session aggregates, then current stock quantities, then employees. Each phase emits a row-count reconciliation report. The customer's accountant and operations lead spot-check 25-50 records per object against the eFacto source and sign off the staging migration before production cutover is scheduled.
Production cutover and delta sync
We freeze writes to eFacto, extract a final delta export for any records created or modified after the staging migration cutoff, apply the delta to Odoo production, and validate the final record counts. The POS-to-journal mapping table is verified against the last eFacto POS session. We then enable Odoo as the system of record and deliver the custom report inventory document listing every SSRS report requiring rebuild, the RDL XML exports, and the parameter-to-Odoo-field mapping for each report. The customer receives a one-week hypercare window for reconciliation issues raised by the accounting and operations teams.
Workflow and automation rebuild handoff
We do not migrate eFacto workflows, automations, or role-based permission sets as code. We deliver a written inventory of every active workflow in eFacto, including its trigger conditions, actions, and assigned users. The customer's Odoo administrator uses this inventory to configure equivalent automation rules in Odoo (automatic actions, server actions, or base_calendar_reminder). Role and access rights from eFacto map to Odoo access rights groups (res.groups) manually. POS payment reconciliation rules are configured in Odoo POS settings based on the POS-to-journal linkage established during migration.
Platform deep dives
eFacto ERP
Source
Strengths
Weaknesses
Odoo ERP
Destination
Strengths
Weaknesses
Complexity grading
Moderate ERP migration. 4 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across eFacto ERP and Odoo ERP.
Object compatibility
4 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
eFacto ERP: Not publicly documented.
Data volume sensitivity
eFacto 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 eFacto ERP to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your eFacto 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 eFacto 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.