CRM migration

Migrate from SoulCRM to Twenty CRM

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

SoulCRM logo

SoulCRM

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

75%

9 of 12

objects map 1:1 between SoulCRM and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from SoulCRM to Twenty CRM is a CSV-first migration because SoulCRM does not publish a public API and has no documented programmatic export endpoint. We request CSV exports from each SoulCRM module, validate field headers against the module's standard schema, and map those exports to Twenty's REST and GraphQL API endpoints in dependency order: Companies first to satisfy relationship lookups, then Contacts, then Deals, then Activities last. SoulCRM's India-specific custom fields (GST identifiers, regional segments, INR-based pricing tiers) transfer as Twenty custom fields. SoulCRM's integrated telephony and email capture data requires a content-normalization step before the body text lands cleanly in Twenty's Timeline. SoulCRM's Marketing Module campaigns and follow-up workflows do not migrate as automation; we deliver a written inventory of every active workflow and its recommended Twenty workflow-builder equivalent for the customer's admin to reconstruct post-migration.

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

SoulCRM logo

SoulCRM

What's pushing teams away

  • Limited international feature parity compared to global CRMs, with fewer advanced automation capabilities and third-party integrations available on the platform.
  • Small team size (51-100 employees) raises concerns about long-term product development velocity and support response times as the business scales.
  • Minimal public documentation and absence from major review platforms makes it difficult to assess real-world performance and get peer feedback before purchase.
  • SMB-focused design becomes a constraint when mid-market companies outgrow basic pipeline management and need enterprise-grade customization or API depth.

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

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

SoulCRM

Company

maps to

Twenty CRM

Company

1:1
Fully supported

SoulCRM Company records map directly to Twenty Company objects. SoulCRM's company name, domain, industry, phone, address, and any linked GST identifiers in custom fields migrate to Twenty's Company fields plus a custom field for the GST number if present. Companies are imported first because Contacts and Deals have lookup dependencies that require the Company record to exist before the relationship can be established in Twenty.

SoulCRM

Contact

maps to

Twenty CRM

Person

1:1
Fully supported

SoulCRM Contact records map to Twenty Person objects with is_organization set to false. The full contact profile (name, email, phone, address, interaction history) migrates. SoulCRM contacts linked to a Company carry that relationship into Twenty via the Person's workspaceKey field, which is resolved at import time against the previously migrated Company record. Individual email addresses serve as the deduplication key.

SoulCRM

Lead

maps to

Twenty CRM

Person (is_organization=false)

1:1
Fully supported

SoulCRM Leads from the Marketing Module map to Twenty Person records with is_organization set to false. Lead status, source attribution, assignment fields, and any custom lead scoring values migrate as custom fields in Twenty. If SoulCRM's Marketing Module captures lead scoring, we preserve it in a custom field on the Person record for the customer's admin to use in Twenty's workflow builder.

SoulCRM

Deal

maps to

Twenty CRM

Opportunity

1:1
Fully supported

SoulCRM Deal records map to Twenty Opportunity objects. The pipeline stage name, deal amount, probability (if stored), owner assignment, and expected close date migrate. SoulCRM's stage names are mapped explicitly to Twenty's opportunity stage values during the transform step. If SoulCRM stores a Closed-Won or Closed-Loss reason, it migrates as a custom field on the Opportunity.

SoulCRM

Deal Stage

maps to

Twenty CRM

Opportunity Stage

lossy
Fully supported

SoulCRM pipeline stages (New, Qualified, Proposal, Negotiation, Closed Won, Closed Lost, and any India-specific regional stages) are mapped to Twenty's opportunity stage values during the transform. We configure Twenty's stage list in the workspace before migration begins so that stage values are available as valid picklist entries during Opportunity import.

SoulCRM

Activity: Email

maps to

Twenty CRM

TimelineEvent

1:1
Fully supported

SoulCRM email activities linked to Contacts or Companies migrate to Twenty TimelineEvent records. The email subject, body content, sender, recipient, and timestamp transfer. SoulCRM email body formatting (HTML or plain text depending on how it was captured in SoulCRM) may require a content-normalization step before display in Twenty's Timeline, and we flag this during the reconciliation phase.

SoulCRM

Activity: Call

maps to

Twenty CRM

TimelineEvent (type=call)

1:1
Fully supported

SoulCRM call logs map to Twenty TimelineEvent records with the event type set to call. Call duration, disposition, and any notes from the call record migrate. The linked Contact or Company is resolved via the Person or Company lookup at migration time so the call appears in the correct Timeline in Twenty.

SoulCRM

Activity: Task

maps to

Twenty CRM

Task

1:1
Fully supported

