CRM migration

Migrate from openCRX to Twenty CRM

Field-level mapping, validation, and rollback between openCRX and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.

openCRX logo

openCRX

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

67%

8 of 12

objects map 1:1 between openCRX and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

openCRX logo

openCRX

What's pushing teams away

  • The user interface is unintuitive and the learning curve is steep, making day-to-day usage challenging for non-technical teams without dedicated administrator resources.
  • Comprehensive formal documentation is lacking, forcing teams to reverse-engineer behaviour from UML models, Javadoc, and community forum posts.
  • No official commercial support channel exists; users must rely on community resources or internal expertise when production issues arise.
  • Pre-built integrations with popular third-party tools are minimal, requiring custom development effort to connect openCRX to modern SaaS stacks.

Choosing

Twenty CRM logo

Twenty CRM

What's pulling them in

  • Top open-source CRM on GitHub with 40.6K stars, giving teams full source code access and infrastructure ownership without per-feature licensing surprises.
  • Free self-hosting under AGPL-3.0 means unlimited users and custom objects for the cost of cloud infrastructure alone, typically $20–100/month.
  • Pricing page explicitly mocks competitors for charging add-on fees for API access, webhooks, and workflows — transparency that resonates with RevOps teams burned by Salesforce.
  • Unlimited custom objects and fields with no price impact, letting teams shape the data model to their business rather than forcing business into rigid schemas.
  • Modern TypeScript/React/PostgreSQL stack means developer-led teams can extend, self-host, or integrate without fighting legacy architecture.

Object mapping

How openCRX objects map to Twenty CRM

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)

maps to

Twenty CRM

Company

1:1
Fully supported

openCRX 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)

maps to

Twenty CRM

People

1:1
Fully supported

openCRX 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

maps to

Twenty CRM

Opportunity

1:1
Fully supported

openCRX 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

maps to

Twenty CRM

Note (or Custom Object)

lossy
Fully supported

openCRX 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

maps to

Twenty CRM

Note (or Custom Object)

lossy
Fully supported

Same 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

maps to

Twenty CRM

Note (or Custom Object)

lossy
Fully supported

openCRX 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

maps to

Twenty CRM

Standard Object: Opportunity

1:many
Fully supported

openCRX 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

maps to

Twenty CRM

Task or Note

1:1
Fully supported

openCRX 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)

maps to

Twenty CRM

Custom Fields

1:1
Mapping required

openCRX 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

maps to

Twenty CRM

File Attachment

1:1
Fully supported

openCRX 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

maps to

Twenty CRM

Member

1:1
Fully supported

openCRX 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

maps to

Twenty CRM

NOT MIGRATED

1:1
Fully supported

openCRX 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.

Gotchas + challenges

What specifically takes care here

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 logo

openCRX gotchas

High

No public REST API with documented rate limits

Medium

WebDAV client quirks block document access on Windows

Medium

"Too many open files" on Linux blocks installation and export

Low

Workflow Processes are segment-scoped and non-portable

Twenty CRM logo

Twenty CRM gotchas

High

Import order is enforced and critical

High

Export limited to 20,000 records and visible columns only

Medium

Soft-deleted records count toward uniqueness and trigger restores

Medium

API rate limits cap at 200 req/min on Organization tier

Low

No native email sequences — follow-up cadences require external tools

