CRM migration

Migrate from Freshsales to Twenty CRM

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

Freshsales logo

Freshsales

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

70%

7 of 10

objects map 1:1 between Freshsales and Twenty CRM.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Try the reverse

Twenty CRM
Freshsales

Overview

What this migration involves

Moving from Freshsales to Twenty CRM is a structural migration driven by ownership economics and data sovereignty rather than feature parity. Freshsales uses separate Lead and Contact objects with lifecycle stages; Twenty consolidates both into a single Person record with a lifecycle_type field. We resolve that split during scoping, preserving the original lifecycle stage for reporting continuity. Twenty is self-hosted and free under the AGPL-3.0 license, making per-seat pricing irrelevant after migration; infrastructure costs (a VPS, roughly $50-200/month) replace Freshsales subscriptions that scale at $9-$59/user/month. Workflows, sales sequences, Freddy AI scoring, and Freshsales' built-in telephony do not migrate. We deliver a written workflow inventory for manual rebuild in Twenty, flag the absence of native phone integration, and note that Twenty's analytics module requires coupling with an external BI tool for reporting parity with Freshsales Pro and above.

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

Freshsales logo

Freshsales

What's pushing teams away

  • The UI is described as difficult to navigate with poor documentation on integrations, and reporting lacks the depth available in HubSpot.
  • AI features like Freddy AI scoring and deal predictions are locked behind the Pro $39/user/month tier despite heavy marketing of AI capabilities.
  • Bot sessions are limited to 500 one-time with no monthly refresh, and phone calls incur per-minute charges that add up for global teams.
  • Post-migration from Freshsales Classic, outgoing emails are disabled, workflows and sequences do not execute, and DNS records must be reconfigured.

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

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

Freshsales

Lead

maps to

Twenty CRM

Person

1:1
Fully supported

Freshsales Leads with a lifecycle stage of New, Open, or Unqualified map to Twenty Person records with lifecycle_type set to lead. The original Freshsales lifecycle stage is preserved in a custom field for reporting continuity. We import Leads first so that the migration creates Person records before any Contacts are mapped, preventing duplicate entries when a Freshsales Lead has the same email as an existing Contact.

Freshsales

Contact

maps to

Twenty CRM

Person

1:1
Fully supported

Freshsales Contacts map to Twenty Person records with lifecycle_type set to customer (or the equivalent stage from the Freshsales lifecycle matrix). The contact's linked Account becomes a Company lookup in Twenty. We preserve the Freshsales contact type, job title, phone, email, and any custom fields on the Person record. After migration, the Freshsales distinction between Lead (pre-conversion) and Contact (post-conversion) collapses into a single Person object with a lifecycle_type field for segmentation.

Freshsales

Account

maps to

Twenty CRM

Company

1:1
Fully supported

Freshsales Accounts map directly to Twenty Companies. The account name becomes the Company name; the domain field maps to the website URL; address fields transfer in full. We import Companies before Contacts so that the Person-to-Company relationship (stored as a company_id foreign key on the Person record in Twenty) is satisfied at insert time. Multi-address accounts are flattened to the primary address in Twenty with secondary addresses noted in a custom field.

Freshsales

Deal

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Freshsales Deals map to Twenty Opportunities. The deal name becomes the Opportunity name, amount transfers directly, and pipeline stage maps to Twenty's stage field using the customer-defined stage names from the Freshsales pipeline configuration. The probability percentage transfers as a custom field if Twenty's stage-based defaults do not match the customer's original probabilities. The deal owner resolves to a Twenty workspace member by email match.

Freshsales

Pipeline

maps to

Twenty CRM

Pipeline

lossy
Fully supported

Freshsales pipeline configurations (multiple pipelines available on Pro and above) map to Twenty Pipeline records. Each Freshsales pipeline becomes a distinct Twenty Pipeline with its stage sequence preserved. Stage order, stage names, and stage-level probabilities transfer. Closed-Lost and Closed-Won stages are retained in Twenty even though they may represent a different set of final states than Freshsales.

Freshsales

Product

maps to

Twenty CRM

Standard Object (customizable)

1:1
Fully supported

Freshsales Products map to a custom object in Twenty that we name Products to match the source terminology. Product name, SKU (hs_sku equivalent), unit price, and description transfer. Products are imported before Deals so that line items can reference product records by ID during Deal migration. If the customer uses Freshsales CPQ for quotes, the CPQ license flag is noted and the customer is advised to evaluate Twenty's third-party quoting integrations or custom object setup for quote management.

Freshsales

Custom Field (Leads, Contacts, Accounts, Deals)

maps to

Twenty CRM

Custom Field (Person, Company, Opportunity)

lossy
Fully supported

