CRM migration

Migrate from Axelor CRM to Twenty CRM

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

Axelor CRM logo

Axelor CRM

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

70%

7 of 10

objects map 1:1 between Axelor CRM and Twenty CRM.

Complexity

BStandard

Timeline

4-8 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Axelor CRM to Twenty CRM is a structural migration driven by platform complexity rather than record volume. Axelor's Third Party object conflates the Company and Person roles that Twenty models separately as People and Companies, requiring a split decision at scoping. Contacts in Axelor are child records of Third Parties and must be reconciled against the parent split during migration. The AppLoader export produces XML that we parse against Axelor's JPA model definitions to infer field names and types before any transform is written. BPM workflows, business rules, and Studio configurations do not export as data; we document them for the customer's admin to rebuild in Twenty's custom object and relation system. We do not migrate Users and permissions as code; we map Owner assignments by email match and flag any unmatched users for manual provisioning.

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

Axelor CRM logo

Axelor CRM

What's pushing teams away

  • Functional coverage gaps in niche areas like event management and training module capabilities, pushing specialized teams toward purpose-built solutions.
  • Technical knowledge required for installation and ongoing configuration, making it less accessible for non-technical admin teams compared to SaaS-first alternatives.
  • Graphic style customization is intentionally limited; teams wanting full UI theming or brand-aligned interfaces report frustration with the constrained styling options.
  • Support ecosystem relies heavily on partner integrators in markets outside France, making local expertise scarce and increasing implementation costs for international teams.

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 Axelor CRM objects map to Twenty CRM

Each row shows how a Axelor CRM 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.

Axelor CRM

Lead

maps to

Twenty CRM

Person

1:1
Fully supported

Axelor Leads migrate to Twenty Person records as first-class CRM objects. The Axelor lead status (New, Assigned, Qualified, Lost, Converted) maps to a Twenty select field representing the original status, and the conversion timestamp from Axelor becomes a date field on the Twenty Person record. Any agency routing assignments on the Lead are resolved via the lead-agency junction table and reconstructed as Tags on the Person after the Tag object is pre-created in Twenty.

Axelor CRM

Third Party

maps to

Twenty CRM

Person or Company (split required)

1:many
Fully supported

Axelor Third Parties represent both organizations and individuals within those organizations, a single object handling both roles. We perform a split at migration time based on the Third Party type field: type=Customer or type=Prospect with no individual name fields maps to Twenty Company; type=Customer or type=Prospect with an individual name maps to Twenty Person and optionally also creates a linked Company. The original Third Party type is preserved as a custom field for reporting continuity. The parent-child Contact relationship from Axelor is resolved against the split output.

Axelor CRM

Contact

maps to

Twenty CRM

Person

1:1
Fully supported

Axelor Contacts are child records linked to a parent Third Party. After the Third Party split into Person and Company objects, we match each Contact to its parent by resolving the Third Party ID to the corresponding Twenty Person or Company record. The Contact's name, email, phone, and role fields migrate to the corresponding fields on the Twenty Person record, and the original Third Party ID is preserved in a custom field for audit traceability. Contacts without a resolvable parent Third Party are held in a reconciliation queue.

Axelor CRM

Opportunity

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Axelor Opportunities map directly to Twenty Opportunities. The pipeline stage name from Axelor becomes a select field value on the Twenty Opportunity, and the expected revenue amount migrates to the standard amount field. If the recurrent revenue configuration is active on the source (detected during scoping XML inspection), the recurring amount and period fields migrate as custom fields on the Opportunity in Twenty. The opportunity linked Third Party ID is resolved against the post-split Person or Company record.

Axelor CRM

Agency

maps to

Twenty CRM

Tag

lossy
Fully supported

Axelor Agencies are a distinct routing and segmentation concept with no native equivalent in Twenty CRM. We pre-create a Tag object in Twenty during the schema design phase and map each Axelor Agency to a Tag with the agency name. The Tagging functionality in Twenty must be enabled in the workspace settings before migration, as Tags are not created by default. Customer admin confirms the tagging strategy during scoping.

Axelor CRM

Lead Agency (junction)

maps to

Twenty CRM

Tag

1:many
Fully supported

The lead-to-agency assignment in Axelor is a many-to-many relationship stored in a junction table. We export this as a standalone lookup file during the Axelor AppLoader data extraction, then reconstruct the associations in Twenty by creating Tag records for each distinct Agency and applying them to the corresponding Person records. The junction table export is performed before the main record migration so that Tags are available for assignment during the Person load.

Axelor CRM

Custom Object (Studio)

maps to

Twenty CRM

Custom Object

1:1
Fully supported

