ERP migration

Migrate from De Facto ERP to Odoo ERP

Field-level mapping, validation, and rollback between De Facto ERP and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.

De Facto ERP logo

De Facto ERP

Source

Odoo ERP

Destination

Odoo ERP logo

Compatibility

75%

9 of 12

objects map 1:1 between De Facto ERP and Odoo ERP.

Complexity

BStandard

Timeline

4-8 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from De Facto ERP to Odoo ERP is a structural migration constrained by De Facto's lack of a public API. All source data extraction relies on TSQL scripts and SSRS-based exports generated within the platform itself, which means each migration requires a custom extraction scope scoped during discovery rather than a standard connector. De Facto's highly tailored EDP architecture means no two deployments share the same schema, so every entity and field must be mapped from scratch. We preserve landed-cost tracking fields (freight, insurance, duty, tax) that De Facto's supply chain module uses for importers, mapping them into Odoo's landed cost mechanism on product variants. We do not migrate De Facto SSRS reports, custom workflows, or TSQL-generated output formats; these require rebuild in Odoo's report designer and automation framework as a separate admin task. Odoo's free Community edition is available for self-hosting, with the Enterprise edition starting at $24.90 per user per month for businesses requiring official support and premium modules.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

De Facto ERP logo

De Facto ERP

What's pushing teams away

  • Very few verified reviews exist publicly, making independent evaluation difficult and suggesting a small customer base or low market visibility for a product in this category.
  • Pricing is not publicly transparent — all tiers require direct contact with sales, which creates friction for prospects evaluating cost against alternatives like Odoo or NetSuite.
  • Ease of use scores are notably low (1.5/5 on Capterra) compared to competitors, indicating the steep customization capability comes at the cost of usability for some users.
  • Support ratings are also low (1.0/5 on Capterra), suggesting that post-implementation support may not match the strong implementation partnership experience.

Choosing

Odoo ERP logo

Odoo ERP

What's pulling them in

  • Modular pay-as-you-grow model with 80+ apps under one database — teams start with CRM and add Accounting, Inventory, or Manufacturing without switching platforms.
  • Free Community edition lets businesses validate Odoo fit before committing to Enterprise licensing costs that scale with user count.
  • Lowest per-user pricing among mid-market ERPs, with a published free tier for one app and Standard plans starting around $24.90 per user per month.
  • Native integration between modules — a confirmed Sales Order automatically updates inventory, invoicing, and accounting without manual re-entry.
  • Strong Odoo Gold Partner ecosystem provides local implementation support, reducing risk for companies without in-house developers.

Object mapping

How De Facto ERP objects map to Odoo ERP

Each row shows how a De Facto 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.

De Facto ERP

Customer

maps to

Odoo ERP

res.partner

1:1
Fully supported

De Facto Customer records map directly to Odoo res.partner with partner_type=contact or company. We extract customer name, addresses, phone, email, payment terms, and account balance via TSQL. De Facto's custom field extensions on the customer record (often used for industry-specific attributes) require field-by-field mapping to Odoo res.partner custom fields or to dedicated Odoo configuration tables. Parent-company hierarchies map to res.partner's child contact structure.

De Facto ERP

Vendor

maps to

Odoo ERP

res.partner

1:1
Fully supported

De Facto Vendor master records map to Odoo res.partner with partner_type=supplier. Currency assignments and tax identification numbers migrate as-is. Multi-country supplier details from De Facto's supply chain module map to Odoo's fiscal country mapping on the partner record. Vendor bank details migrate to res.partner.bank for SEPA and international payment processing.

De Facto ERP

Item / Stock Product

maps to

Odoo ERP

product.product

1:1
Fully supported

De Facto stock items map to Odoo product.product with product_type=product or service. Each item's unit of measure, barcode, weight, volume, and route assignments (buy, manufacture, make-to-order) migrate via TSQL extraction. De Facto item cost layers (standard, average, FIFO) map to Odoo's product costing method fields. Where De Facto uses item-level landed cost components (freight, insurance, duty), we map these into Odoo's landed cost mechanism on the product form and apply them during stock valuation.

De Facto ERP

Bill of Materials

maps to

Odoo ERP

mrp.bom

1:1
Fully supported

De Facto BOMs (bill of materials) with component lines, quantities, and operations map to Odoo mrp.bom. Multi-level BOM nesting is preserved as Odoo BOM lines referencing sub-assembly product.cycle_time and workcenter assignments map to mrp.workcenter. De Facto's warranty stock management for importers maps to Odoo product tracebility settings on the finished goods.