Pair-specific challenges

  • openCRX has no public REST API for data extraction

    openCRX exposes data through JMX and internal application-layer APIs with no published REST endpoint and no documented rate limits. All data export requires either direct read-only database access (coordinated with the customer's DBA) or custom scripting through the openCRX application layer scoped to the customer's specific version and deployment configuration. We include a pre-flight scoping call to determine the export path, document the required database permissions, and script the export queries before any transformation begins. Without this step, there is no extraction mechanism.

  • Twenty CSV import creates records, not fields

    Twenty's CSV import capability creates records but does not create fields. All custom fields required by the migration must be pre-created in Settings → Data Model before import begins. This is especially relevant for openCRX migrations because DataBinding PropertySet custom fields are common. We include a field pre-creation phase in every openCRX migration runbook. If a custom field is missing during import, records with that field are either rejected or the field is silently skipped, depending on import configuration.

  • Twenty People and Companies objects have minimal standard fields

    Twenty's standard People and Companies objects ship with fewer built-in fields than mature CRMs. A GitHub issue (twentyhq/twenty#13953) filed by a user documents that fields like industry, department, social profiles, and source are not included by default. Migrating from openCRX often surfaces this gap immediately when standard openCRX contact attributes have nowhere to land. We create these fields as custom fields during the pre-creation phase before import.

  • Users must exist in Twenty before import references are resolved

    If openCRX records reference an owner, assignee, or contact (all stored as user references), those users must have a corresponding Twenty Member before the OwnerId or assignee lookup can resolve during import. We extract every distinct owner and assignee from openCRX records, check them against the Twenty workspace Members list, and hold records with unresolved owners in a reconciliation queue. The customer's admin provisions missing Members before migration resumes.

  • openCRX Workflow Processes are segment-scoped and non-portable

    openCRX Workflow Processes are created per segment and are not standalone records that can be exported and re-imported into another system. Any custom workflow logic must be rebuilt from scratch in Twenty. We document the existing workflow definitions during discovery but do not attempt to transfer them. Alert Topics follow the same constraint and are documented separately for the customer's admin to rebuild in Twenty or a third-party automation tool.

Migration approach

Six steps for a successful openCRX to Twenty CRM data migration

  1. 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.

  2. 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).

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

openCRX logo

openCRX

Source

Strengths

  • Zero licensing cost with full source code, UML models, and Javadoc published under a BSD licence.
  • Enterprise-grade data model covering the full sales cycle from Lead through Invoice with full position-level detail.
  • Built on standard J2EE 6 Web Profile and Apache TomEE, running on any OS with Java VM support.
  • Multi-currency, multi-language, and multi-entity capabilities designed for global enterprise deployments.
  • Role-based security with system-wide audit trail meets requirements for regulated industry deployments.

Weaknesses

  • Self-hosting responsibility means no vendor-managed uptime, backups, or security patching.
  • No official commercial support; production issues require community resources or internal Java expertise.
  • Steeper operational burden compared to SaaS CRMs, requiring dedicated server administration.
  • Scarce pre-built third-party integrations; most connectors require custom development.
Twenty CRM logo

Twenty CRM

Destination

Strengths

  • AGPL-3.0 open-source license with full source code on GitHub — no vendor lock-in, no sunset risk.
  • Unlimited users and unlimited custom objects on self-hosted, with no feature gating based on headcount.
  • REST and GraphQL APIs available on all paid tiers, not locked behind an enterprise add-on fee.
  • MCP server and webhooks shipped as standard features, not premium upgrades.
  • Modern PostgreSQL-backed data model that developer teams can query, extend, and self-host.

Weaknesses

  • Recent v1.0 release means limited production hardening compared to CRMs with multi-year operational track records.
  • No native email sequencing or sales engagement tools — follow-up cadences require a separate platform.
  • No native two-way email sync or inbox integration, requiring third-party connectors for full activity logging.
  • Self-hosting 'free' pricing hides real infrastructure and DevOps costs that stack up over time.
  • Workflow automation is functional but lacks the complexity needed for sophisticated multi-step sales motions.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across openCRX and Twenty CRM.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    openCRX: Not publicly documented.

  • Data volume sensitivity

    B

    openCRX doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your openCRX to Twenty CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about openCRX to Twenty CRM data migrations

Answers to the questions buyers ask most during openCRX to Twenty CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most openCRX to Twenty migrations land between three and five weeks for accounts with under 15,000 Accounts, 5,000 Opportunities, and no complex multi-segment deployment. Migrations with large activity histories (over 200,000 engagement records), extensive DataBinding PropertySet custom fields across multiple segments, or large binary attachment sets requiring WebDAV export extend to eight to twelve weeks because of the export scripting scope, field pre-creation phase, and bulk CSV validation. openCRX has no public REST API, which is the primary timeline variable compared to migrations from CRMs with documented export endpoints.

Adjacent paths

Related migrations to explore

Ready when you are

Move from openCRX.
Land in Twenty CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day