SoulCRM task activities migrate to Twenty Task records. Task status, priority, due date, and description transfer. If the task was assigned to a SoulCRM Owner, the assignee is resolved via the User mapping before import.

SoulCRM

Marketing Campaign

maps to

Twenty CRM

Opportunity (campaign-linked)

1:many
Fully supported

SoulCRM Marketing Module campaigns (name, type, start/end dates, budget) map to Twenty Opportunity records tagged with a campaign custom field. Campaign membership links (which SoulCRM associates to Contacts and Leads) are resolved by creating a custom many-to-many relationship: each SoulCRM campaign-contact or campaign-lead association creates a link record in Twenty that associates the Person with the campaign Opportunity. This requires two-phase import: campaign records first, then association records second.

SoulCRM

Custom Fields (India-specific)

maps to

Twenty CRM

Custom Fields

lossy
Fully supported

SoulCRM custom fields for GST identifiers, regional sales segments, INR-based pricing tiers, and other India-specific data migrate as Twenty custom fields on the relevant object (Company, Person, or Opportunity). We audit each SoulCRM custom field during scoping, drop any deprecated fields with zero usage, and create the corresponding custom field in Twenty's workspace schema before data import begins. Field type mapping follows: text to text, number to number, date to date, and picklist to select.

SoulCRM

Attachment

maps to

Twenty CRM

Attachment (via File upload)

1:1
Fully supported

File attachments linked to SoulCRM Contacts, Companies, or Deals are extracted as binary files and re-uploaded to Twenty via the File API. Folder hierarchy in SoulCRM is not preserved; all files land in Twenty's default attachment location linked to the corresponding record. We extract attachment metadata (filename, size, upload date) and recreate it as a custom field on the record for reference.

SoulCRM

Owner

maps to

Twenty CRM

User

1:1
Fully supported

SoulCRM Owner records (sales reps, admin users) are mapped to Twenty User accounts by email address. We extract every distinct Owner referenced on Contacts, Companies, Deals, and Activities and match by email against Twenty's User table. Any SoulCRM Owner without a matching Twenty User is held in a reconciliation queue for the customer's admin to provision the User before the record import resumes.

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.

SoulCRM logo

SoulCRM gotchas

High

No public API documentation discovered in research

Medium

Minimum user requirements on paid tiers affect per-seat pricing

Medium

Absence from G2, Capterra, and TrustRadius review platforms

Low

Limited documented integrations with third-party tools

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

  • SoulCRM has no public API requiring manual CSV exports

    SoulCRM does not publish API documentation and has no documented programmatic export endpoint. Migration requires manual CSV exports from each module (Companies, Contacts, Deals, Leads, Activities) directly from the SoulCRM UI. This adds a discovery step where we request the CSV files from the customer, validate field headers against each module's standard schema, and flag any custom field columns that require custom mapping. For large datasets (over 10,000 records), manual export-and-reimport introduces more human-error risk than API-driven migration, and we mitigate this with field-by-field reconciliation after each module's import into Twenty.

  • Twenty's import order requires Companies first

    Twenty's documentation explicitly requires importing Companies (the 'one' side of relationships) before importing dependent records like People and Opportunities. SoulCRM's UI may allow exporting Companies and Contacts in a single export or in a non-dependency-aware order. We re-sequence SoulCRM CSV exports to match Twenty's required import order before loading data. Skipping this step results in failed foreign-key lookups when Contacts or Deals reference a Company that has not yet been created in Twenty.

  • GST and regional custom fields require pre-migration schema setup

    SoulCRM custom fields capturing India-specific data (GST registration numbers, regional sales segments, INR-based pricing categories) have no direct equivalent in Twenty's standard field set. We create custom fields in Twenty's workspace before any data import, matching the field type and validation rules from SoulCRM. If a SoulCRM GST field has a validation pattern (e.g., 15-character GSTIN format), we add a corresponding regex validation to the Twenty custom field. This pre-migration schema setup adds a step to the project timeline that does not apply when migrating platforms with more aligned standard field sets.

  • SoulCRM automation does not migrate to Twenty's workflow builder

    SoulCRM's Marketing Module includes follow-up workflows and lead capture automations that have no direct equivalent in Twenty's workflow builder architecture. Twenty's workflow builder supports trigger-based and scheduled automations but lacks the native sequencing capabilities that some teams use in SoulCRM. We do not migrate workflows as code. We deliver a written inventory of every active SoulCRM workflow with its trigger, conditions, and actions, plus a recommended Twenty workflow-builder equivalent for the customer's admin to rebuild post-migration. The customer should validate the rebuilt workflows in a staging environment before going live.

  • Self-hosted Twenty updates can trigger migration failures

    Twenty's self-hosted deployment has had documented issues with database migration during version upgrades (GitHub issue #14705 and #12936). If the customer deploys Twenty self-hosted, the migration team should ensure the Twenty instance is on a stable version before import and avoid running version upgrades during the migration window. We recommend using Twenty's managed cloud for the migration period if the customer lacks a DevOps resource to manage self-hosted upgrade risk, then transitioning to self-hosted post-migration once data is confirmed.