De Facto ERP

Landed Cost Components

maps to

Odoo ERP

stock.landed.cost

lossy
Fully supported

De Facto's landed cost tracking for importers (freight, insurance, duty, tax per imported shipment) requires explicit mapping to Odoo's stock.landed.cost model. Each landed cost line type from De Facto maps to an Odoo landed cost type (supplier, customs, transportation, other). We preserve the per-shipment allocation logic by creating Odoo landed cost records linked to the relevant stock moves and then triggering Odoo's landed cost valuation layer to update product costs post-import.

De Facto ERP

Open AP / AR

maps to

Odoo ERP

account.move (Invoice / Bill)

1:1
Mapping required

De Facto open invoices, credit notes, and outstanding balances migrate to Odoo account.move records with move_type=out_invoice (AR) or in_invoice (AP). Payment status, due dates, and residual amounts are preserved in Odoo's payment_state and amount_residual fields. We validate that Odoo's account.payment term lines match De Facto's payment terms before migration to avoid reconciliation gaps. Locked and reconciled items are migrated as reconciled with a journal entry date matching the original.

De Facto ERP

Chart of Accounts

maps to

Odoo ERP

account.account

1:1
Fully supported

De Facto's chart of accounts generated via TSQL scripts (CSV or XML output) maps directly to Odoo account.account with code, name, account_type, and reconcile flags preserved. De Facto multi-country account structures (common for importers using the landed cost module) map to Odoo's account group hierarchy for consolidated reporting. De Facto tax code assignments map to Odoo account.tax records with the correct tax_scope and country.

De Facto ERP

Historical Transactions

maps to

Odoo ERP

account.move, stock.move

1:1
Mapping required

De Facto purchase orders, sales orders, and warehouse movements exported via TSQL map to Odoo purchase.order, sale.order, and stock.move respectively. Large transaction volumes require chunked extraction; we chunk TSQL output into 10,000-row batches and load sequentially via Odoo's XML-RPC or csv import framework with batch-level row counts reconciled. Transaction dates and warehouse assignments are preserved for inventory valuation continuity.

De Facto ERP

Fixed Assets

maps to

Odoo ERP

account.asset

1:1
Mapping required

De Facto fixed asset registers (acquisition cost, depreciation schedule, asset location, category) map to Odoo account.asset and account.asset.profile. Depreciation board entries migrate as Odoo depreciation lines with posted journal entries. De Facto's landed cost tracking overlap with fixed assets (where imported equipment carries duty and freight into asset cost) is resolved by mapping those landed cost lines to Odoo's capitalisation journal entries on the asset.

De Facto ERP

User / Employee

maps to

Odoo ERP

res.users

1:1
Fully supported

De Facto user records and role assignments map to Odoo res.users and res.groups. De Facto's custom permission sets (often bespoke to each company's EDP configuration) cannot map 1:1 to Odoo's access rights framework; we extract all users with their role memberships during discovery and create a written permission mapping table for the customer's Odoo admin to configure post-migration. Inactive De Facto users migrate as inactive Odoo users for audit continuity.

De Facto ERP

Document / Attachment

maps to

Odoo ERP

ir.attachment

1:many
Fully supported

De Facto documents stored by default and linked to data records via OCR/barcode processing migrate as ir.attachment records in Odoo linked via res_model and res_id to the corresponding parent record (res.partner, product.product, stock.move, account.move). Document-to-record linkages from De Facto export cleanly if the linkage is stored as a foreign key in the document table; linkages maintained only in OCR metadata do not migrate and are flagged in the scoping report.

De Facto ERP

Custom Fields / Custom Objects

maps to

Odoo ERP

ir.model.field (Custom)

lossy
Fully supported

De Facto custom fields and user-defined TSQL-generated output formats require field-by-field enumeration during discovery. We extract the complete custom field list from De Facto's metadata tables via TSQL, then pre-create Odoo custom fields (ir.model.field with custom=True) before master data import. Custom field types (string, integer, decimal, date, lookup, multi-select) are mapped to the equivalent Odoo field type. Any De Facto custom entities without an Odoo standard model become Odoo ir.model and ir.model.field definitions in a dedicated custom module.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

De Facto ERP logo

De Facto ERP gotchas

High

No documented public API for programmatic extraction

High

Highly customized deployments resist template migrations

Medium

Pricing is opaque — all tiers require sales contact

Medium

Limited public review volume and low category ratings

Odoo ERP logo

Odoo ERP gotchas

High

No rollback for CSV imports

High

External ID conflicts on re-import

