CRM migration
Field-level mapping, validation, and rollback between aACE and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
aACE
Source
Odoo CRM
Destination
Compatibility
10 of 12
objects map 1:1 between aACE and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from aACE to Odoo CRM is a structural migration that requires bridging a FileMaker single-file database with no public API against Odoo's PostgreSQL-backed modular application stack. aACE exposes no REST endpoint for bulk extraction; we interact through FileMaker export scripts writing to a per-user temporary cache table, which we clear between batches, run under a dedicated migration user account, and validate against aACE's linked schema before committing to Odoo via its XML-RPC and JSON-RPC APIs. The aACE Account-to-Odoo Partner, Sales Order-to-Sale Order, and Project-to-Project object mapping is straightforward, but custom FileMaker fields on standard objects require manual field-discovery during scoping because aACE provides no metadata API to enumerate them. We write any custom field without an Odoo equivalent as a Char field or JSON blob in the relevant Odoo model to prevent silent data loss. Open invoices, outstanding Purchase Orders, and partial-receipt POs are flagged as operationally critical and migrate before historical closed records. Workflows, automations, and FileMaker script triggers do not migrate; we deliver a written inventory for the customer's Odoo administrator to rebuild in Odoo Studio or via Python modules.
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 aACE object lands in Odoo CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
aACE
Account
Odoo CRM
res.partner
1:1aACE Accounts are the primary customer and vendor record, holding billing and payment terms. We map Accounts to Odoo res.partner records with partner_type set to 'contact' for customers and 'invoice_address' for billing addresses. Each Account's location records migrate as separate res.partner addresses linked to the parent contact via type (delivery, invoice, contact). Account payment terms map to Odoo property_payment_term_id.
aACE
Company Location
Odoo CRM
res.partner (address)
1:manyaACE supports multiple locations per Account, each with its own address and contact record. We split each aACE Location into a separate res.partner address record with type='delivery' or type='contact', linked to the parent res.partner via partner_share. The primary location becomes the default delivery address; additional locations become secondary delivery addresses on the same partner.
aACE
Item
Odoo CRM
product.product / product.template
1:1aACE Items are the inventory-part records holding SKU, description, unit cost, and pricing. They map to Odoo product.product (the storable product variant) with product.template as the template record. Item cost maps to standard_price on product.product; sales price maps to list_price on product.template. Odoo creates product.attribute.value records for any variant dimensions carried in the aACE Item.
aACE
Sales Order
Odoo CRM
sale.order
1:1aACE Sales Orders link a Customer Account to Line Items and spawn Invoices and Purchase Orders. We map sale.order with Order Lines linking to product.product via SKU resolution, Account mapped to res.partner, and the originating Sales Order reference preserved in the Odoo order's origin field. Order status (draft, sent, sale, done, cancel) maps from aACE order state values to Odoo state values directly.
aACE
Invoice (A/R)
Odoo CRM
account.move (out_invoice)
1:1aACE open invoices migrate to Odoo account.move with type='out_invoice'. We preserve the original invoice number, invoice date, due date, and open balance so the A/R team can pursue collections without re-entering data. Partial payments against the invoice create corresponding account.payment records linked to the invoice. Historical closed invoices migrate as read-only account.move records with state='posted'.
aACE
Purchase Order
Odoo CRM
purchase.order
1:1aACE Purchase Orders link to Items, Vendors, and the originating Sales Order. We map purchase.order with PO lines resolving Item to product.product, Vendor to res.partner (partner_type='supplier'), and any received quantities preserved as Odoo stock.move records. Partial receipts (partial_receipt_status = true in aACE) are preserved at migration time so the purchasing team can receive the remaining quantity against the same PO in Odoo.
aACE
Project
Odoo CRM
project.project
1:1aACE Projects hold the job header and link to Tasks, Time entries, and billing records. We map project.project with status (active, archived, on_hold) preserved. The project manager from aACE maps to Odoo user_id on the project. aACE Project billing information (if linked to an Account) maps to analytic account in Odoo for cost tracking.
aACE
Task
Odoo CRM
project.task
1:1aACE Tasks are the unit-of-work records linked to Projects and optionally to Accounts and Orders. We map project.task with status, assignee (mapped to Odoo user_id via Owner email resolution), due date, and any custom flag fields preserved. High-volume task exports use the FileMaker batched export pipeline to avoid overwhelming the cache table. Task priority maps to Odoo priority (0-5 scale).
aACE
Employee
Odoo CRM
hr.employee
1:1Employee records in aACE hold role and department data. We map hr.employee with name, job_title (mapped from aACE role field), department (resolved to Odoo hr.department via name match), and active status. Historical payroll or compensation records are migrated as separate hr.contract records with Odoo wage and struct fields set to the compensation values.
aACE
Distribution List
Odoo CRM
mailing.contact / res.partner (group)
1:1aACE Distribution Lists are FileMaker portal-based address-book groupings. We migrate them as Odoo mailing.contact records grouped under a mailing.list, or alternatively as a res.partner category (tag) applied to the contact records depending on the customer's intended use. The list membership join table migrates as mailing.list.contact records.
aACE
Custom Fields
Odoo CRM
Custom Char/Selection/Text fields
lossyaACE custom fields on Accounts, Orders, Items, and Projects have no metadata API for enumeration. During scoping we request the customer's FileMaker layout definitions and build the complete field list from them. Custom fields that map directly to an Odoo field type become Odoo ir.model.fields created via Odoo Studio. Custom fields without an Odoo equivalent are written as Char or Text fields in the relevant Odoo model, or as a JSON blob in a dedicated ir_attachment record for post-migration admin review.
aACE
Documents / Attachments
Odoo CRM
ir.attachment
1:1FileMaker container fields store attachments, signatures, and scanned documents inside the aACE database. Export scripts do not reliably extract container binary data. We extract document filenames and container references and create ir.attachment records in Odoo pointing to the file location. Customers with compliance or audit requirements for document preservation are flagged for a separate FileMaker-native document export step after the primary data migration completes.
| aACE | Odoo CRM | Compatibility | |
|---|---|---|---|
| Account | res.partner1:1 | Fully supported | |
| Company Location | res.partner (address)1:many | Fully supported | |
| Item | product.product / product.template1:1 | Fully supported | |
| Sales Order | sale.order1:1 | Fully supported | |
| Invoice (A/R) | account.move (out_invoice)1:1 | Fully supported | |
| Purchase Order | purchase.order1:1 | Fully supported | |
| Project | project.project1:1 | Fully supported | |
| Task | project.task1:1 | Fully supported | |
| Employee | hr.employee1:1 | Fully supported | |
| Distribution List | mailing.contact / res.partner (group)1:1 | Fully supported | |
| Custom Fields | Custom Char/Selection/Text fieldslossy | Mapping required | |
| Documents / Attachments | ir.attachment1:1 | Not 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.
aACE gotchas
No public API — FileMaker export scripts only
FileMaker cache table is shared per-user
Custom fields require manual field-discovery
Binary document containers are not migrated
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
Discovery and aACE FileMaker layout audit
We audit the source aACE FileMaker database under a dedicated migration user account. We enumerate all standard objects (Accounts, Items, Sales Orders, Invoices, Purchase Orders, Projects, Tasks, Employees) and review the FileMaker layout definitions to build the complete custom field list. We document the relational links (Order to Line Items, Invoice to Account, PO to Vendor, Project to Tasks) as explicit foreign-key relationships to guide the Odoo import ordering. We also identify open invoices, outstanding POs, and active Projects as operationally critical records that will migrate first. The discovery output is a written migration scope document and a list of any FileMaker script modifications required to support batched exports.
Odoo environment preparation and schema validation
We coordinate with the customer's Odoo administrator to confirm the required Odoo apps (Contacts, Sales, Purchase, Invoicing, Project) are installed and active. We verify the destination database schema against the aACE field list, creating any missing custom fields via Odoo Studio or direct PostgreSQL migration before data import begins. We confirm the Odoo API is accessible via XML-RPC on the designated instance (Odoo Online, Odoo.sh, or on-premise) and note any rate limits or IP restrictions that will apply during import.
Test migration in Odoo sandbox
We run a full test migration into an Odoo sandbox or staging database using a representative sample of production data (at least 1,000 records per object type). We validate record counts in Odoo against the aACE source export, spot-check 25-50 records per object for field-level accuracy, and confirm that relational links (Account on Order, Partner on Invoice, Project on Task) are correctly resolved. We flag any Odoo validation rules, required fields, or picklist restrictions that are blocking import and provide the customer with the specific Odoo admin actions needed to resolve them. The customer signs off the sandbox results before production migration begins.
Owner and user reconciliation
We extract every distinct Owner referenced on Account, Sales Order, Project, and Task records and match by email against the Odoo destination User table. Any aACE Owner without a matching Odoo User is added to a reconciliation queue. The customer's Odoo administrator provisions any missing Users (active or inactive based on whether the original aACE user is still active) before production migration resumes. This step is required because OwnerId references are required on most standard objects in Odoo and unresolved references block import.
Production migration in dependency order
We run production migration in object dependency order: res.partner (Accounts and Locations), product.product (Items), sale.order (Sales Orders), account.move (Invoices), purchase.order (Purchase Orders), project.project (Projects), project.task (Tasks), hr.employee (Employees). Each phase clears the aACE FileMaker cache table before export, runs the batched export, validates the CSV against the aACE linked schema, and imports via Odoo XML-RPC or JSON-RPC API. Each phase emits a row-count reconciliation report before the next phase begins. Open invoices and outstanding POs are included in their respective phases with a priority flag in the import log.
Cutover, validation, and automation rebuild handoff
We freeze aACE writes during the cutover window, run a final delta migration of any records modified during the migration period, then enable Odoo as the system of record. We deliver a written inventory of all identified aACE automations and FileMaker script triggers that will need to be rebuilt in Odoo Studio or as Python server actions. We support a one-week hypercare window for reconciliation issues raised by the customer team. We do not rebuild aACE FileMaker scripts as Odoo automations inside the migration scope; that is a separate configuration engagement.
Platform deep dives
aACE
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM 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 aACE and Odoo CRM.
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
aACE: Not publicly documented for aACE itself. The underlying Claris FileMaker Data API caps concurrent sessions per server license, so high-volume extracts must be chunked and timed against the customer's FileMaker Server capacity (confirmed during scoping)..
Data volume sensitivity
aACE 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 aACE to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your aACE to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave aACE
Other ways to arrive at Odoo CRM
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.