ERP migration
Field-level mapping, validation, and rollback between Epicor BisTrack and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
Epicor BisTrack
Source
Odoo ERP
Destination
Compatibility
10 of 12
objects map 1:1 between Epicor BisTrack and Odoo ERP.
Complexity
BStandard
Timeline
8-12 weeks
Overview
Moving from Epicor BisTrack to Odoo ERP is a vertical-to-horizontal migration. BisTrack is purpose-built for lumber and building materials dealers with native counter sales, special order SKU generation, kit assembly, and delivery dispatch. Odoo provides a general-purpose ERP with modular apps (Sales, Purchase, Inventory, Accounting) that the customer configures for LBM workflows. We extract data from BisTrack via Smart View SQL queries and the REST API, handling the configurable DefaultSKU prefix pattern and the bin-location inventory model, then map to Odoo's product variants, warehouse locations, and multi-warehouse stock rules. Odoo's external API enforces a 1 request per second rate limit, which constrains migration throughput and requires our batch adapter with chunking and retry logic. We do not migrate BisTrack dashboards, Smart View grids, Workflow automations, or counter-sale screen layouts as code; we deliver a written data dictionary and rebuild guide for the customer's Odoo administrator.
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 Epicor BisTrack 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.
Epicor BisTrack
Customer
Odoo ERP
res.partner
1:1BisTrack Customer records map directly to Odoo res.partner with partner_type=contact. The Customer Number field becomes Odoo's internal reference (ref). Address fields (street, city, state, zip, country) map to Odoo's address fields. We extract pricing tier and credit limit from BisTrack Customer Maintenance and populate Odoo's pricelist assignment and credit_limit fields. If a default salesperson is set in BisTrack, we map it to Odoo's user_id on res.partner.
Epicor BisTrack
Vendor
Odoo ERP
res.partner
1:1BisTrack Vendor records map to Odoo res.partner with partner_type=supplier. Vendor-specific fields including PO terms, lead times, and EDI settings migrate to Odoo's purchase_order_route, property_supplier_payment_term, and custom vendor fields. EDI trading partner IDs are stored in a custom field on the partner record for integration rebuild. When a default customer is not set in BisTrack, we coordinate with the customer to assign a default buyer's contact during migration.
Epicor BisTrack
Item
Odoo ERP
product.product
1:1BisTrack Item master records map to Odoo product.product. SKU becomes product.default_code; description becomes name. Bin location migrates to Odoo's warehouse.location_id structure, which we pre-configure per the customer's warehouse hierarchy. Kit assembly rules (Bill of Materials in BisTrack) map to Odoo mrp.bom records with BOM type=kit. The Max Description Length setting in BisTrack (default 254 chars) may truncate item descriptions; we flag any items with descriptions exceeding Odoo's name field length during the pre-migration audit.
Epicor BisTrack
Sales Order
Odoo ERP
sale.order
1:1BisTrack Sales Order headers and lines map to Odoo sale.order and sale.order.line. Special order SKUs generated with the DefaultSKU prefix pattern (e.g., zz_SOWINDOWS_0001) are resolved against the product.product records we created during Item migration; we suppress auto-generation during import to prevent SKU conflicts. Line-level pricing, back-reference to the customer (res.partner), and order status (open, closed, cancelled) migrate directly. We sequence Sales Order import after res.partner and product.product to satisfy foreign-key constraints.
Epicor BisTrack
Purchase Order
Odoo ERP
purchase.order
1:1BisTrack PO records extract via Smart View SQL and map to Odoo purchase.order and purchase.order.line. Line items reference Vendor (res.partner, supplier type) and Item (product.product), so we load Vendors and Items before POs to maintain referential integrity. PO terms and expected delivery dates migrate to Odoo's date_planned and order_line fields. If the PO references a blanket order in BisTrack, we create an Odoo blanket purchase agreement as the parent document.
Epicor BisTrack
Quote
Odoo ERP
sale.order
1:1BisTrack Quotes accessible via API and the outside sales module map to Odoo sale.order records with state=draft. Quote status, expiration dates, and conversion history are preserved in custom fields (quote_validity_date, quote_status, converted_to_order_id). Quoted line items reference current item pricing from the product.pricelist. We flag any quotes with expired dates for customer review before import.
Epicor BisTrack
Inventory
Odoo ERP
stock.quant
1:manyBisTrack inventory levels, bin locations, and on-hand quantities per warehouse map to Odoo stock.quant records. Each unique bin location in BisTrack becomes a location_id within the customer's warehouse location hierarchy in Odoo. We extract via Smart View SQL and map to the stock.quant table with product_id, location_id, quantity, and reserved_quantity. Stock history (valuation layers) is available but may require additional transformation if the customer needs full valuation trail; we scope this during pre-migration audit.
Epicor BisTrack
Accounts Receivable
Odoo ERP
account.move
1:1BisTrack AR invoices and payment records migrate to Odoo account.move with move_type=out_invoice and related out_payment records. The invoice-to-payment reconciliation (reconciled boolean on account.move.line) is computed during import. Open invoices import as draft for customer review before posting; paid invoices import as posted. We extract via Smart View SQL and map to Odoo's account.move and account.move.line structure.
Epicor BisTrack
Accounts Payable
Odoo ERP
account.move
1:1BisTrack AP data including vendor invoices and payment records map to Odoo account.move with move_type=in_invoice and related in_payment records. Duplicate invoice controls native to BisTrack are flagged during import scoping to avoid re-triggering duplicate detection in Odoo (Odoo does not have an equivalent built-in; we document the check for the customer's AP team to review post-migration). Vendor invoice numbers map to Odoo's ref for cross-reference.
Epicor BisTrack
Chart of Accounts
Odoo ERP
account.account
1:1BisTrack GL accounts accessible via Smart View map to Odoo account.account records. Account numbers and hierarchies migrate directly. Segment structures (e.g., department cost centers) may require mapping to Odoo's analytic accounting model if the customer uses cost center segmentation. We note any multi-segment account structures during pre-migration audit and discuss whether analytic accounts or a separate dimension are appropriate for the customer's reporting needs.
Epicor BisTrack
Custom Fields (UD codes)
Odoo ERP
ir.model.fields (custom)
lossyBisTrack user-defined fields (UD codes) with per-field user-level security via Field Security Maintenance extract as field definitions and data. We pre-create equivalent custom fields in Odoo (ir.model.fields with groups restriction matching the source security model), then migrate the data. UD code field types (text, numeric, date, picklist) are mapped to Odoo field types (char, float, datetime, selection). Custom field metadata is documented in the handoff data dictionary.
Epicor BisTrack
Bill of Materials / Kit Assembly
Odoo ERP
mrp.bom
1:1BisTrack kit assembly rules (Bill of Materials structures) map to Odoo mrp.bom records with type=kit or normal depending on the assembly method. Component quantities and routing steps migrate to mrp.bom.line and mrp.routing.workcenter records. Kit pricing rules from BisTrack are captured as custom fields on mrp.bom for the customer's admin to implement as Odoo product variants or multi-step pricing rules post-migration.
| Epicor BisTrack | Odoo ERP | Compatibility | |
|---|---|---|---|
| Customer | res.partner1:1 | Fully supported | |
| Vendor | res.partner1:1 | Fully supported | |
| Item | product.product1:1 | Fully supported | |
| Sales Order | sale.order1:1 | Fully supported | |
| Purchase Order | purchase.order1:1 | Fully supported | |
| Quote | sale.order1:1 | Fully supported | |
| Inventory | stock.quant1:many | Mapping required | |
| Accounts Receivable | account.move1:1 | Mapping required | |
| Accounts Payable | account.move1:1 | Mapping required | |
| Chart of Accounts | account.account1:1 | Mapping required | |
| Custom Fields (UD codes) | ir.model.fields (custom)lossy | Fully supported | |
| Bill of Materials / Kit Assembly | mrp.bom1: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.
Epicor BisTrack gotchas
Web Service License Throttling Affects API Migration Speed
FTP-Based Import Requires BisTrack-Side Setup
Special Order SKU Generation is Configurable and Must Match
Dashboard and Smart View Configurations Are Not API Exportable
Epicor Cloud Migration Requires Ascend Program Enrollment
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
Pre-migration audit and scoping
We audit the source BisTrack instance across Web Service license count, Smart View SQL access, item count and SKU generation pattern, customer/vendor/order volume, BOM and kit structures, bin-location warehouse hierarchy, open AR/AP balances, and active custom field (UD code) definitions. We pair this with an Odoo edition decision: Community (self-hosted, free) covers open-source migrations; Odoo Standard ($31.10/user/month) covers standard sales, purchase, and inventory; Odoo Custom ($46.70/user/month) covers advanced manufacturing and multi-warehouse if the LBM dealer needs it. The audit output is a written migration scope, data volume estimate, and Odoo edition recommendation.
Schema design and Odoo module activation
We design the destination Odoo schema: activating the relevant apps (Sales, Purchase, Inventory, Manufacturing, Accounting), creating the warehouse location hierarchy to match BisTrack bin locations, defining product categories to match BisTrack item groups, configuring product variants for special order items, and setting up the chart of accounts to match BisTrack GL account structure. Custom fields (UD code equivalents) are pre-created with matching access groups. Schema is deployed into a test database first for validation.
Test migration and reconciliation
We run a full migration into an Odoo test instance using production-like data volume. The customer's operations lead reconciles record counts (Customers in, Vendors in, Items in, Orders in, Inventory quantities in), spot-checks 25-50 random records against the BisTrack source, and validates that bin locations, kit assemblies, and open balances match. Any mapping corrections happen in this phase, not in production. Special attention is paid to special order SKUs and kit BOM structures during reconciliation.
Master data import in dependency order
We run production migration in record-dependency order: res.partner (Customers and Vendors, in a single pass with partner_type differentiation), product.product (Items with bin locations mapped to stock.location), mrp.bom (kit assemblies from BisTrack BOM rules), stock.quant (inventory levels per location). Each phase emits a row-count reconciliation report before the next phase begins. We throttle extraction to stay within the customer's Web Service license window and throttle writes to stay within Odoo's 1 request/second rate limit using our batch adapter.
Transactional data import
We import Sales Orders, Purchase Orders, Quotes, and historical inventory transactions in dependency order after master data is validated. Open AR/AP balances are imported as draft invoices for customer review before posting. Special order Sales Orders reference the product.product records created during Item migration with the resolved SKU. We flag any records with missing parent references (orphaned lines referencing deleted customers or items) for the customer's admin to resolve before final posting.
Cutover, validation, and rebuild handoff
We freeze BisTrack writes during the cutover window, run a final delta migration of any records created or modified during migration, then enable Odoo as the system of record. We deliver the dashboard and Smart View rebuild guide with a data dictionary of all migrated tables and fields. We support a one-week hypercare window for reconciliation issues. We do not rebuild BisTrack Workflow automations, counter-sale screen layouts, or EDI integrations inside the migration scope; those are separate configuration engagements documented in our handoff report.
Platform deep dives
Epicor BisTrack
Source
Strengths
Weaknesses
Odoo ERP
Destination
Strengths
Weaknesses
Complexity grading
Standard ERP migration. 3 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 Epicor BisTrack and Odoo ERP.
Object compatibility
3 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
Epicor BisTrack: Not publicly documented; Web Service license exhaustion causes exponential backoff.
Data volume sensitivity
Epicor BisTrack 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 Epicor BisTrack to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your Epicor BisTrack 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 Epicor BisTrack
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.