Medium

Many2many field encoding in CSV imports

Medium

Large export timeouts require batching

Medium

Version schema drift between Odoo releases

Pair-specific challenges

  • De Facto has no API — all extraction is bespoke TSQL

    De Facto ERP does not have a documented public API. All data export relies on TSQL scripts and SSRS-based reporting run inside the platform itself. Each migration requires a custom extraction approach scoped during discovery, with TSQL scripts written and tested against the live De Facto database before any Odoo import begins. This extends timelines compared to platforms with REST or Bulk APIs, and any De Facto schema change mid-project requires corresponding script updates. We do not have pre-built connectors for De Facto ERP; every extraction is a one-off script.

  • No standard De Facto schema — every deployment is unique

    De Facto actively tailors the system to each company's specific requirements, meaning no two deployments share the same data model. Custom fields, user-defined workflows, and TSQL-generated output formats vary per installation. We must enumerate every entity and field from scratch during the discovery phase before Odoo schema design can begin. Any failure to capture the full extent of De Facto's customizations during discovery will result in data loss or orphaned records at the Odoo destination.

  • Document-to-record OCR linkages may not export cleanly

    De Facto stores documents by default and links them to data records through inbound OCR processing with barcode and QR reading. Where the document-to-record linkage is stored as a foreign key in the document table, migration to Odoo ir.attachment with res_model/res_id is straightforward. Where the linkage exists only in OCR metadata or a barcode lookup table not exported by the TSQL scripts, document attachments may arrive in Odoo without a parent record and require manual re-linking post-migration. We flag these records in the scoping report and the customer decides whether to accept orphan attachments or invest in post-processing re-linkage.

  • SSRS reports and TSQL output formats do not migrate

    De Facto's Reporting & Analysis module is built on Microsoft SSRS report definitions. Report templates, SSRS configurations, and TSQL-generated output formats are not portable across platforms. We export the data that feeds these reports so that the Odoo report designer has source data, but every De Facto report must be rebuilt from scratch in Odoo's native report designer or through a reporting partner. This is a significant admin effort for companies with complex financial or supply chain reports.

  • Landed cost structures require explicit Odoo configuration

    De Facto's landed cost tracking for importers (freight, insurance, duty, tax per shipment) is a structured module within its supply chain. Odoo's landed cost mechanism (stock.landed.cost) exists in the Inventory and Manufacturing apps but requires explicit configuration of landed cost types, product cost mappings, and valuation journal entries. We map landed cost lines from De Facto's TSQL export to Odoo landed cost records, but the Odoo landed cost valuation layer must be enabled and configured in the destination environment before these records can be posted. This is not automatic and requires an Odoo functional consultant to set up per product category.

Migration approach

Six steps for a successful De Facto ERP to Odoo ERP data migration

  1. Discovery and extraction scoping

    We audit the De Facto environment via TSQL script review and database metadata enumeration. We identify all master data tables (customers, vendors, items, BOMs, accounts), transaction tables (open AP/AR, historical orders, stock moves), document storage locations and linkage tables, custom field definitions, user roles and permission sets, and any SSRS report definitions used for financial or supply chain reporting. This phase produces a written extraction scope that enumerates every table, column, and linkage that will be migrated and flags any De Facto-specific structures (landed cost, BOM operations, multi-country tax codes) requiring Odoo configuration before import.

  2. Data validation and deduplication

    De Facto's bespoke configurations often include duplicate vendor listings, customer records without contact details, and items with missing SKUs or outdated pricing. We run a data quality assessment against the TSQL extraction output before any Odoo import, producing a deduplication and cleansing report. Duplicate customers merge by name and address fuzzy matching; duplicate vendors merge by tax ID; items with missing SKUs receive a generated SKU flagged for admin review. Companies that complete data cleansing before migration typically reduce post-go-live support tickets by 40-60 percent.

  3. Odoo environment setup and schema design

    We install Odoo Community or Enterprise in the target environment and configure the core modules (Accounting, Inventory, Purchase, Sales, Manufacturing) to match the agreed migration scope. This includes creating the chart of accounts, setting up tax codes, defining product categories and routes, configuring landed cost types (if applicable), and building the initial user access groups. Custom fields from De Facto are pre-created as Odoo ir.model.field definitions in a dedicated custom module before any data import begins. The environment is set up in an Odoo Sandbox or staging instance for reconciliation before production cutover.

  4. Master data migration in dependency order

    We migrate master data in strict dependency order: account.account (chart of accounts), account.tax (tax codes), res.partner (vendors first, then customers), product.product (stock and service items), mrp.bom (BOMs), and stock.location (warehouses and routes). Each phase is loaded via Odoo's CSV import or XML-RPC API with batch-level row count reconciliation against the TSQL source. Landed cost types are configured before any landed cost lines are imported. Parent-record lookups (e.g., partner_id on product.supplierinfo) are resolved in-memory before each batch is submitted to avoid orphan records.

  5. Transactional data migration and open balance reconciliation

    We migrate open AP and AR invoices, credit notes, and outstanding balances as Odoo account.move records. Payment terms from De Facto map to Odoo account.payment.term lines. We reconcile open invoice totals against De Facto's trial balance before closing the migration window to confirm no double-billing risk. Historical sales orders, purchase orders, and warehouse movements load as Odoo sale.order, purchase.order, and stock.move records in date order. We run an Odoo trial balance and inventory valuation report at the end of this phase and compare line-by-line against De Facto's equivalent reports.

  6. Cutover, delta migration, and Odoo admin handoff

    We coordinate a cutover freeze window during which no new transactions are entered in De Facto. We run a final delta extraction capturing any records created or modified since the last extraction batch, then import the delta into Odoo and close the migration. Document attachments (ir.attachment) are imported last with parent record res_id/res_model resolved from the migration mapping table. We deliver a written report inventory documenting every SSRS report, De Facto custom field, and automation that requires rebuild in Odoo, with Odoo equivalents noted. We do not rebuild De Facto workflows or TSQL-generated output formats inside the migration scope; these are admin tasks documented in the handoff report.