Freshsales custom fields (plan-gated: basic on Growth, advanced on Pro and Enterprise) map to Twenty's customizable field system. We read all custom field definitions from the Freshsales API during scoping, then pre-create matching fields in Twenty before data import. Field types are mapped: text fields to text, number fields to number, date fields to date, dropdown fields to select or multi-select, and checkbox fields to boolean. Custom field values migrate as values, not as field definitions. If a Freshsales custom field uses an advanced type only available on Pro or Enterprise, we flag it for review during scoping.

Freshsales

Activities (Tasks and Events)

maps to

Twenty CRM

Tasks and Comments

1:1
Mapping required

Freshsales Tasks map to Twenty Tasks with subject, status, due date, and owner preserved. Freshsales Events (calendar appointments) map to Twenty Tasks with a meeting type flag since Twenty does not have a native Event object. Call logs from Freshsales telephony migrate as Twenty Tasks with a call type flag and duration field. We resolve task assignees by email match against the Twenty workspace member list. Event attendees are noted in the task description field.

Freshsales

Attachments

maps to

Twenty CRM

Attachments (re-upload required)

1:1
Mapping required

Freshsales file attachments are associated with Contact, Account, and Deal records. Twenty does not natively support file attachment imports via CSV. We flag every attachment with its source URL (from Freshsales), record association, file name, and size in a migration inventory. Customers have three options: re-upload manually post-migration, use the Freshsales API to download attachments and push them to Twenty's storage layer via a custom script, or engage FlitStack AI for an assisted API-based attachment migration. We do not include manual re-uploads in standard scope but document the process.

Freshsales

Territory

maps to

Twenty CRM

Custom Field on Person or Opportunity

lossy
Fully supported

Territory management is a Pro-tier feature in Freshsales. Territory assignments do not map to a native Twenty object because Twenty does not have a territories module. We preserve territory data as a custom field (territory__c) on the relevant Person and Opportunity records during migration. If the customer relies heavily on territory-based assignment rules, we document the territories as a named-values list and advise on using Twenty's filter views and bulk assignment capabilities as a manual workaround.

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.

Freshsales logo

Freshsales gotchas

Medium

Freddy AI is Pro-tier only despite heavy marketing

High

Post-migration emails and sequences are disabled

Medium

Bot session credits are a one-time 500-session allocation

Medium

Phone credits charged per minute with no cap

Low

File storage limits scale with plan tier

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

  • Twenty has no workflow or automation engine

    Twenty CRM currently lacks a native workflow automation system. Freshsales Advanced Workflows (Pro tier) and Sales Sequences (Pro tier) do not have a migration target in Twenty. We do not create automation logic as code during migration. We deliver a written inventory of every Freshsales workflow and sequence with its trigger, conditions, and actions so that the customer's admin can manually rebuild them using Twenty's filter-based task assignment and manual routing. This is the highest-severity gap for teams migrating from Freshsales Pro or Enterprise and must be addressed during scoping before migration proceeds.

  • Analytics requires a third-party BI tool

    Twenty's analytics and reporting module is under active development and described by the Twenty team as a known gap for larger sales teams. Community members on r/selfhosted recommend coupling Twenty with Metabase or another BI tool for reporting parity. Freshsales Pro and Enterprise reporting (custom reports, pipeline analytics, sales metrics) will not be available in Twenty without a supplemental analytics setup. We flag reporting as a post-migration configuration item and advise customers to evaluate their reporting requirements against Twenty's current capabilities during scoping.

  • Freddy AI scoring and deal predictions have no equivalent

    Freddy AI contact scoring and deal predictions are Freshsales Pro-tier features. Twenty CRM does not currently offer AI-powered contact scoring or deal prediction. Any AI-generated fields (freddy_score, deal_prediction) in the Freshsales migration scope will not have a destination equivalent. We flag these fields during scoping, preserve the raw score values in a custom field if the customer wants the data retained, and note that the functional capability (AI scoring) will need to be replaced with a third-party AI scoring integration or manual scoring rules after migration.

  • Bot sessions and per-minute phone credits are irretrievable

    Freshsales bot session credits are a one-time 500-session allocation with no rollover. Per-minute phone credits are consumed at $0.02/min domestic and cannot be refunded or transferred. Neither bot sessions nor phone credits transfer to Twenty CRM, which has no native bot or telephony module. We capture the remaining credit balance during scoping and include it in the migration inventory so the customer can assess any refund eligibility with Freshworks support before the account is deactivated. Third-party VoIP integration (Twilio, Asterisk) is the recommended path for teams that need phone capability post-migration.

  • File attachments require re-upload or custom migration

    Twenty's CSV-based import does not support file attachments. The Twenty documentation explicitly states that file attachments are not included in CSV exports and must be re-uploaded manually, migrated via API, or handled through implementation assistance. We sample attachment volumes during scoping and estimate the re-upload effort for the customer's team. For migrations where the attachment volume is large (over 1,000 files) or the files include signed documents with compliance retention requirements, we offer a separate API-based attachment migration engagement.

