CRM migration
Field-level mapping, validation, and rollback between aACE and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
aACE
Source
Twenty CRM
Destination
Compatibility
7 of 12
objects map 1:1 between aACE and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
The aACE to Twenty CRM migration is a CRM-focused transition from a FileMaker-based all-in-one ERP to an open-source modern CRM. aACE stores accounting, CRM, order management, and inventory in a single linked FileMaker database with no public REST API — all extraction runs through FileMaker export scripts and a shared cache table. Twenty CRM is a GraphQL-first, TypeScript-built platform that provides Company, People, Opportunity, Task, Note, and Custom Object records with a self-hostable AGPL deployment option at $9 per seat per month for hosted or free self-hosted. We handle the extraction constraint by sequencing exports under a dedicated migration user, preserving relational links as explicit foreign-key mappings in Twenty, and splitting aACE's ERP data into CRM-relevant records (Contacts, Companies, Deals, Activities) and operational records (Invoices, Purchase Orders, Projects) that migrate as Notes or Custom Objects. Workflows, automations, and FileMaker layout-level scripts do not migrate; we deliver a written inventory for the customer's admin to rebuild in Twenty. Document attachments stored in FileMaker container fields cannot be extracted via export scripts and are flagged for a separate document-export step.
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 Twenty 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
Twenty CRM
Company
1:1aACE Accounts are the primary customer and vendor records holding billing and payment terms. Every linked Sales Order, Invoice, Purchase Order, and Project references an Account. We map Accounts 1:1 to Twenty Company records and use the Account name as the Company.displayName dedupe key. Address fields split into Company.address/streetAddress, addressCity, addressState, addressCountry. Custom fields on Account migrate to custom fields on Company or serialize as a JSON note if Twenty's field type does not match.
aACE
Sales Order
Twenty CRM
Opportunity
1:1aACE Sales Orders are the transactional core linking a Customer Account to Line Items and spawning Invoices and Purchase Orders. We map Sales Order headers to Twenty Opportunity records with amount, closeDate, and stageName resolved from the aACE order status. Open orders migrate first with their full line item detail preserved as Opportunity description or a linked Note. Closed orders migrate with a historical flag.
aACE
Item
Twenty CRM
Product
1:1aACE Items hold SKU, description, unit cost, and pricing and link to Sales Orders, Purchase Orders, and Invoices as line items. We map Item.sku to Product.skuCode, Item.description to Product.description, Item.unitCost to a custom Product.unitCost__c field, and pricing tiers to price book entries in Twenty.
aACE
Invoice
Twenty CRM
Note or Custom Object
lossyaACE tracks both open A/R and historical closed Invoices with full balance and payment history. Twenty CRM has no native Invoice object. We migrate open Invoices as a custom Invoice custom object with header fields (invoice number, date, due date, total amount, balance) and line items as Note records linked to the Company. Closed invoices migrate as historical Note records with an archived flag.
aACE
Purchase Order
Twenty CRM
Note or Custom Object
lossyaACE Purchase Orders link to Items, Vendors, and the originating Sales Order. They represent supply-chain data that Twenty CRM does not natively model. We migrate PO headers and line items as a custom PurchaseOrder custom object or as Note records linked to the Vendor Company. Partial receipts and PO status are preserved as custom fields.
aACE
Project
Twenty CRM
Custom Object (Project)
1:1aACE Projects hold the job header and link to Tasks, Time entries, and billing records. We create a Project custom object in Twenty before migration, preserving Project status, dates, assigned user, and related Task links. If Twenty has a native project management module at migration time, we remap to the native object instead.
aACE
Task
Twenty CRM
Task
1:1aACE Tasks are unit-of-work records linked to Projects and optionally to Accounts and Orders. We preserve task title, status, assignee, due date, and any custom flag fields. High-volume task exports use FileMaker's batch cache mechanism with a dedicated migration user to avoid colliding with active users.
aACE
Employee
Twenty CRM
UserInvite or User
1:1aACE Employee records hold name, email, department, and role. We map active Employees to Twenty UserInvite records so the customer's admin can complete onboarding. Historical employees with no active login map to a People record with an inactive flag.
aACE
Company Location
Twenty CRM
Company (additional address)
1:manyaACE supports multiple locations per Account, each with its own address and contact record. We create the primary Company record from the Account and add additional addresses as Company address fields or as a custom Location custom object linked to the Company.
aACE
Distribution List
Twenty CRM
People (tag or group)
1:1aACE Distribution Lists are FileMaker portal-based address-book groupings. These migrate as a custom Group custom object with a many-to-many join table linking to People records, or as tags on People records depending on the customer's scoping preference.
aACE
Custom Fields
Twenty CRM
Custom Fields
lossyaACE tenants frequently add custom fields to standard objects via FileMaker. There is no metadata API to enumerate these fields. We request FileMaker layout definitions during scoping, build the complete custom field list, pre-create matching custom fields in Twenty's Settings Data Model, and migrate the values. Fields that cannot map to a compatible Twenty field type serialize as JSON in a custom text field.
aACE
Document / Container
Twenty CRM
Not Migrated
lossyFileMaker container fields store attachments, signatures, and scanned documents inside the aACE database. Export scripts do not reliably extract container binary data, and aACE exposes no separate document API. This is a known limitation. We flag documents and attachments for a separate FileMaker-native document export step and do not include binary container data in the primary migration scope.
| aACE | Twenty CRM | Compatibility | |
|---|---|---|---|
| Account | Company1:1 | Fully supported | |
| Sales Order | Opportunity1:1 | Fully supported | |
| Item | Product1:1 | Fully supported | |
| Invoice | Note or Custom Objectlossy | Fully supported | |
| Purchase Order | Note or Custom Objectlossy | Fully supported | |
| Project | Custom Object (Project)1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Employee | UserInvite or User1:1 | Fully supported | |
| Company Location | Company (additional address)1:many | Fully supported | |
| Distribution List | People (tag or group)1:1 | Fully supported | |
| Custom Fields | Custom Fieldslossy | Mapping required | |
| Document / Container | Not Migratedlossy | 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.
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
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Scoping and layout discovery
We conduct a structured scoping call with the customer's aACE admin to enumerate all objects in use, identify custom fields via FileMaker layout definitions, and flag container fields, FileMaker scripts, and automations. We map aACE's relational links (Order to Line Items, Invoices, Purchase Orders, Tasks, Projects) and agree on the split between CRM records migrating to standard Twenty objects and operational records migrating as Notes or Custom Objects. We also provision a dedicated migration user account in aACE to isolate the export cache table from active users.
Twenty workspace configuration
We set up the Twenty workspace before any data moves. This includes creating all required custom objects (Project, Invoice, PurchaseOrder, any tenant-specific objects), custom fields, and picklist values via Twenty's Settings Data Model. We configure Record Types and stage values for Opportunities to match the customer's aACE order pipeline structure. Fields must exist in Twenty before CSV import because the import creates records, not fields. We validate the workspace configuration in Twenty's staging or test environment before committing to production.
FileMaker export sequencing
We write FileMaker export scripts scoped to each object type, run them under the dedicated migration user, and chunk large datasets by fiscal period or record range. The cache table is cleared before each batch to prevent stale records. Export outputs are validated against the aACE schema and cross-checked for record counts before transformation begins. Any export that encounters a FileMaker permission error, missing field, or encoding issue is logged and re-run before proceeding.
Data transformation and enrichment
We transform the FileMaker export output into Twenty-compatible CSV format. This includes splitting multi-address fields, normalizing date formats, resolving the owner reference by matching Employee email to a pre-created UserInvite, and splitting aACE's composite records (Invoice line items as separate Note records, PO line items as separate Note records). Custom field values are mapped to their Twenty equivalents or serialized to custom text fields. We deduplicate Company and Person records using name and email as the dedupe key.
Staging migration and reconciliation
We run a full migration into Twenty's staging environment using production-like data volume. The customer's admin reconciles record counts (Accounts in equals Companies in, Sales Orders in equals Opportunities in, Items in equals Products in, etc.), spot-checks 25-50 records against the aACE source, and validates the relational links (each Opportunity links to the correct Company, each Task links to the correct Person or Company). Mapping corrections are made in staging before the production migration window opens.
Production migration and cutover
We freeze writes in aACE during the cutover window and run a final delta export of any records modified since the staging migration. Production migration follows the same dependency order as staging: custom object schema, then Company, Person, Opportunity, Product, Note (Invoice and PO records), Task, and Project. Each phase emits a row-count reconciliation report. After cutover, we enable Twenty as the system of record and deliver the automation and script inventory document to the customer's admin. We support a one-week post-migration hypercare window for reconciliation issues and do not rebuild aACE workflows or FileMaker scripts as Twenty automations within the migration scope.
Platform deep dives
aACE
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM 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 aACE and Twenty CRM.
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
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 Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your aACE to Twenty 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 Twenty 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.