ERP migration
Field-level mapping, validation, and rollback between Agility ERP and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
Agility ERP
Source
Odoo ERP
Destination
Compatibility
10 of 12
objects map 1:1 between Agility ERP and Odoo ERP.
Complexity
BStandard
Timeline
3-6 weeks
Overview
Moving from Agility ERP to Odoo ERP is a schema translation, not a record copy. Agility ERP stores Customers and Vendors as separate entity types in a combined structure; Odoo uses the Partner model with type flags (customer, vendor) to represent both. We split these during scoping, resolve every purchase and sales order status against Agility's proprietary vocabulary, align inventory costing layers to Odoo's product cost method, and renumber any GL account codes that exceed Odoo's 64-character limit. Fixed asset records require a custom database extraction from Agility ERP support because they are not accessible via the standard export or API layer. We do not migrate workflows, approval chains, or Odoo automations; we deliver a written inventory of every Agility ERP automation for the customer's admin to rebuild in Odoo's workflow engine.
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 Agility 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.
Agility ERP
Customer
Odoo ERP
Partner (customer type)
1:1Agility ERP Customer records map to Odoo res.partner with the customer_rank set to a positive value (or customer boolean flag enabled) to classify as a customer-type partner. Address records in Agility ERP map to Odoo partner address fields (street, city, state, zip, country) using the partner_address model. Payment terms from Agility ERP map to Odoo property_payment_term_id on the partner. We validate email format and flag duplicate customer names across the import set to prevent double-creation in Odoo.
Agility ERP
Vendor
Odoo ERP
Partner (vendor type)
1:1Agility ERP Vendor records map to Odoo res.partner with the supplier_rank set to a positive value to classify as a vendor-type partner. Remit-to addresses in Agility ERP that are stored as separate address records map to additional partner contact records of type invoice or default. Tax ID fields migrate to Odoo's l10n_base_vat field or a custom field if the country's VAT handling requires it. Payment terms map to property_supplier_payment_term_id. We check for duplicate vendor names across the import set to prevent double-creation in the target ERP.
Agility ERP
Open Sales Order
Odoo ERP
Sale Order
1:1Open sales orders from Agility ERP transfer as Odoo sale.order records with sale.order.line children carrying quantity, unit price, and product references. Agility ERP uses proprietary order status labels (Open, Released, Backordered, etc.) that do not map directly to Odoo's standard sale_order states (draft, sent, sale_order, done, cancelled). We build a customer-specific status lookup table during the discovery phase before migration so every order lands with the correct Odoo state. The original Agility ERP order number migrates as the Odoo sale_order name or client_order_ref. Odoo requires the partner_id (customer) to exist before the sale order is imported, so partner migration must complete first.
Agility ERP
Open Purchase Order
Odoo ERP
Purchase Order
1:1Open purchase orders map to Odoo purchase.order using the same status-mapping logic applied for sales orders. Line-level purchase order data transfers with product reference, quantity, and price on purchase.order.line. The Agility ERP supplier reference field migrates as client_order_ref on the purchase order line. Odoo requires the partner_id (vendor) to exist before the purchase order is imported, so vendor partner migration must complete before purchase order import begins.
Agility ERP
Inventory Item
Odoo ERP
Product
1:1Agility ERP inventory items map to Odoo product.product (or product.template depending on whether variant management is required). The item type in Agility ERP determines the Odoo product type: storable items map to product.type equal to product, consumables to consumable, and services to service. Cost layer data from Agility ERP including average cost, FIFO cost, or lot cost requires explicit mapping to Odoo's standard_price field or move-based valuation depending on the costing method selected during discovery. On-hand quantities and reorder points migrate but may require re-evaluation against the destination warehouse configuration in Odoo.
Agility ERP
Chart of Accounts
Odoo ERP
Account
1:1Agility ERP account codes, descriptions, and account type classification (asset, liability, expense, revenue) map to Odoo account.account records scoped by company_id. Odoo imposes a 64-character limit on account.code. We audit every Agility ERP account code against this limit during scoping. Codes exceeding 64 characters are flagged, renumbered with a systematic prefix-and-truncation approach, and tracked in a mapping table delivered alongside the migrated chart of accounts. The mapping table allows the customer's accountant to reconcile any downstream reporting that references the original Agility ERP account code.
Agility ERP
Fixed Assets
Odoo ERP
Asset
1:1Fixed asset records including depreciation schedules are not accessible via the Agility ERP standard export or API layer. Customers with a non-zero fixed asset balance require a custom database extraction coordinated directly with Agility ERP support, which adds lead time and may require a separate professional services engagement. We flag any customer with a non-zero fixed asset balance during scoping, coordinate the custom extract before the migration window opens, and import the resulting data into Odoo's account.asset management module once the chart of accounts and journal entries are validated.
Agility ERP
Custom Fields
Odoo ERP
Custom Fields
lossyCustom fields added by the customer in Agility ERP are stored in a non-standard extension table that sits outside the main export layer. Each custom field requires field-by-field review and explicit mapping to an Odoo ir.model.fields definition (or a custom field with __custom suffix) before the parent record migration begins. We build the full custom field schema in Odoo during the configuration phase, configure field visibility and required status per Odoo's security model, and import custom field values alongside their parent records. Fields with complex data types such as multi-select or cross-record references may require a transformation script.
Agility ERP
Journal Entries
Odoo ERP
Journal Entry
1:1Historical journal entries from Agility ERP migrate to Odoo account.move records with debit and credit line data mapped to Odoo's line_ids table. The original Agility ERP journal entry number migrates as the Odoo move name or a reference field. We flag entries that contain embedded account codes from the legacy chart of accounts and remap them to the new Odoo account codes using the chart of accounts mapping table before loading. Entries with inconsistent debit-credit totals are flagged for manual review rather than imported with a balancing error.
Agility ERP
Order Number Sequences
Odoo ERP
Sequence
lossyAgility ERP sales order and purchase order numbers use internal sequences that may not align with Odoo's auto-generated sequence format. We map the original Agility ERP order numbers to Odoo's sale.order sequence (or purchase.order sequence) by setting the sequence next number to a value that continues after the highest Agility ERP order number. The original Agility ERP order reference is preserved in the client_order_ref field for audit trail continuity.
Agility ERP
Product Categories
Odoo ERP
Product Category
1:1Agility ERP product category or item group classifications map to Odoo product.category records. Category names and hierarchies from Agility ERP transfer directly, with parent_id resolved by traversing the category name hierarchy. Product category assignment in Odoo determines default accounting valuation and costing method for items assigned to that category.
Agility ERP
Unit of Measure
Odoo ERP
Unit of Measure
1:1Units of measure used in Agility ERP item and order records map to Odoo uom.uom entries. Odoo maintains separate UoM lists for sale, purchase, and inventory contexts with automatic conversion factors between related units. We audit the Agility ERP UoM set against Odoo's standard uom.uom library and create any missing units during the schema configuration phase before inventory items are imported.
| Agility ERP | Odoo ERP | Compatibility | |
|---|---|---|---|
| Customer | Partner (customer type)1:1 | Fully supported | |
| Vendor | Partner (vendor type)1:1 | Fully supported | |
| Open Sales Order | Sale Order1:1 | Fully supported | |
| Open Purchase Order | Purchase Order1:1 | Fully supported | |
| Inventory Item | Product1:1 | Fully supported | |
| Chart of Accounts | Account1:1 | Mapping required | |
| Fixed Assets | Asset1:1 | Not supported | |
| Custom Fields | Custom Fieldslossy | Fully supported | |
| Journal Entries | Journal Entry1:1 | Mapping required | |
| Order Number Sequences | Sequencelossy | Fully supported | |
| Product Categories | Product Category1:1 | Fully supported | |
| Unit of Measure | Unit of Measure1: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.
Agility ERP gotchas
Fixed asset data requires custom extraction
GL code character limits vary by destination
Open order status vocabulary differs from industry standards
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 scoping
We audit the Agility ERP environment across all supported object types: Customers, Vendors, open Sales Orders, open Purchase Orders, Inventory Items, Chart of Accounts, Journal Entries, and Fixed Asset balances. We identify the full set of custom fields, review the account code character lengths, flag the order status vocabulary in use, and estimate total record counts per object. We also identify any vendors referenced on purchase orders but missing from the vendor import set, and any customers referenced on sales orders but missing from the customer import set. The discovery output is a written scope document with a data quality pre-audit and a fixed asset extraction request submitted to Agility ERP support.
Odoo schema design and configuration
We design the Odoo destination schema based on the discovery findings. This includes creating product categories and product templates, configuring the chart of accounts with correct account types and validation rules, building the sales order and purchase order status mapping table, setting up warehouse and location configuration for inventory valuation, creating the fixed asset category structure, and deploying custom fields via Odoo's field management interface. We deploy the initial schema into a staging environment for validation before any data migration begins.
Fixed asset custom extraction
We coordinate with Agility ERP support to request a custom database extract of fixed asset records including asset name, acquisition date, original cost, accumulated depreciation, depreciation method, and the associated GL account codes. This extract must be received before the migration window opens because asset records must land in Odoo before any related journal entries that reference them are imported. We validate the extract structure against the Odoo account.asset schema and flag any mismatches before loading.
Sandbox migration and reconciliation
We run a full migration into a staging environment using production-like data volumes. The customer's finance lead reconciles record counts across all object types against the Agility ERP source reports, spot-checks 20-40 records per object for field-level accuracy, and validates that the order status mapping produced the expected Odoo states. Any mapping corrections are documented and applied before the production migration begins. This step is the last opportunity to correct errors without impacting the live Agility ERP instance.
Production migration in dependency order
We run production migration in record-dependency order: Partners (vendors and customers), open Purchase Orders (with resolved partner_id), open Sales Orders (with resolved partner_id), Products and Product Categories, Chart of Accounts with GL code validation, Unit of Measure mappings, Journal Entries with account remapping, Fixed Assets (from the custom extract), and Custom Field values (deployed alongside their parent records). Each phase produces a row-count reconciliation report before the next phase begins. We use Odoo's XML-RPC or JSON-RPC API with batch chunking and rate-limit handling to manage API call volume.
Cutover, validation, and automation handoff
We freeze write access to Agility ERP at the agreed cutover time, run a final delta migration of any records modified during the migration window, and validate that Odoo's sequence numbers continue from the highest Agility ERP order and journal entry numbers. We deliver a written inventory of every Agility ERP workflow and approval chain with its trigger, conditions, and recommended Odoo workflow equivalent. We support a one-week hypercare window to resolve any reconciliation issues raised by the customer's team. We do not rebuild Agility ERP workflows as Odoo server actions or automated activities within the migration scope; that work is handled by the customer's Odoo administrator or a certified Odoo partner.
Platform deep dives
Agility 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 Agility 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
Agility ERP: Not publicly documented.
Data volume sensitivity
Agility 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 Agility ERP to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your Agility 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 Agility 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.