ERP migration
Field-level mapping, validation, and rollback between iCast and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
iCast
Source
Odoo ERP
Destination
Compatibility
9 of 10
objects map 1:1 between iCast and Odoo ERP.
Complexity
CModerate
Timeline
3-5 weeks
Overview
Moving from iCast to Odoo ERP is a mid-market manufacturing and distribution migration where the source system's lack of a self-service export path is the primary constraint. iCast does not expose a public API for bulk extraction, so we coordinate directly with iCast professional services or the customer's implementation partner to obtain a database export or structured data pull before any transformation begins. On the Odoo side, we configure the Chart of Accounts structure, warehouse locations, product categories, and multi-company setup before records are imported. We map iCast customers to Odoo Contacts and the related res_partner table, vendors to the same table with vendor-specific flags, and inventory SKUs with their warehouse bin locations to Odoo product templates with stock quant records. Historical sales orders and purchase orders migrate as closed or open records depending on their status at cutover, and general journal entries load against the res_partner and account_account references resolved during the Odoo configuration phase. Custom fields, calculated fields, saved reports, and any business-rule logic embedded in iCast do not migrate automatically; we inventory each one and provide the specification for manual recreation in Odoo. We do not migrate workflows, automations, or production scheduling rules as code.
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 iCast 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.
iCast
Customer
Odoo ERP
Contact (res.partner with customer flag)
1:1iCast customer records with payment terms, credit limits, and account manager references map to Odoo res.partner records with the customer_rank field set to 1 (or 0 for the vendor flag). We preserve the iCast payment term as an account_payment_term reference, credit limit as credit_limit on res.partner, and the account manager as a user_id lookup. Any custom fields on the iCast customer record are inventoried during discovery and mapped to custom res.partner fields in Odoo before import. Multi-entity iCast customers may have company_code prefixes that require stripping or mapping to a separate company_id in Odoo's multi-company configuration.
iCast
Vendor
Odoo ERP
Contact (res.partner with vendor flag)
1:1iCast vendor records including address, payment terms, and account numbers map to Odoo res.partner with the vendor_rank field set. We preserve the vendor account number as a ref string for reconciliation with Odoo's account_move partner_bank mapping. Duplicate detection during import runs against the vendor name and tax ID fields to prevent duplicate res.partner records that would break purchase order linkage.
iCast
Inventory Item
Odoo ERP
Product Template + Product Variant + Stock Quant
1:1iCast inventory items with SKU, description, unit of measure, cost, and warehouse location codes map to Odoo product_template records with product_product variants where needed. The iCast unit of measure maps to uom_id and uom_po_id on the Odoo product. We handle multi-location inventory by mapping each iCast location code to a specific stock.warehouse and stock.location in Odoo, creating stock.quant records that reflect the current on-hand quantity per SKU per warehouse at cutover. Serialized inventory requires additional mapping from iCast's serial number fields to Odoo's stock.production lot table linked to the relevant stock.quant.
iCast
Sales Order (open and historical)
Odoo ERP
Sale Order (sale.order + sale.order.line)
1:1Open and historical iCast sales orders with line items, pricing, and order status map to Odoo sale.order and sale.order.line. We map iCast order statuses to Odoo sale.order state values (draft, sale, done, cancel), flagging held or pending orders for manual review before import to confirm whether they should be created as draft or confirmed sale orders. Customer and product references on the order lines are resolved against the already-imported res.partner and product_template records during the transform phase. Historical orders that are already fulfilled are migrated with state=done to preserve the closed-book record in Odoo.
iCast
Purchase Order (open and historical)
Odoo ERP
Purchase Order (purchase.order + purchase.order.line)
1:1iCast purchase orders containing vendor references, line items, quantities, and expected delivery dates map to Odoo purchase.order and purchase.order.line. Vendor linkage is preserved by resolving the iCast vendor account number to the res.partner record imported in the vendor phase. Expected dates migrate to the Odoo date_planned field on each purchase order line. Completed purchase orders are imported as done-state records to maintain closed-book history.
iCast
Chart of Accounts
Odoo ERP
Account Account + Account Group + Account Tax
1:1iCast maintains a hierarchical chart of accounts used for all financial posting. We map each iCast account number and type (asset, liability, equity, revenue, expense) to the corresponding Odoo account.account record with the correct user_type_id. Accounts that appear in transaction history but do not yet exist in the destination chart are flagged during discovery and pre-created before journal entry import begins. We also map any iCast tax codes to Odoo account_tax records so that sales and purchase transactions carry the correct tax rate post-migration.
iCast
Journal Entry
Odoo ERP
Account.move
1:1iCast general journal entries with date, account references, debit/credit amounts, and memo fields map to Odoo account.move records with account.move.line children. We resolve each iCast account number to the pre-created account.account record before line insertion to satisfy Odoo's foreign-key constraint on account_id. Entries with non-standard or unmapped account references are flagged and held in a reconciliation queue until the destination chart is updated. We scope the journal entry migration window with the customer upfront, balancing complete history against migration cost and destination data hygiene, and recommend a cutover date for open-period entries to be imported as current-state records.
iCast
User
Odoo ERP
res.users
1:1iCast user accounts with login credentials, roles, and access permissions map to Odoo res.users records. We extract the iCast role structure during discovery and map it to Odoo access groups and record rules. Active and inactive status is preserved so that terminated users remain in the Odoo database as inactive records for audit continuity. The customer's Odoo administrator provisions the actual login credentials post-migration as part of the Odoo configuration phase.
iCast
Custom Field (extension)
Odoo ERP
ir.model.fields (custom)
lossyiCast customers frequently add custom fields to Customers, Vendors, Products, and Orders beyond the standard field set. These have no automatic export path and must be manually inventoried during discovery. We list every custom field with its data type, purpose, and the objects it extends, then pre-create the corresponding custom field in Odoo using ir.model.fields before the main data import begins. Custom fields that contain calculated or derived logic require the customer to review whether the business rule can be expressed as an Odoo computed field, a related field, or an on-change method in the destination system.
iCast
Attachment (document reference)
Odoo ERP
ir.attachment
1:1iCast attachments associated with Customers, Vendors, Orders, or Products migrate as ir.attachment records linked via res_model and res_id to the corresponding Odoo record. We export file content and metadata from iCast, map the original record reference to the newly created Odoo ID during import, and store the binary in Odoo's filestore. Attachments without a resolvable parent record (deleted or orphaned in iCast) are listed separately for the customer to handle manually after go-live.
| iCast | Odoo ERP | Compatibility | |
|---|---|---|---|
| Customer | Contact (res.partner with customer flag)1:1 | Fully supported | |
| Vendor | Contact (res.partner with vendor flag)1:1 | Fully supported | |
| Inventory Item | Product Template + Product Variant + Stock Quant1:1 | Fully supported | |
| Sales Order (open and historical) | Sale Order (sale.order + sale.order.line)1:1 | Fully supported | |
| Purchase Order (open and historical) | Purchase Order (purchase.order + purchase.order.line)1:1 | Fully supported | |
| Chart of Accounts | Account Account + Account Group + Account Tax1:1 | Mapping required | |
| Journal Entry | Account.move1:1 | Fully supported | |
| User | res.users1:1 | Fully supported | |
| Custom Field (extension) | ir.model.fields (custom)lossy | Fully supported | |
| Attachment (document reference) | ir.attachment1: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.
iCast gotchas
No self-service data export mechanism
Custom fields and reports do not migrate automatically
Historical data volume complicates migration timelines
Limited third-party integrator ecosystem
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 extraction coordination
We audit the iCast environment across all modules in use, including custom fields, saved reports, user roles, and the full transactional history spanning Customers, Vendors, Products, Sales Orders, Purchase Orders, Chart of Accounts, and Journal Entries. We identify the extraction path (direct database access, iCast professional services export, or customer implementation partner coordination) and establish the extraction timeline as the critical path driver. The discovery output is a written migration scope that specifies the data window, the custom field inventory, the chart of accounts mapping, and the extraction method with a target delivery date for the source data.
Odoo environment configuration
We configure the destination Odoo environment before any data arrives. This includes provisioning the warehouse and location hierarchy to match the iCast multi-location structure, configuring the Chart of Accounts with all account types and tax codes mapped from iCast, setting up the multi-company structure if applicable, installing the required Odoo apps (Inventory, Sales, Purchase, Accounting) at the appropriate Odoo Online or Odoo.sh tier, and pre-creating all custom fields identified during discovery. Odoo is configured in a staging environment first for validation before production cutover.
Data extraction, cleansing, and transformation
We receive the iCast data export and run a full quality assessment covering duplicate records, orphaned foreign keys, missing required fields, and inconsistent formatting. We cleanse and deduplicate master data (Customers, Vendors, Products) before transformation, produce a cleansing report for customer sign-off, then transform each dataset to match the Odoo schema. The transformation logic handles account number mapping for journal entries, location code mapping for inventory, and vendor/customer/account reference resolution for all transactional records. The transform output is a set of CSV or XML-RPC-ready datasets organized in dependency order.
Sandbox migration and reconciliation
We execute a full migration into the Odoo staging environment using the production data volume. The customer's operations and finance leads reconcile record counts, spot-check 25-50 randomly selected records against the iCast source data, and validate that the Chart of Accounts structure, inventory quantities, and open order status are correct. Any mapping corrections, missing accounts, or data issues surfaced during staging are resolved before production migration begins. This step also serves as the dry run for the Odoo configuration, confirming that the warehouse hierarchy, tax codes, and payment term references are correctly set.
Production migration in dependency order
We execute the production migration in the sequence that satisfies Odoo's referential integrity: master data first (res.partner for customers and vendors, product_template with variants), then stock configuration (stock.warehouse, stock.location, stock.quant for inventory), then transactional records (sale.order, purchase.order, account.move). Each phase emits a row-count reconciliation report and a sample record validation before the next phase begins. We use Odoo's XML-RPC batch create with lists of records and handle the ORM rate limit by chunking large datasets. A freeze on iCast writes is maintained during the production cutover window to capture any final modifications.
Cutover, validation, and post-migration handoff
We validate the production migration against the staging reconciliation baseline, confirming that record counts match, open orders are in the correct state, inventory quantities reflect the cutover count, and journal entry debits equal credits. We deliver the custom field and automation inventory document to the customer's Odoo administrator for post-migration rebuild. We support a one-week hypercare window where we resolve any data quality issues surfaced by the customer's team in the first days of production use. We do not rebuild iCast workflows or production scheduling rules as Odoo automated actions inside the migration scope; these require a separate process redesign engagement.
Platform deep dives
iCast
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 iCast 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
iCast: Not publicly documented..
Data volume sensitivity
iCast 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 iCast to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your iCast 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 iCast
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.