ERP migration
Field-level mapping, validation, and rollback between Breeze ERP and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
Breeze ERP
Source
Odoo ERP
Destination
Compatibility
11 of 11
objects map 1:1 between Breeze ERP and Odoo ERP.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Breeze ERP to Odoo ERP is a migration from a proprietary, API-absent Indian SMB platform into one of the world's most widely deployed open-source ERPs. Breeze ERP provides data via HTML table and CSV exports negotiated directly with the vendor, with no public API documentation, no bulk export endpoint, and no published schema reference. We reverse-engineer the working field map during discovery, extract master data (Partners, Items, Accounts) and transactional data (Purchase Orders, Manufacturing Orders, Journal Entries) through available export mechanisms, and write to Odoo via its XML-RPC External API. Odoo's modular architecture means we scope which apps are active before migration: Accounting (account.account, account.move), Inventory (stock.picking, stock.quant), Manufacturing (mrp.bom, mrp.production), and Projects (project.project) each have their own data model and migration sequence. Workflows, automations, and custom modules in Breeze do not migrate as code; we deliver a written inventory of these for the customer to rebuild in Odoo Studio or through a certified Odoo partner.
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 Breeze 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.
Breeze ERP
Customers / Companies
Odoo ERP
res.partner
1:1Breeze Company records map to Odoo res.partner with partner_type set to 'contact' and company_type set to 'company'. The Breeze company name becomes res.partner.name, and we extract the primary address, phone, and email from the HTML export into the corresponding Odoo partner fields. If Breeze stores multiple contacts per company, we flatten them as separate res.partner records with parent_id set to the company record. Dedupe key is partner name and phone. Indian address formats (door, street, city, state, PIN) are parsed and mapped to Odoo's street, street2, city, state_id, zip, and country_id fields.
Breeze ERP
Vendors
Odoo ERP
res.partner (supplier)
1:1Breeze Vendor records map to Odoo res.partner with supplier_rank = 1 and partner_type = 'contact'. Vendor name, address, and contact details follow the same field mapping as Customers. We extract payment terms from the vendor master if present and set res.partner.property_supplier_payment_term_id accordingly. If Breeze stores a vendor-specific GL account for AP, we hold that as a custom field vendor_ap_account__c for the customer's admin to map during Odoo Chart of Accounts configuration.
Breeze ERP
Items / Products
Odoo ERP
product.product + product.template
1:1Breeze Items map to Odoo product.template as the canonical record (name, type, default_code, list_price, standard_price, categ_id) and product.product as the storable variant if the item has attributes. We extract item type (inventory, non-inventory, service) from Breeze's export and set product.template.type to 'product', 'consu', or 'service' in Odoo. The Breeze SKU becomes product.template.default_code. If Breeze tracks variant attributes (size, color), we decompose them into Odoo product.attribute and product.attribute.value records and create product.product variants under the template.
Breeze ERP
Chart of Accounts
Odoo ERP
account.account
1:1Breeze account codes and names extract from the GL export and map to Odoo account.account with account_type set according to Odoo's taxonomy (asset_current, asset_non_current, liability_current, liability_non_current, equity, revenue, expense). Breeze's account_type classification in the export (Asset, Liability, Income, Expense) guides the mapping. We load account.account in account_type order so that parent_id references on account groups are satisfied at insert time. If Breeze uses Indian accounting conventions (TDS, TCS, GST), we map to Odoo's India localization account codes and flag the customer for GST configuration in Odoo Accounting.
Breeze ERP
BOM / Bill of Materials
Odoo ERP
mrp.bom
1:1Breeze BOM records map to Odoo mrp.bom with bom_line records for each component. The finished product from Breeze's BOM header becomes mrp.bom.product_id (or product_tmpl_id for product variants). We extract unit of measure from Breeze's item master and map to Odoo's uom.uom model. If Breeze BOMs have operation steps (routing), we map them to mrp.workcenter and mrp.routing.workcenter records in Odoo MRP. Multi-level BOMs (sub-assemblies) are decomposed into a flat BOM with nested sub-boms referenced via mrp.bom_line.bom_id.
Breeze ERP
Work Orders
Odoo ERP
mrp.production
1:1Breeze work orders map to Odoo mrp.production as manufacturing orders. We extract product_id, product_qty, bom_id (resolved via product match), and planned/actual start and end dates. Work center assignments from Breeze become mrp.production.workcenter_line entries linked to mrp.routing.workcenter. The work order state in Breeze (draft, confirmed, in_progress, done, cancelled) maps to Odoo's state field (draft, confirmed, progress, done, cancel). Historical closed work orders migrate with state=done.
Breeze ERP
Projects
Odoo ERP
project.project
1:1Breeze Project records map to Odoo project.project. Project name, description, start date, and deadline migrate directly. We extract assigned users from Breeze and match by email to Odoo res.users. If Breeze tracks project tasks within the project, we create project.task records as children. Billable flag and project type map to Odoo's allow_billable and project_type fields. Timesheet data linked to Breeze projects migrates to account.analytic.line with project_id set.
Breeze ERP
Purchase Orders
Odoo ERP
purchase.order + purchase.order.line
1:1Breeze Purchase Orders map to Odoo purchase.order with lines in purchase.order.line. Vendor reference maps to res.partner (supplier). PO lines reference product.product via the Item lookup, with product_qty, price_unit, and taxes mapped to Odoo's purchase.order.line model. PO state (draft, confirmed, done, cancelled) maps to Odoo's state field. If Breeze stores received quantities separately from PO quantities, we create stock.picking records to reflect actual inbound receipts.
Breeze ERP
Inventory Stock
Odoo ERP
stock.quant + stock.location
1:1Breeze inventory snapshots (on-hand quantities per item per location) map to Odoo stock.quant with inventory_date set to the snapshot date. We extract location from Breeze's warehouse structure and map to Odoo stock.location records (Internal Locations scoped to the company). If Breeze tracks lot or serial numbers, we create stock.production.lot records and link them to stock.quant via lot_id. Negative stock quants in Breeze migrate as on-hand with inventory adjustment flagged.
Breeze ERP
GL Journal Entries
Odoo ERP
account.move
1:1Breeze journal entries (debit/credit postings) map to Odoo account.move with line entries in account.move.line. Each account from Breeze's GL is matched to account.account via account code. We extract entry date, journal, period, and narration. Breeze's journal name format maps to Odoo's move_name field. If Breeze entries reference a document number (invoice number, PO number), we preserve it in account.move.ref. Entries are imported with date_order = the original posting date, and state = 'posted' if the source entry was posted, 'draft' if draft.
Breeze ERP
Users / Employees
Odoo ERP
res.users
1:1Breeze user and employee records map to Odoo res.users by email match. Active status, login, and display name migrate. Employee-specific data (department, designation, reporting manager) requires the Odoo HR app to be installed; if not present, we hold employee fields as custom fields on res.partner for future HR onboarding. Owner references on Breeze records (projects, work orders) resolve via this user mapping.
| Breeze ERP | Odoo ERP | Compatibility | |
|---|---|---|---|
| Customers / Companies | res.partner1:1 | Mapping required | |
| Vendors | res.partner (supplier)1:1 | Mapping required | |
| Items / Products | product.product + product.template1:1 | Mapping required | |
| Chart of Accounts | account.account1:1 | Mapping required | |
| BOM / Bill of Materials | mrp.bom1:1 | Fully supported | |
| Work Orders | mrp.production1:1 | Fully supported | |
| Projects | project.project1:1 | Mapping required | |
| Purchase Orders | purchase.order + purchase.order.line1:1 | Fully supported | |
| Inventory Stock | stock.quant + stock.location1:1 | Fully supported | |
| GL Journal Entries | account.move1:1 | Fully supported | |
| Users / Employees | res.users1: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.
Breeze ERP gotchas
No publicly documented API or bulk export endpoint
HTML-only export from web interface lacks field-level schema
No published technical reference for integrators or migration partners
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 export negotiation
We audit Breeze ERP across all modules (Partners, Items, Chart of Accounts, Purchase Orders, Inventory, BOMs, Work Orders, Projects, GL entries) and negotiate export access for each. We extract sample data in HTML and CSV format, infer the working schema from UI labels, and build a draft field map before any migration begins. We also identify the Odoo edition (Community or Enterprise), required apps (Accounting, Inventory, MRP, Project), and any India-specific localization requirements. The discovery output is a written scope document with a confirmed field map, record count estimate, and migration timeline.
Data cleansing and deduplication
We run a data quality audit on the extracted Breeze data: duplicate Partners (same name, phone, or email), inactive Items with no transaction history, orphaned GL accounts with zero balance, and open PO/SO lines with dates older than two years. We present the customer with a cleansing report and a recommendation for each flagged record (merge, archive, or import as-is). Data cleansing happens before Odoo configuration to ensure that the migration loads clean data into a correctly configured destination.
Odoo destination configuration
We configure the destination Odoo instance in a Sandbox environment: install the required apps (Accounting, Inventory, MRP, Project), configure Chart of Accounts based on the GL mapping table signed off by the customer, set up product categories and UoM, configure warehouse locations, and define the MRP work centers and routings. If the customer requires India-specific localization (GST, TDS), we install the India l10n_in module from Odoo Community or the Enterprise localization pack. All configuration is validated in Sandbox before production migration begins.
Sandbox migration and reconciliation
We run a full migration into the Odoo Sandbox using production data volume. The customer's finance lead reconciles record counts (Partners in, Products in, Accounts in, BOMs in, Work Orders in, Inventory quants in, GL entries in) and spot-checks 25-50 random records against the Breeze source. Any mapping corrections, field type issues, or data quality findings are documented and fixed before production migration. The customer signs off the Sandbox migration before we proceed to production.
Production migration in dependency order
We run production migration in record-dependency order: account.account (Chart of Accounts), res.partner (Customers and Vendors), product.template and product.product (Items), stock.location (Warehouse structure), mrp.bom (Bills of Materials), stock.quant (Inventory on-hand), purchase.order and purchase.order.line (Purchase Orders), account.move (GL Journal Entries), mrp.production (Work Orders), project.project and project.task (Projects), res.users (Users mapped by email). Each phase emits a row-count reconciliation report before the next phase begins. We use Odoo's XML-RPC External API for all writes with batch chunking and exponential backoff on rate-limit responses.
Cutover, validation, and automation handoff
We freeze Breeze writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo as the system of record. We deliver a written inventory of Breeze workflows, automations, and custom modules that require rebuild in Odoo Studio or by a certified Odoo partner. We support a one-week hypercare window where we resolve reconciliation issues raised by the customer's team. We do not rebuild Breeze automations as Odoo Server Actions or Studio automations inside the migration scope; that is a separate engagement.
Platform deep dives
Breeze ERP
Source
Strengths
Weaknesses
Odoo ERP
Destination
Strengths
Weaknesses
Complexity grading
Standard ERP migration. 2 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 Breeze ERP and Odoo ERP.
Object compatibility
2 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
Breeze ERP: Not publicly documented — no published API surface, so rate limits cannot be confirmed externally..
Data volume sensitivity
Breeze 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 Breeze ERP to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your Breeze 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 Breeze 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.