ERP migration
Field-level mapping, validation, and rollback between Base ERP and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
Base ERP
Source
Odoo ERP
Destination
Compatibility
8 of 10
objects map 1:1 between Base ERP and Odoo ERP.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from Base ERP to Odoo ERP is a migration from a marketplace-centric inventory tool to a full modular ERP platform. Base ERP organizes around Warehouses, Offers (Products), and Marketplace Connectors via BaseLinker, with limited native accounting or HR. Odoo provides a 40-plus application suite covering Sales, Inventory, Accounting, Manufacturing, and HR, but requires the full schema to be built before data lands. We begin with a pre-migration audit of the Inventory Control beta module and a similarity analysis across product SKUs to surface duplicates accumulated over years of multi-channel selling. We sequence the migration Products first, then Warehouses, then Stock Levels, then Orders so that foreign-key constraints resolve cleanly in Odoo. Pricing rules per channel or quantity tier from Base ERP map to Odoo Pricelists. Marketplace connector configurations export as a written reconnection map; the actual API credentials require manual re-entry in Odoo. Workflows, automations, and the BaseLinker bridge logic do not migrate as code; we deliver an inventory of every active sync rule for the customer's Odoo partner to rebuild.
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 Base 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.
Base ERP
Warehouse
Odoo ERP
stock.warehouse
1:1Base ERP Warehouses map directly to Odoo Warehouse records. Each Base ERP warehouse name becomes the Odoo warehouse name and code (short code derived from first three letters). We also map the warehouse's address fields to Odoo's partner address on the warehouse record. Multiple warehouses in Base ERP each create separate stock.warehouse records with their own location hierarchies under stock.location (view type) down to stock.location (partner locations type).
Base ERP
Product / Offer
Odoo ERP
product.template + product.product
1:1Base ERP Offers (products) map to Odoo product.template for the shared product record and product.product for individual variants. The Base ERP SKU (hs_sku equivalent or listing ID) becomes the Odoo product.default_code. We handle variant logic: if Base ERP stores variant attributes (size, color) as separate columns, we create product.attribute and product.attribute.value records in Odoo and generate variant combinations. The product description, images, and dimensions migrate as extra fields on product.template. Large catalogs over 5,000 SKUs are chunked into batches of 500 to stay within Odoo import batch limits.
Base ERP
Stock Level
Odoo ERP
stock.quant
1:1Base ERP stock quantities per warehouse per product map to Odoo stock.quant records. The quant captures product_id, location_id (the specific warehouse sub-location), quantity, and lot_id if applicable. We capture a point-in-time snapshot at migration start to avoid inconsistencies from live inventory syncs during the transfer window. lot_id and lot_number fields are populated if Base ERP tracks serial or lot numbers; otherwise, quant records use the warehouse root location with lot tracking disabled.
Base ERP
Pricing Rule
Odoo ERP
product.pricelist + product.pricelist.item
1:manyBase ERP pricing rules defined per marketplace channel, per quantity tier, or via rule sets map to Odoo product.pricelist records (one per channel or pricing strategy) with product.pricelist.item child records. Base ERP's flat key-value pricing export expands into Odoo's rule-based price computation: fixed_price, percent_price, or formula-based computation stored in the item's compute_price field. We preserve the original currency assumption (typically PLN for Allegro-heavy accounts or EUR for cross-border) and set the Odoo pricelist currency accordingly.
Base ERP
Order
Odoo ERP
sale.order + sale.order.line
1:1Base ERP Orders map to Odoo sale.order records with line items on sale.order.line. We map customer name and address to the Odoo partner record (created from the order's customer details if no matching partner exists), order status to Odoo order state (sale_order_state), and payment method to a custom field on the order. Historical orders include fulfillment tracking information mapped to Odoo's stock.picking records and delivery address fields. We export open and completed orders; completed orders preserve their original creation date via date_order.
Base ERP
Customer
Odoo ERP
res.partner
1:1Base ERP customer records (embedded in orders if not stored as standalone Company records) map to Odoo res.partner. We distinguish between customer-type partners (customer = True) and supplier-type partners (supplier = True). Base ERP's company name maps to partner name, email to partner email, phone to partner phone, and address fields to partner street, city, and country. Duplicate customers are merged by email match before import to avoid creating multiple res.partner records for the same buyer.
Base ERP
Marketplace Connector
Odoo ERP
Configuration map (external document)
1:1Base ERP marketplace connector configurations (channel type, listing IDs, sync rules for eBay, Amazon, Allegro) are not directly migratable because API credentials and tokens cannot be extracted from BaseLinker. We export the connector mapping table (channel, listing_id, offer_id, sync_direction, and any active rules) as a structured document that the customer's Odoo administrator or Odoo partner uses to reconfigure each channel connector in Odoo. No credentials are transferred; manual re-entry is required per platform's OAuth or API key flow.
Base ERP
User / Owner
Odoo ERP
res.users
1:1Base ERP user accounts (Admin, Operator, Warehouse Manager roles) map to Odoo res.users. We extract the user's name and email as the Odoo login. Role assignments from Base ERP are preserved as a custom field note (base_erp_role__c) on the res.users record if Odoo's standard groups do not map cleanly. Any Base ERP user without a corresponding Odoo user is placed in a reconciliation queue for the customer's admin to provision before record import resumes.
Base ERP
Custom Product Field
Odoo ERP
ir.model.fields (via product.template)
lossyBase ERP custom product fields (e.g., custom dimensions, certifications, seasonal flags) stored as extra CSV columns map to Odoo product.template custom fields. We create ir.model.fields entries for each custom field with the appropriate Odoo field type (char, float, integer, boolean, selection, or text). These fields appear on the product template form view after the migration. Type casting is applied during the transform step: numeric strings become float or integer fields, boolean-like values ('yes'/'no', 'true'/'false') become boolean fields.
Base ERP
Invoice
Odoo ERP
Not migrated
1:1Invoice generation is not a core Base ERP module; it is typically handled by an external accounting tool integrated via BaseLinker. We do not migrate invoice records as part of standard scope. Customers should export invoices directly from the connected accounting tool and import them into Odoo Accounting separately. The Odoo Accounting app maintains its own journal entries and move records that are not derived from Base ERP data.
| Base ERP | Odoo ERP | Compatibility | |
|---|---|---|---|
| Warehouse | stock.warehouse1:1 | Fully supported | |
| Product / Offer | product.template + product.product1:1 | Fully supported | |
| Stock Level | stock.quant1:1 | Fully supported | |
| Pricing Rule | product.pricelist + product.pricelist.item1:many | Fully supported | |
| Order | sale.order + sale.order.line1:1 | Fully supported | |
| Customer | res.partner1:1 | Fully supported | |
| Marketplace Connector | Configuration map (external document)1:1 | Fully supported | |
| User / Owner | res.users1:1 | Fully supported | |
| Custom Product Field | ir.model.fields (via product.template)lossy | Fully supported | |
| Invoice | Not migrated1: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.
Base ERP gotchas
Inventory Control module is in public beta
Duplicate SKUs accumulate in long-running accounts
Marketplace connector credentials are non-exportable
Order export excludes records from paused connectors
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 connector audit
We audit the Base ERP account across all active modules: warehouse count, product offer volume, order history date range, connector status (active, paused, suspended), and custom product field definitions. We specifically inventory the Inventory Control beta module and capture its current schema snapshot. We identify any paused connectors that require temporary re-activation for order export. The discovery output is a written migration scope document covering record counts per object, identified risks (beta module, paused connectors, duplicate SKU clusters), and a connector reconnection plan for each marketplace channel.
Duplicate SKU analysis and product cleanup
We run a similarity analysis across the Base ERP product catalog to surface duplicate and near-duplicate SKUs. The analysis flags products with matching or nearly matching names, identical SKUs under different spellings, and test listings that should be archived rather than migrated. We deliver a deduplication worksheet to the customer for review and approval before product export begins. Products approved for merge are consolidated into a single target product.template in Odoo; products approved for archive are excluded from the export. This step is critical because Odoo's product variant model amplifies duplicate SKUs into unwanted template combinations.
Odoo schema provisioning and sandbox setup
We provision the Odoo destination schema before any data transfer. This includes creating product.pricelist records per pricing strategy, stock.warehouse records per source warehouse, custom product.template fields from the Base ERP custom field inventory, and partner titles and countries as Odoo res.country records. Schema is deployed into an Odoo Sandbox or staging database for validation. The customer or an Odoo partner configures the Odoo Accounting app (chart of accounts, tax rates, journal configuration) as a parallel activity because this is account-specific and cannot be auto-migrated from Base ERP's minimal financial data.
Product and warehouse migration
We migrate in dependency order starting with Warehouses (required as location parents for stock), then Product Templates, then Product Variants, then Custom Fields. Large catalogs over 5,000 SKUs use batch CSV import via Odoo's base_import module with the import mapping configured to match Base ERP column headers to Odoo field names. We preserve the original product creation date in a custom field base_erp_create_date__c for audit. Each batch emits a row-count reconciliation report. Any product that fails validation (missing required fields, invalid reference to a non-existent attribute) is logged to a correction worksheet for customer review.
Stock level and pricing migration
We capture a point-in-time stock snapshot from Base ERP at migration start to lock consistent quantities before live sync continues on the source. Stock levels migrate as stock.quant records with product_id, location_id, and quantity fields resolved. Pricing rules from Base ERP expand into product.pricelist and product.pricelist.item records, with one pricelist per channel or pricing strategy identified during discovery. Currency is set on each pricelist from the original Base ERP pricing assumption (PLN for Allegro-heavy accounts, EUR for cross-border).
Order and customer migration
We extract customers from order records, deduplicate by email match, and import as res.partner records before orders. Each sale.order is created with its partner_id resolved to the matching res.partner, its order lines resolved to sale.order.line with product_id pointing to the migrated product.template or product.product. Completed orders preserve their original date_order and create_date for historical accuracy. Open orders are created in the draft state so the customer's sales team can confirm or modify them in Odoo before confirming.
Cutover, connector reconnection, and handoff
We freeze writes to Base ERP during the cutover window, run a final delta migration of any orders or stock changes entered since the initial snapshot, then mark Odoo as the system of record. We deliver the marketplace connector reconnection guide listing each channel, its migrated listing IDs, and the manual steps for re-entering credentials in Odoo or the Odoo channel app. We deliver the custom field map and any beta module records exported under schema snapshot. We do not rebuild BaseLinker sync rules as Odoo automation rules; that is a separate engagement scoped with an Odoo partner. We offer a one-week post-cutover hypercare window for reconciliation issues.
Platform deep dives
Base 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 Base 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
Base ERP: Not publicly documented.
Data volume sensitivity
Base 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 Base ERP to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your Base 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 Base 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.