Migration approach

Six steps for a successful Freshsales to Twenty CRM data migration

  1. Discovery and scoping

    We audit the source Freshsales account across plan tier, record counts (Leads, Contacts, Accounts, Deals, Products), custom field definitions, pipeline count and stage configurations, activity volume (tasks, events, notes), attachment inventory, and any active workflows or sequences. We identify Pro-tier features (Freddy AI, territories, sequences, multiple pipelines) that will not have a destination equivalent in Twenty and document them as scope exclusions. The discovery output is a written migration scope with record counts, object mapping, and a list of pre-migration configuration items for the customer to address.

  2. Schema design and custom field setup

    We create the destination schema in Twenty. This includes setting up Company records (mapped from Freshsales Accounts), Person records (mapped from Freshsales Leads and Contacts with the lifecycle_type field configured), and Opportunity records (mapped from Freshsales Deals with pipeline stages and probabilities). All Freshsales custom field definitions are re-created in Twenty with matching types. If the customer has multiple Freshsales pipelines, we create corresponding Twenty Pipelines with matching stage sequences. We deploy the schema to a staging environment for validation before production migration begins.

  3. Data cleanup and deduplication

    We sample the Freshsales data for duplicates (Contacts with identical email addresses, Accounts with identical domain names), empty records (Contacts with no email or phone, Deals with zero amount and no activity), and stale data (closed Deals older than a customer-defined threshold). We present findings to the customer with recommended exclusion criteria. Data cleanup consumes 20-30% of total migration project time on average. Skipping cleanup means carrying duplicates and noise into Twenty, where they affect reporting and segmentation from day one.

  4. Sandbox migration and reconciliation

    We run a full migration into Twenty using production-like data volume. The customer reconciles record counts (Persons imported, Companies imported, Opportunities imported), spot-checks 25-50 random records against the Freshsales source, and validates that Person-to-Company relationships are correctly linked. Any field mapping corrections are captured and applied before the production migration begins. This step catches silent mapping errors that would otherwise appear post-launch.

  5. Production migration in dependency order

    We run production migration in record-dependency order: Companies first (from Freshsales Accounts), Persons second (from Freshsales Leads and Contacts with the lifecycle_type split applied), Opportunities third (with the pipeline and stage mappings resolved), Tasks fourth (with assignee resolved by email match), and custom field values last (as a field update pass). Each phase emits a row-count reconciliation report before the next phase begins. We run a final delta migration of any records created or modified during the migration window before cutover.

  6. Cutover, validation, and workflow inventory handoff

    We freeze Freshsales writes during cutover, run a final delta sync, then enable Twenty as the system of record. We deliver the workflow and sequence inventory document to the customer's admin, listing every Freshsales workflow and sequence with its trigger, conditions, actions, and a recommended manual rebuild approach in Twenty. We do not rebuild workflows in Twenty as part of the migration scope. We support a one-week hypercare window for reconciliation issues. We do not provide ongoing admin support, training, or workflow rebuild as standard scope.

Platform deep dives

Context on both ends of the pair

Freshsales logo

Freshsales

Source

Strengths

  • Generous free tier for small teams with core CRM functionality without per-seat costs.
  • All-in-one sales CRM with built-in telephony, chat, and email reducing third-party tool dependency.
  • Freddy AI contact scoring and deal predictions available on Pro tier.
  • Multiple pipeline views with Kanban and list options across all plans.

Weaknesses

  • Reports lack depth compared to competitors like HubSpot, with limited customization options.
  • Integration setup is poorly documented with no clear guides for connecting third-party tools.
  • AI features gated behind $39/user/month Pro tier despite marketing emphasis on Freddy AI.
  • Bot sessions limited to 500 one-time allocation with no monthly refresh.
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. 2 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 Freshsales and Twenty CRM.

  • Object compatibility

    B

    2 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

    Freshsales: Not publicly documented on Freshworks CRM; Freshdesk docs reference rate limits but Freshsales-specific limits are undocumented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Small migrations under 10,000 records (Contacts, Accounts, and Deals combined) can be completed in a few days to two weeks. Mid-size migrations (10,000-50,000 records) with custom fields and multiple pipelines typically take two to four weeks. Migrations with large activity histories (over 100,000 tasks and events) or complex custom field schemas extend to four to eight weeks. The timeline depends more on data quality and schema complexity than on record count alone.

Adjacent paths

Related migrations to explore

Ready when you are

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