Axelor Studio custom objects are defined in XML and compiled to JPA models, with no standard export format beyond the AppLoader package. We perform a schema inspection step that reads the XML model definitions from the Axelor application configuration, infers the field structure (names, data types, required flags), and generates a Twenty custom object schema before any data extraction begins. All custom fields are created in Twenty via the UI or API before the custom object data migration starts, including any lookup relationships to standard objects that must exist first.

Axelor CRM

Recurrent Revenue Fields

maps to

Twenty CRM

Custom Fields on Opportunity

1:1
Mapping required

The recurrent revenue amount and default recurring period fields on Axelor Opportunities appear only when the 'Manage recurrent revenue on opportunities' checkbox is activated in the CRM settings. We detect this configuration during scoping by inspecting the Opportunity XML schema for the recurring revenue fields and include them in the migration scope only when present. In Twenty, we create custom number and select fields on the Opportunity object before migration and map the values directly.

Axelor CRM

Document / Attachment

maps to

Twenty CRM

Attachment

1:1
Fully supported

Axelor DMS stores documents linked to CRM records as binary files. We extract document metadata (filename, linked object type, linked record ID, creation date, author) from the AppLoader export and include it in the migration scope. The binary files themselves require separate file-transfer handling outside the standard data migration and are flagged for the customer's IT team to relocate to a shared file store or Twenty's document attachment storage post-migration.

Axelor CRM

User / Owner

maps to

Twenty CRM

User

1:1
Fully supported

Axelor user records include roles, organizational structure, and access permissions that do not export as data. We extract user identity data (user ID, email, full name, active/inactive status) from the Axelor AppLoader export for mapping record ownership in Twenty. We match by email against the Twenty User table. Any Axelor user without a matching Twenty User goes to a reconciliation queue for the customer's admin to provision before record import proceeds. Role and permission schemas are not migrated.

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.

Axelor CRM logo

Axelor CRM gotchas

High

Version-to-version migration breaks schema and workflows

High

BPM workflows and business rules do not export as data

Medium

No publicly documented API rate limits or developer portal

Medium

Custom Studio objects have no standard export format

Low

Recurrent revenue fields are configuration-dependent

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

  • BPM workflows and business rules do not export as data

    Axelor's BPM engine stores workflow logic as application configuration tied to the Studio and J2EE deployment environment, not as data records. The AppLoader export does not package BPM models as data that can be loaded into another system. We do not migrate BPM workflows or business rules. We document every identified workflow trigger, condition, and action as a written specification during scoping, including the object and field references, and deliver this to the customer's admin team for rebuild in Twenty's automation system.

  • Third Party split must be designed before extraction

    Axelor Third Parties conflating person and company roles with no pre-split means that the migration transform must decide, for each Third Party record, whether it belongs in Twenty as a Person, a Company, or both. If this split is not designed and validated before the AppLoader extraction runs, the records load into Twenty without the correct object type and the relational integrity breaks (Person records without linked Companies, or Companies without founders). We define the split rule in the scoping phase and test it against a sample before full extraction.

  • Custom Studio objects have no standard export format

    Objects created through Axelor Studio are defined in XML and compiled to JPA models. The AppLoader export includes custom object data, but field names and data types follow Axelor's internal conventions, not standard CRM naming. We perform a schema inspection step that reads the XML model definitions, infers the field structure, and generates a field map before any extraction begins. Without this step, custom object migration produces fields with Axelor-internal names that require manual renaming in Twenty after import.

  • No publicly documented API rate limits on Axelor

    Unlike mainstream SaaS CRMs, Axelor does not publish API rate limits or maintain a developer portal. Integration planning must account for undocumented throttling behavior. We throttle our migration writes conservatively and monitor for 429 responses, adjusting batch sizes dynamically. If the customer plans to run bidirectional sync between Axelor and Twenty post-migration, we recommend building in retry logic with exponential backoff and alerting for non-standard HTTP 429 responses.

  • Recurrent revenue fields are configuration-dependent

    The recurrent revenue amount and default recurring period fields on Axelor Opportunities appear only when the 'Manage recurrent revenue on opportunities' checkbox is activated in the CRM settings. We detect this configuration during the scoping call by inspecting the Opportunity XML schema for the recurring revenue fields and include them in the migration scope only when present. Migrations that scope these fields without verifying the configuration may create empty custom fields in Twenty for customers who never activated the feature.

Migration approach

