ERP migration
Field-level mapping, validation, and rollback between Freespace ERP and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
Freespace ERP
Source
Odoo ERP
Destination
Compatibility
9 of 12
objects map 1:1 between Freespace ERP and Odoo ERP.
Complexity
BStandard
Timeline
5-8 weeks
Overview
Freespace ERP and Odoo ERP differ fundamentally in how they structure financial and operational data. Freespace organizes accounts around industry-specific modules for manufacturing and wholesale, while Odoo uses a generalized chart-of-accounts model that requires dimensional mapping during migration. We extract multi-level Bills of Materials, flatten or preserve sub-assemblies based on Odoo's MRP configuration, map Freespace's industry cost-center assignments to Odoo's analytic accounting dimensions, and strip non-alpha ASCII characters from vendor and customer names before import. Open AP/AR documents migrate with payment-term picklist values preserved as Odoo-compatible terms. Payroll history migrates with effective-date sequencing corrected for retroactive gaps. Workflows, automations, and production scheduling rules do not migrate; we deliver a written inventory of these for the customer's admin to rebuild in Odoo Studio or via the MRP configuration wizard. Attachment and document migration is not supported because Freespace ERP does not expose a bulk binary download endpoint through its API.
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 Freespace 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.
Freespace ERP
Chart of Accounts
Odoo ERP
Account (COA) + Analytic Account
lossyFreespace ERP organizes GL accounts around industry-specific modules (manufacturing cost centers, wholesale distribution buckets) rather than a generic chart-of-accounts structure. We enumerate every Freespace account code and its associated cost-center dimension, then map each to an Odoo Account (account.account) record with a corresponding Analytic Account (account.analytic.account) for cost-center and project tracking. Dimension names from Freespace (department, production line, shift) map to Odoo analytic tags or analytic account hierarchies. We flag any Freespace accounts that carry balances but have no clear Odoo equivalent, presenting the customer with a choice to map to a catch-all Expense or Income account or to create a new Odoo account code.
Freespace ERP
Customer and Vendor
Odoo ERP
Contact (res.partner with customer/supplier flag)
1:1Freespace Customer and Vendor records export via the platform's API with name, contact details, billing address, and payment terms. We preserve these fields 1:1 into Odoo res.partner records with the customer (customer_rank) or supplier (supplier_rank) flag set appropriately. We strip non-alpha ASCII characters from partner names before import because Odoo's res.partner model enforces stricter character validation than Freespace. Payment terms from Freespace appear as picklist values; we map these to Odoo account.payment.term records using a term-code lookup table created during scoping.
Freespace ERP
Item (Product Template)
Odoo ERP
Product Template + Product Variant
1:1Freespace Item masters include SKU, description, unit of measure, standard cost, and sales price. We map these to Odoo product.product records linked to product.template. The Freespace item type (finished good, raw material, subassembly) determines the Odoo product type: Odoo type = 'product' for inventory-tracked items, 'consu' for consumables, 'service' for services. Unit of measure and UoM category map to Odoo's uom.uom model with the relevant category.
Freespace ERP
Bill of Materials (Multi-level)
Odoo ERP
mrp.bom (BoM)
lossyFreespace multi-level BoM structures (where subassemblies reference their own child BoMs) require a scoping decision in Odoo: preserve as nested mrp.bom records with type='subassembly', or flatten to a single-level explosion with type='kit'. Odoo's MRP module handles both models but with different planning behavior. We present the customer with a written BoM handling recommendation based on their production order history and Odoo MRP configuration, then execute the chosen strategy during migration. The mrp.bom.line records carry component, quantity, and unit of measure mapped from Freespace BOM components.
Freespace ERP
Open AP (Accounts Payable)
Odoo ERP
account.move (Vendor Bill)
1:1Open vendor invoices export from Freespace with document date, due date, total amount, and payment terms. We map these to Odoo account.move records of type='in_invoice' with vendor_id set to the matched res.partner. Payment terms resolve to account.payment.term via the term-code lookup. Freespace invoice line items map to account.move.line records with account_id set from the COA mapping. Open AP credit memos map to account.move with type='in_refund'.
Freespace ERP
Open AR (Accounts Receivable)
Odoo ERP
account.move (Customer Invoice)
1:1Open customer invoices export from Freespace with document date, due date, amount, and payment terms. We map to Odoo account.move records of type='out_invoice' with partner_id set from the customer mapping. Payment terms resolve via the term-code lookup. Invoice lines map to account.move.line with revenue accounts from the COA mapping. Freespace payment records (partial or full receipts) map to account.payment records linked to the matched account.move.
Freespace ERP
Production Order
Odoo ERP
mrp.production
1:1Freespace production orders export with stage names (user-defined in Freespace), quantities, and material consumption links. The Freespace stage names are arbitrary strings; we map these to Odoo mrp.production state values (draft, confirmed, in_production, done, cancel) or to custom mrp.production.stage records if the customer uses Odoo 16+ stage tracking. The Freespace product, bom_id, and quantity transfer directly. Material consumption lines (Freespace material issues) map to mrp.workorder.record_production_lot or stock.move records in Odoo.
Freespace ERP
Work Order
Odoo ERP
mrp.workorder
1:1Freespace work orders associated with production orders map to Odoo mrp.workorder records linked to the parent mrp.production. Work center, planned duration, and operation sequence transfer from Freespace. If Freespace tracks time logging per work order, we map these to mrp.workorder time tracking records (duration, user, date). Work order routing dependencies (next operation, predecessor) map to Odoo's operation chaining via workorder dependencies or linked mrp.workorder records.
Freespace ERP
Payroll History and Compensation
Odoo ERP
hr.contract + hr.payslip (payroll module)
1:1Freespace compensation records carry effective-dated rows with pay frequency, salary or wage rates, and deduction codes. Retroactive adjustments can produce rows where the effective date is earlier than the record creation date, producing non-sequential ordering. We flag these gaps during extraction and sort compensation rows by effective date before importing, ensuring Odoo receives a chronologically consistent compensation timeline. If Odoo Payroll is not installed, we map compensation data to hr.contract wage fields and flag additional fields for manual entry or custom module build.
Freespace ERP
Employee Record
Odoo ERP
hr.employee
1:1Freespace employee profiles include name, department, job title, hire date, employment status, and any custom employee properties added during onboarding. We enumerate active custom field definitions during scoping against Freespace's field management UI, explicitly including them in the export field list. Each employee maps to hr.employee in Odoo with department_id from the analytic account mapping and job_title from the source field. Employment status (active, inactive) maps to active flag in hr.employee.
Freespace ERP
Custom Properties (on standard objects)
Odoo ERP
Custom Fields (ir.model.fields)
lossyFreespace allows administrators to add custom properties to standard objects during onboarding; these fields may not appear in the default export templates. We enumerate all active custom field definitions during scoping, explicitly including them in the export field list. Each Freespace custom property becomes an ir.model.fields record in Odoo (created via developer mode or XML-RPC) with the correct field type (char, selection, float, boolean, etc.) before migration begins. Custom fields on Freespace Items, Customers, Vendors, and Employees migrate as Odoo res.partner, product.product, or hr.employee custom fields respectively.
Freespace ERP
Historical Transactions (inventory movements)
Odoo ERP
stock.move
1:1Freespace transaction history includes production orders, material issues, and inventory movements across multiple warehouses or locations. These are often large-volume exports requiring chunking by date range. We sequence entries by posting date, split by stock.location (source and destination) mapped to Odoo stock.location records, and import as stock.move records linked to stock.picking where applicable. If Odoo's inventory history retention settings would purge these records, we advise the customer to adjust stock.scrap and inventory configuration before migration.
| Freespace ERP | Odoo ERP | Compatibility | |
|---|---|---|---|
| Chart of Accounts | Account (COA) + Analytic Accountlossy | Mapping required | |
| Customer and Vendor | Contact (res.partner with customer/supplier flag)1:1 | Fully supported | |
| Item (Product Template) | Product Template + Product Variant1:1 | Fully supported | |
| Bill of Materials (Multi-level) | mrp.bom (BoM)lossy | Fully supported | |
| Open AP (Accounts Payable) | account.move (Vendor Bill)1:1 | Fully supported | |
| Open AR (Accounts Receivable) | account.move (Customer Invoice)1:1 | Fully supported | |
| Production Order | mrp.production1:1 | Fully supported | |
| Work Order | mrp.workorder1:1 | Fully supported | |
| Payroll History and Compensation | hr.contract + hr.payslip (payroll module)1:1 | Mapping required | |
| Employee Record | hr.employee1:1 | Fully supported | |
| Custom Properties (on standard objects) | Custom Fields (ir.model.fields)lossy | Mapping required | |
| Historical Transactions (inventory movements) | stock.move1: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.
Freespace ERP gotchas
Non-alpha ASCII characters in vendor and customer names
Soft-deleted records not excluded from standard exports
Multi-level BOM structures require explicit flattening decisions
Effective-dated compensation records with retroactive gaps
Custom properties absent from default export templates
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 data audit
We audit the Freespace ERP instance across modules in use (manufacturing, inventory, financials, HR, payroll), custom field definitions on standard objects, multi-level BoM structures with component counts, open AP and AR document counts by document date, production order stage name inventory, and payroll record volume by employee. We enumerate every Freespace account code and its associated cost-center dimension for COA mapping. The discovery output is a written migration scope document covering object-by-object record counts, any Freespace-side customizations that require pre-export preparation, and a recommended Odoo edition and hosting choice (Odoo Online, Odoo.sh, or on-premise) based on the customer's infrastructure preferences.
Odoo schema provisioning and BOM decision
We provision the destination Odoo schema before any data import. This includes installing the required Odoo apps (Accounting, Inventory, MRP, HR, Payroll), creating the COA with all Freespace GL account codes mapped to Odoo account.account records, configuring analytic accounts and tags for cost-center mapping, setting up product categories and BoM types for each Freespace item type, configuring payment terms matching the Freespace term-code lookup table, and creating custom ir.model.fields for any Freespace custom properties identified during discovery. The BOM handling decision (nested subassembly vs. flat kit) is locked during this step and cannot be changed after migration begins.
Custom field enumeration and export template building
We build a custom Freespace export template that explicitly includes all active custom field definitions on Customers, Vendors, Items, Employees, and Production Orders. The standard Freespace export templates exclude these by default. We also apply the active-record filter to exclude soft-deleted records that remain in the Freespace database but are invisible in the UI. The custom template is validated against a small record sample before the full export runs. This step prevents the silent data loss that occurs when custom properties are omitted from exports.
Data extraction, cleansing, and transform
We extract data from Freespace in dependency order: COA accounts and analytic dimensions, then product templates and BoM structures, then res.partner records (with non-alpha ASCII character stripping applied), then inventory and stock data, then open AP/AR documents, then production orders and work orders, then employee and payroll history (with retroactive gaps sorted by effective date). Each extraction runs as a separate job with row-count validation against the discovery scope. The transform layer applies the COA mapping, BoM type decision, cost-center dimensional mapping, and partner name cleansing before staging the data for Odoo import.
Odoo import with validation checkpoints
We import data into Odoo in dependency order: account.account (COA), account.analytic.account (analytic dimensions), product.template and product.product (with BoM type set), res.partner (customer and supplier), account.payment.term (from term-code lookup), account.journal and account.move (open AP/AR with reconciled flag), mrp.bom (BoM structures with type decision applied), mrp.workcenter, mrp.routing, mrp.production and mrp.workorder, hr.employee, and hr.contract with compensation history. Each import phase emits a row-count reconciliation report validated against the source extraction count. Import runs against a staging Odoo database first; production import proceeds only after the customer's admin signs off on reconciliation.
Cutover and automation handoff
We freeze Freespace ERP to read-only status during the cutover window, run a final delta migration of any records modified during the migration window, then mark Odoo as the system of record. Production order stage mapping, BoM type strategy, and cost-center dimensional configuration are documented in the handoff package. We do not migrate Freespace production scheduling rules, workflow automations, or manufacturing routing configurations as code; these are documented with Odoo equivalent configuration guidance for the customer's admin or an Odoo partner to implement post-migration.
Platform deep dives
Freespace 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 Freespace 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
Freespace ERP: Not publicly documented.
Data volume sensitivity
Freespace 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 Freespace ERP to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your Freespace 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 Freespace 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.