Platform deep dives

Context on both ends of the pair

De Facto ERP logo

De Facto ERP

Source

Strengths

  • Highly customizable ERP that adapts to company-specific processes rather than forcing standard templates
  • Proprietary EDP (Enterprise Data Platform) architecture designed for flexible, scalable deployment
  • Strong long-term customer partnerships with some clients using the system for decades
  • Handles complex supply chain scenarios including landed costs, landed-cost tracking for importers, and warranty stock management
  • Active implementation support that helps customers migrate existing processes while identifying improvements

Weaknesses

  • Very few publicly verified reviews, making independent evaluation challenging
  • All pricing requires direct sales contact, creating evaluation friction
  • Low ease-of-use scores compared to category alternatives
  • Support quality ratings are inconsistent based on available reviews
  • No documented public API for programmatic data extraction or integration
Odoo ERP logo

Odoo ERP

Destination

Strengths

  • Modular architecture with 80+ apps sharing one database — add Sales, Accounting, Inventory, and Manufacturing incrementally.
  • Free Community edition for self-hosting with no per-user license cost, backed by an active open-source community.
  • Per-user pricing starting around $24.90/month on Standard, significantly lower than comparable ERPs like NetSuite or SAP.
  • Automatic workflow propagation across modules — a confirmed sales order updates inventory, triggers invoicing, and posts accounting entries without manual steps.
  • Odoo.sh provides a managed cloud hosting environment with CI/CD for custom module deployment and staging databases.

Weaknesses

  • Performance suffers under heavy customization — large implementations with many active modules require dedicated optimization.
  • No single-click migration between Odoo major versions; each release introduces ORM changes, deprecated API calls, and schema revisions requiring manual adaptation.
  • Per-user and per-module licensing costs can escalate unpredictably for growing teams adding multiple apps.
  • Steep learning curve with hundreds of configuration options across dozens of modules creates adoption friction and training requirements.
  • Support tiers on Enterprise have inconsistent response times, pushing some customers toward alternatives with more reliable SLAs.

Complexity grading

How hard is this migration?

Standard ERP migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across De Facto ERP and Odoo ERP.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    De Facto ERP: Not publicly documented.

  • Data volume sensitivity

    B

    De Facto ERP doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your De Facto ERP to Odoo ERP migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about De Facto ERP to Odoo ERP data migrations

Answers to the questions buyers ask most during De Facto ERP to Odoo ERP migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your De Facto ERP to Odoo ERP migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Migrations land between four and eight weeks for straightforward scopes under 10,000 item records, standard AP/AR open items, and no multi-level BOM complexity. Migrations with complex landed-cost structures, large transaction histories (over 100,000 rows), multi-level BOMs, or multiple De Facto custom objects extend to ten to sixteen weeks because TSQL extraction scripts must be written, tested against the live De Facto database, and validated before each Odoo import phase begins.

Adjacent paths

Related migrations to explore

Ready when you are

Move from De Facto ERP.
Land in Odoo ERP, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day