Six steps for a successful Axelor CRM to Twenty CRM data migration

  1. Discovery and scoping

    We audit the source Axelor installation across version (6.1.x through 6.5.x), AppLoader export capability, custom Studio objects, agency routing setup, BPM workflow count, and document attachment volume. We inspect the Opportunity XML schema for recurrent revenue field presence and the Third Party type distribution to design the Person/Company split rule. The discovery output is a written migration scope, object list, and split-rule specification that the customer signs off before extraction begins.

  2. Schema design and Twenty workspace preparation

    We pre-create all custom objects in Twenty (via the UI or API) before any data extraction, including custom fields, field types, and lookup relationships. We enable the Tags feature in the Twenty workspace settings for agency reconstruction. We configure the Opportunity pipeline stage values to match the Axelor stage names where possible, and create custom fields for Axelor-specific properties that have no direct Twenty equivalent (original Third Party ID, recurrent revenue fields if present, agency junction references). Schema is validated in a staging Twenty instance before production preparation.

  3. Axelor AppLoader extraction and XML schema inspection

    We run the Axelor AppLoader data package export for the scoped CRM objects: Leads, Third Parties, Contacts, Opportunities, Agencies, and any custom Studio objects. Simultaneously, we parse the XML model definitions for custom Studio objects to infer field structure and generate the field map. We export the lead-agency junction table as a standalone lookup file. All binary document files are flagged for separate file-transfer handling. We reconcile the extracted record counts against the Axelor UI counts before transform authoring begins.

  4. Transform authoring and Third Party split execution

    We write the migration transforms in dependency order: first the split rule for Third Parties into Person and Company records, then the Contact parent resolution against the split output, then Opportunities with recurrent revenue fields (if present), then Leads with agency Tags, then custom object records. Each transform emits a row-count report. We run the full transform pipeline against the AppLoader export in a staging environment to validate field mapping, null handling, and lookup resolution before any Twenty write occurs.

  5. Sandbox migration and reconciliation

    We run a full migration into a staging Twenty instance (equivalent to a sandbox) using production-like data volume. The customer's CRM admin reconciles record counts (Leads in, Persons in, Companies in, Opportunities in), spot-checks 25-50 records against the Axelor source for field accuracy and relationship integrity, and validates the agency Tags on Person records. Any mapping corrections are made to the transform before the production migration begins.

  6. Production migration in dependency order

    We run production migration in record-dependency order: Companies (from Third Parties with org-only split), Persons (from Third Parties with individual split and from Axelor Contacts), Opportunities (with Person and Company lookups resolved), Leads (with Tag lookups resolved), custom objects (last, with all lookup targets existing), then document metadata (with binary file relocation noted as a separate task). Each phase emits a row-count reconciliation report before the next phase begins.

  7. Cutover, validation, and handoff

    We freeze Axelor writes during the cutover window, run a final delta migration of any records modified during the migration window, then enable Twenty as the system of record. We deliver the BPM workflow inventory document, the custom object schema notes, and the agency routing reconstruction guide to the customer's admin team. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's team. We do not rebuild Axelor BPM workflows in Twenty's automation system inside the migration scope; that is a separate engagement.

Platform deep dives

Context on both ends of the pair

Axelor CRM logo

Axelor CRM

Source

Strengths

  • True open-source AGPL license with identical community and enterprise codebases — no feature-gating in the OSS edition.
  • Low Code Studio enables screen, form, workflow, and business-rule changes without recompiling the J2EE backend.
  • Single platform combines CRM, ERP, BPM, BI, web portals, and document management under one schema, reducing tool sprawl.
  • Modular install path lets teams start with CRM only and expand into Finance, Inventory, or HR without re-platforming.
  • Deployment flexibility — cloud-hosted, on-premise, or hybrid with mobile access included — fits data-residency and offline requirements.

Weaknesses

  • Steep technical onboarding curve for teams without J2EE or partner integrator access.
  • Limited UI/theming customization compared to modern SaaS CRM platforms.
  • Niche functional modules (event management, training) have reduced feature depth versus specialists.
  • No publicly documented API rate limits or developer portal, making integration planning harder.
  • Partner ecosystem for implementation and support is concentrated in France and French-speaking markets.
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 Axelor CRM 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

    Axelor CRM: Not publicly documented.

  • Data volume sensitivity

    A

    Axelor CRM exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Axelor CRM 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 Axelor CRM to Twenty CRM data migrations

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

Can't find your answer?

Walk through your Axelor CRM to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between four and eight weeks for accounts under 15,000 Third Parties and 3,000 Opportunities with no custom Studio objects. Migrations with custom Studio objects, complex recurrent revenue field configurations, large document attachment sets, or agency-routing histories requiring Tag reconstruction move to eight to fourteen weeks because of the XML schema inspection step, custom object pre-creation in Twenty, and the many-to-many agency junction resolution work.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Axelor CRM.
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