Migration approach

Six steps for a successful SoulCRM to Twenty CRM data migration

  1. CSV export request and field audit

    We request CSV exports from SoulCRM for each module: Companies, Contacts, Leads, Deals, Activities (emails, calls, tasks), and Marketing Campaigns. We also request any attachments as a separate download. Each CSV is audited for field headers, record counts, custom field columns, and empty columns (deprecated fields). We flag any SoulCRM custom fields that have zero usage across records as candidates for exclusion from migration to keep the destination schema clean. The output of this step is a SoulCRM field inventory mapped to a preliminary Twenty field list.

  2. Twenty workspace schema setup

    Before any data loads, we configure the Twenty workspace: custom fields are created on Company, Person, and Opportunity objects to capture SoulCRM's India-specific data (GST identifiers, regional segments, pricing tiers). Opportunity stage values are configured to match SoulCRM's pipeline stage names. If the customer is using Twenty's self-hosted deployment, we verify the installed version is stable and that the database migration has completed successfully. For managed cloud deployments, we confirm workspace provisioning and API access.

  3. CSV transform and dependency ordering

    We transform each SoulCRM CSV into Twenty's import format. SoulCRM custom field column names are mapped to the corresponding Twenty custom field API names. Date formats are normalized to ISO 8601. Email addresses are set as the deduplication key for Person imports. The import order is enforced: Companies CSV first, then Contacts/Leads, then Deals/Opportunities, then Activities last. Any SoulCRM owner email references are flagged for User reconciliation.

  4. User reconciliation

    We extract every distinct SoulCRM Owner email from the CSV exports and match against Twenty's User list. Owners without a matching Twenty User are added to a reconciliation queue. The customer's admin provisions the missing Twenty Users (with correct roles and team assignments) before record import continues. Owner resolution is required because Contact, Company, and Deal imports carry owner references that must resolve at insert time in Twenty.

  5. Staged import and reconciliation

    We run a staged import into Twenty following the dependency order: Companies first (via Twenty's Companies API), then Persons from Contacts and Leads (via the Person API with is_organization=false), then Opportunities from Deals (via the Opportunity API with Company and Person lookups resolved), then Activities (via the TimelineEvent or Task API). Each phase emits a row-count and field-coverage reconciliation report. We perform spot-checks on 20-30 records per module comparing source and destination values before advancing to the next phase.

  6. Cutover, validation, and workflow handoff

    After all modules are imported and reconciled, we freeze SoulCRM as the system of record and run a final delta migration for any records modified during the cutover window. We validate record counts across all modules and confirm that primary fields (name, email, phone, stage, amount) match the source data within a tolerance of less than one percent error. We deliver the SoulCRM automation inventory document to the customer's admin for workflow rebuild in Twenty's workflow builder. We provide a one-week hypercare window for reconciliation issues. We do not rebuild SoulCRM workflows as Twenty workflows as standard scope.

Platform deep dives

Context on both ends of the pair

SoulCRM logo

SoulCRM

Source

Strengths

  • Free tier provides basic CRM access for small teams to get started without financial commitment.
  • All-in-one platform reduces tool sprawl by covering sales, marketing, purchase, and support in one system.
  • Cloud-based architecture enables access from any location, suitable for distributed Indian sales teams.
  • Integrated telephony and email capture consolidate communication data within customer records.
  • Pricing in INR with per-user model aligns with typical Indian SMB procurement patterns.

Weaknesses

  • Minimal public presence on major review platforms limits independent validation of product quality.
  • Limited API documentation makes third-party integrations and automated migration more complex.
  • Small team size raises questions about long-term product support and feature development roadmap.
  • SMB focus may not scale for mid-market companies requiring advanced automation or complex workflows.
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. 3 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 SoulCRM and Twenty CRM.

  • Object compatibility

    B

    3 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

    SoulCRM: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most SoulCRM to Twenty CRM migrations land between three and five weeks for accounts under 15,000 records across Companies, Contacts, and Deals with no active custom objects or large activity histories. The manual CSV export step from SoulCRM adds time that API-based migrations do not have. Migrations with large activity histories (over 200,000 activity records), many Marketing Module campaigns, or multiple India-specific custom fields move to seven to eleven weeks because of the additional transform work and schema setup required for custom field mapping.

Adjacent paths

Related migrations to explore

Ready when you are

Move from SoulCRM.
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