ERP migration
Field-level mapping, validation, and rollback between Circle Commerce and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
Circle Commerce
Source
Odoo ERP
Destination
Compatibility
8 of 11
objects map 1:1 between Circle Commerce and Odoo ERP.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Circle Commerce to Odoo ERP is a structural migration that begins with CircleHub's infinitely adaptable schema. CircleHub has no fixed field set — every entity is defined by the customer's own configuration — so we build a migration-specific field map during scoping by introspecting the customer's actual schema before writing any import logic. Odoo uses a structured data model with explicit res.partner, sale.order, stock.picking, and product.product objects, which requires a systematic transformation for every custom attribute Circle has defined. We extract Orders with full line-item detail, Customers with all contact and address fields, Products with variant and inventory levels, and Shipments with tracking history. Free-text vendor names in Circle Purchase Orders are flagged for manual review because Odoo requires Partner records for procurement. Custom reports and KPI definitions have no export path from CircleHub and must be rebuilt in Odoo Reporting. We do not migrate workflows, automations, or custom module logic; we deliver a written inventory of these for the customer's admin to rebuild in Odoo Studio or with an 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 Circle Commerce 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.
Circle Commerce
Order
Odoo ERP
sale.order
1:1CircleHub Orders map to Odoo sale.order records with full header detail, line items (sale.order.line), fulfillment status, and payment references. The Circle order number becomes the Odoo name field, and the customer's CircleHub custom order fields are mapped during the scoping field map. Status values from Circle (pending, processing, shipped, delivered, cancelled) map to Odoo sale.order state values (draft, sent, sale_order, done, cancelled). Historical timestamps on orders are preserved as order_date and commitment_date fields.
Circle Commerce
Customer
Odoo ERP
res.partner
1:1CircleHub Customer records map to Odoo res.partner. Every Circle customer with a contact role becomes a Partner record with type=contact; account-role customers become type=delivery or invoice addresses linked to the parent contact partner. Custom fields on the customer record map to typed res.partner fields (char, integer, float, date, selection) based on the Circle field data type introspected during scoping. Email maps to email, phone to phone, and address fields to the Odoo address format (street, city, state, zip, country).
Circle Commerce
Company
Odoo ERP
res.partner (company type)
1:1CircleHub Company records map to Odoo res.partner with is_company=True. If the customer uses both Company and Customer objects in CircleHub, Companies become the top-level Partner record and Customers attach as child contacts with type=contact and parent_id pointing to the Company Partner. This preserves the account hierarchy from CircleHub in the Odoo Partner tree structure.
Circle Commerce
Product
Odoo ERP
product.product and product.template
1:1CircleHub Products map to Odoo product.template for the shared product definition (name, description, type, categ_id, list_price, standard_price) and product.product for the variant-level records (combinations of attributes). Circle product variants map to Odoo product variants via the attribute values. Bundle and kit relationships from CircleHub are preserved as Odoo BoM (bill of materials) records if the destination Odoo instance includes Manufacturing, or as kits via product.type=service and extra line items for simpler setups.
Circle Commerce
Inventory
Odoo ERP
stock.quant
1:1CircleHub inventory quantities per channel (online, BOPIS, warehouse) export as separate records. We consolidate multi-channel inventory into Odoo stock.quant per location. If the destination Odoo instance needs channel-level granularity preserved, we create Odoo stock.location records for each Circle channel and populate stock.quant per location rather than collapsing to a single quantity. This preserves the omnichannel allocation model CircleHub natively provides.
Circle Commerce
Shipment
Odoo ERP
stock.picking
1:1CircleHub Shipment records map to Odoo stock.picking with carrier, tracking number, and delivery status preserved in the picking record and in stock.move lines. Partial shipments and backorder records from CircleHub migrate as separate Odoo stock.picking records with backorder_id pointing to the original picking. Tracking URLs migrate to the picking's note field or carrier_tracking_ref if the destination Odoo version supports it natively.
Circle Commerce
Purchase Order
Odoo ERP
purchase.order
1:1CircleHub Purchase Order records map to Odoo purchase.order with vendor assignment, expected date, and line items. Where vendors exist only as free-text in CircleHub, we flag them during scoping for manual review and resolve them to res.partner records before import because Odoo purchase.order requires a partner_id link to a Supplier Partner. Any unresolvable vendor names are held in a reconciliation queue for the customer's admin to create Partner records for before PO import proceeds.
Circle Commerce
Custom Fields
Odoo ERP
Custom Fields (ir.model.fields)
lossyEvery custom field defined by the customer on any CircleHub object (order, customer, product, shipment) is included in the migration field map. We pre-create the Odoo custom field definition (ir.model.fields with name ending in __c) with the correct field type (char, text, integer, float, date, datetime, selection, many2one, one2many, many2many) before data import. Relational custom fields in CircleHub (links to other entities) are mapped to Odoo many2one or many2many relationships with the lookup resolved at migration time.
Circle Commerce
Free-text Vendor Name
Odoo ERP
res.partner (supplier)
lossyCircleHub Purchase Orders frequently store vendors as free-text string fields rather than linked records, especially in custom-configured schemas. We identify all free-text vendor fields during scoping, extract the unique vendor name values, and group them for the customer's admin to create as res.partner records with supplier=True before PO import. This is a manual step flagged in the migration scope because Odoo's purchase module requires a valid partner_id on purchase.order lines.
Circle Commerce
Custom Reports and KPIs
Odoo ERP
Odoo Reporting (rebuild required)
lossyCustom reports and KPI definitions built within CircleHub on the customer's own field definitions have no documented export API and cannot be migrated as data records. We capture report metadata (report name, referenced fields, calculation logic, chart type) during discovery and include it in the Migration Inventory Document. The customer's admin rebuilds reports in Odoo Reporting using the migrated fields; Odoo partners can assist with complex reporting rebuilds if needed.
Circle Commerce
Order Timestamps
Odoo ERP
sale.order date fields
1:1All historical date fields on CircleHub Orders (order date, ship date, delivery date, last modified) migrate to the corresponding Odoo sale.order date fields (date_order, commitment_date, effective_date, write_date) and are preserved as read-only in the destination to maintain audit trail integrity.
| Circle Commerce | Odoo ERP | Compatibility | |
|---|---|---|---|
| Order | sale.order1:1 | Fully supported | |
| Customer | res.partner1:1 | Fully supported | |
| Company | res.partner (company type)1:1 | Fully supported | |
| Product | product.product and product.template1:1 | Fully supported | |
| Inventory | stock.quant1:1 | Fully supported | |
| Shipment | stock.picking1:1 | Fully supported | |
| Purchase Order | purchase.order1:1 | Fully supported | |
| Custom Fields | Custom Fields (ir.model.fields)lossy | Mapping required | |
| Free-text Vendor Name | res.partner (supplier)lossy | Fully supported | |
| Custom Reports and KPIs | Odoo Reporting (rebuild required)lossy | Fully supported | |
| Order Timestamps | sale.order date fields1: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.
Circle Commerce gotchas
Rate limit of 2000 requests per 5 minutes on Circle APIs
Infinitely adaptable schema requires per-project field mapping
No native export of custom report and KPI definitions
Small company footprint limits community support and documentation
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
Schema introspection and field map construction
We connect to the customer's CircleHub instance via their export API and introspect the actual schema for every object (orders, customers, products, shipments, purchase orders). We identify every custom field defined on each object, record its data type (string, integer, float, date, selection, relational), and build the migration field map. This step produces the field map document that drives all subsequent export and import logic. We share it with the customer's Circle Commerce admin for review before any data is accessed.
Odoo module and edition selection
We determine which Odoo apps are required based on the migrating objects: sale (Orders), stock (Inventory, Shipments), purchase (Purchase Orders), and contacts (Customers, Companies, Vendors). Odoo Community edition (free, self-hosted) supports all standard objects; we recommend it for businesses comfortable with self-hosting. Odoo Online or Enterprise ($45-$175/user/mo) is recommended if the customer needs the Odoo Shifts planning app, IoT integrations, or direct Odoo support SLA. The module selection determines the destination schema structure before any import begins.
Vendor name reconciliation and Partner provisioning
We extract all free-text vendor name values from CircleHub Purchase Orders and present the unique list to the customer's admin. The admin creates corresponding res.partner records with supplier=True in the destination Odoo instance before PO import. This is a manual step because Odoo requires an explicit partner record; we cannot auto-create vendors from free-text strings. We provide a spreadsheet template with vendor name and recommended Partner fields to streamline this step.
Sandbox migration and field mapping validation
We run a full migration into an Odoo test database (or Sandbox if the customer uses Odoo Online/Enterprise) using production-like data volume. The customer's operations lead reconciles record counts (Orders in, Customers in, Products in, Inventory levels in, Shipments in), spot-checks 25-50 records per object against the CircleHub source, and reviews the field mapping coverage. Any missing custom fields, incorrect data type mappings, or status value gaps are corrected in the field map before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: res.partner records (Customers, Companies, Vendors from the reconciliation step), product.template and product.product (Products with variants), stock.location (if preserving channel-level inventory granularity), stock.quant (Inventory levels per location), sale.order and sale.order.line (Orders with line items), stock.picking (Shipment history), purchase.order and purchase.order.line (Purchase Orders with resolved vendor partner_id). Each phase emits a row-count reconciliation report before the next phase begins. The Circle API rate limit of 2000 requests per 5 minutes is enforced throughout via batch chunking.
Cutover, validation, and reporting rebuild handoff
We freeze CircleHub write access 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 the Migration Inventory Document, which includes the full field map, custom field list with Odoo field IDs, report structure documentation (for rebuilding), and the active Purchase Order vendor reconciliation list. We support a one-week hypercare window for reconciliation issues. We do not rebuild CircleHub automations or custom modules inside the migration scope; that work is handled by the customer's admin or an Odoo partner.
Platform deep dives
Circle Commerce
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 Circle Commerce 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
Circle Commerce: 2000 requests per 5 minutes per organization.
Data volume sensitivity
Circle Commerce 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 Circle Commerce to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your Circle Commerce 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 Circle Commerce
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.