CRM migration
Field-level mapping, validation, and rollback between openCRX and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
openCRX
Source
Twenty CRM
Destination
Compatibility
8 of 12
objects map 1:1 between openCRX and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
openCRX stores its data through JMX and internal application-layer APIs with no published REST endpoint, which is the central challenge of this migration. We coordinate directly with the customer's DBA to obtain a structured read-only database export or to script exports through the openCRX application layer, then transform the output into Twenty's object model (Companies, People, Opportunities, Tasks, Notes, and Custom Objects). openCRX's contract hierarchy (Opportunities, Quotes, Sales Orders, and Invoices sharing an abstract contract class) flattens into Twenty's single Opportunity object plus Notes for document-style records, with the customer choosing whether to store Quotes and Invoices as Notes with attachments or as a custom object. openCRX Workflow Processes are segment-scoped and non-portable; we document the existing definitions during discovery and hand off a written inventory for your team to rebuild in Twenty. User-Defined Attributes added via DataBinding PropertySet migrate as Twenty custom fields, which must be pre-created in Settings before import begins. Multi-currency, multi-language, and role-based audit context do not carry forward as native features in Twenty and are preserved as custom fields where business-critical.
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 openCRX 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.
openCRX
Account (LegalEntity)
Twenty CRM
Company
1:1openCRX LegalEntity accounts (organisations) map to Twenty Companies. We extract the legal name, postal address, phone numbers, website, and industry classification. openCRX multi-segment deployments may contain duplicate legal entity names across segments; we deduplicate by legal name during scoping and document conflicts for the customer to resolve. The LegalEntity subtype flag is preserved as a custom Company field if the customer needs to distinguish organisational types.
openCRX
Account (Contact)
Twenty CRM
People
1:1openCRX Contact accounts (individuals) map to Twenty People. We extract name fields, email addresses, phone numbers, job title, and department from the Contact's primary attribute set. PostalAddress and PhoneNumber children linked to the Contact are mapped to the corresponding People address and phone fields, with multi-address support handled by concatenating into a single address string or splitting into custom address fields.
openCRX
Opportunity
Twenty CRM
Opportunity
1:1openCRX Opportunities inherit from the abstract contract class and include deal fields, ratings, stage assignments, and associated notes. We map the openCRX contract state (draft, negotiated, confirmed, fulfilled) to a Twenty Opportunity stage value set we create during workspace preparation. The original openCRX contract class hierarchy (Opportunity vs Quote vs Sales Order) is preserved as a custom Opportunity field so the customer retains the distinction without needing a separate Quote or Invoice object.
openCRX
Quote
Twenty CRM
Note (or Custom Object)
lossyopenCRX Quotes inherit from the same contract hierarchy as Opportunities and include line items modelled as contract positions. Twenty does not ship a native Quote object. We offer two options: (1) store Quote headers and line items as a Twenty Note with structured body text, or (2) create a Quote custom object with line item fields before import and map contract positions to Quote line records. The customer chooses during scoping; option 2 preserves more structured data but requires pre-creating the custom object schema before import.
openCRX
Sales Order
Twenty CRM
Note (or Custom Object)
lossySame constraint as Quote. Sales Orders in openCRX follow the contract hierarchy with position-level detail. We treat Sales Orders identically to Quotes: either as structured Notes or as a custom object created before import. If the customer uses Sales Orders for fulfilment tracking rather than billing, we recommend a custom object with fulfilment status fields.
openCRX
Invoice
Twenty CRM
Note (or Custom Object)
lossyopenCRX Invoices are terminal contract objects with line positions and payment status. Twenty has no native Invoice object. We follow the same approach as Quotes and Sales Orders: structured Note or pre-created custom Invoice object. If the customer uses openCRX for billing integration with an ERP, we recommend keeping invoices in the ERP and linking them via URL or external ID as a custom field rather than duplicating billing data into Twenty.
openCRX
Product
Twenty CRM
Standard Object: Opportunity
1:manyopenCRX Products map to a Product custom object or to Opportunity line items in Twenty. If the customer uses products primarily for pricing during the sales cycle, we recommend creating a Products object in Twenty and linking via custom Opportunity product fields. openCRX's multi-currency price lists and run-time pricing rules cannot be reproduced in Twenty's current multi-currency model (single default currency); we document the active price list values and advise the customer to enter key products manually or via a secondary CSV import after the initial migration.
openCRX
Activity / Activity Tracker
Twenty CRM
Task or Note
1:1openCRX Activities (calls, emails, meetings, tasks) are core objects with rich attributes and time-tracking linked to Activity Trackers for grouping. We map each activity subtype to the closest Twenty equivalent: openCRX task-type activities map to Twenty Tasks; meeting-type activities map to Twenty Tasks with a custom meeting flag; email-style activities map to Notes. Activity Tracker groupings that span multiple objects do not have a direct Twenty equivalent and are captured as custom tags or as a Note with a structured body that preserves the tracker context.
openCRX
User-Defined Attributes (DataBinding PropertySet)
Twenty CRM
Custom Fields
1:1openCRX custom fields added via DataBinding PropertySet are stored as feature definitions in the UI customising layer and bound to CrxObject at runtime. We identify all active custom fields during scoping, map them to their openCRX target objects (Account, Contact, Opportunity, etc.), and pre-create them as Twenty custom fields in Settings → Data Model before import begins. This is a prerequisite step that must complete before any CSV import starts; Twenty's import creates records, not fields.
openCRX
Attachment
Twenty CRM
File Attachment
1:1openCRX stores binary attachments linked to objects. We extract attachment metadata (filename, MIME type, linked object, link timestamp) and re-attach file content to the corresponding migrated records in Twenty where the file is accessible. Note that openCRX's WebDAV-based attachment storage is known to have Windows client quirks; we run exports on Linux or macOS to avoid silent file access failures. Large binary attachments may require separate download and re-upload workflows.
openCRX
User and Role
Twenty CRM
Member
1:1openCRX role-based security assigns users to segments with specific access permissions. We extract active users (name, email, active/inactive status) and map to Twenty Members. openCRX role permissions do not migrate; we document the permission matrix during discovery and provide a written role design recommendation for the customer's admin to configure in Twenty's workspace permissions post-migration.
openCRX
Workflow Process
Twenty CRM
NOT MIGRATED
1:1openCRX Workflow Processes are segment-scoped and not standalone records that export and re-import into another system. We document every active Workflow Process definition (trigger conditions, steps, assigned roles) during discovery and deliver a written inventory with recommended rebuild steps in Twenty's workflow builder. The customer rebuilds workflow logic post-migration; this is not included in the migration scope per FlitStack AI standard policy.
| openCRX | Twenty CRM | Compatibility | |
|---|---|---|---|
| Account (LegalEntity) | Company1:1 | Fully supported | |
| Account (Contact) | People1:1 | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| Quote | Note (or Custom Object)lossy | Fully supported | |
| Sales Order | Note (or Custom Object)lossy | Fully supported | |
| Invoice | Note (or Custom Object)lossy | Fully supported | |
| Product | Standard Object: Opportunity1:many | Fully supported | |
| Activity / Activity Tracker | Task or Note1:1 | Fully supported | |
| User-Defined Attributes (DataBinding PropertySet) | Custom Fields1:1 | Mapping required | |
| Attachment | File Attachment1:1 | Fully supported | |
| User and Role | Member1:1 | Fully supported | |
| Workflow Process | NOT MIGRATED1: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.
openCRX gotchas
No public REST API with documented rate limits
WebDAV client quirks block document access on Windows
"Too many open files" on Linux blocks installation and export
Workflow Processes are segment-scoped and non-portable
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
Export path determination and DBA coordination
We begin every openCRX migration with a scoping call to determine the data export path. For self-hosted deployments, we coordinate with the customer's DBA to obtain a read-only database export (PostgreSQL or the underlying RDBMS), or we agree on application-layer script parameters if the customer prefers not to grant direct database access. We validate export permissions, confirm the openCRX version and segment count, and document any known constraints (WebDAV attachment storage, multi-segment data isolation). This step produces a written export specification reviewed and signed off by the customer's technical lead.
Data discovery and DataBinding PropertySet audit
We run a full data discovery pass on the openCRX export. This includes record counts per segment and object type (Account, Contact, Opportunity, Quote, Sales Order, Invoice, Product, Activity), identification of active DataBinding PropertySet custom fields and their target objects, and a sample record audit of 50-100 records per object to characterise data quality, date formats, multi-currency fields, and relationship integrity. The output is a data quality report that informs the transformation scope and flags records to exclude (inactive, test data, records with no meaningful fields).
Twenty workspace preparation and field pre-creation
We create the Twenty workspace and pre-create all required custom fields before any import begins. This includes: standard fields missing from Twenty's People and Companies objects (industry, department, source, job title), custom fields mapped from openCRX DataBinding PropertySet, contract type and stage fields to distinguish Opportunities from Quotes and Sales Orders, and currency and pricing fields for product records. We invite all team members who appear as owners or assignees in the openCRX export so that User lookup resolution succeeds during import.
Schema design for Quote, Invoice, and Sales Order
We work with the customer to decide how to handle openCRX's contract hierarchy (Opportunities, Quotes, Sales Orders, Invoices) in Twenty's single-Opportunity model. If the customer chooses custom objects for Quotes and Invoices, we create the schema (objects, fields, and relationships) before import. If the customer prefers Notes with structured content, we design the Note template that preserves line item detail. This decision is made during scoping and confirmed before the migration script is written.
Transformation and migration rehearsal in staging
We run the full migration in a Twenty staging workspace using a representative data sample (at minimum 10% of production volume). The transformation script converts openCRX field names and types to Twenty field names and types, normalises date formats, resolves multi-currency values against a configured default currency, and builds CSV files ready for Twenty's import tool. The customer's RevOps lead reviews the staging output, spot-checks 25-50 records against the source, and approves the transformation logic before production migration begins.
Production migration and cutover
We run the production migration in record-dependency order: Companies first (deduplicated by legal name), then People (with AccountId resolved), then Opportunities and contract records (with CompanyId, OwnerId, and assignee resolved), then Activities (Tasks and Notes), then Attachments (file re-upload with object linkage), then Custom Objects last. Each phase emits a row-count reconciliation report. We freeze openCRX writes during cutover, run a final delta migration of records modified during the window, then set Twenty as the system of record. We deliver the Workflow Process inventory document to the customer's admin team and support a one-week post-cutover reconciliation window.
Platform deep dives
openCRX
Source
Strengths
Weaknesses
Twenty 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 openCRX and Twenty 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
openCRX: Not publicly documented.
Data volume sensitivity
openCRX 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 openCRX to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your openCRX 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 openCRX
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.