CRM migration
Field-level mapping, validation, and rollback between Kylas Sales CRM and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Kylas Sales CRM
Source
Twenty CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Kylas Sales CRM and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Kylas Sales CRM to Twenty CRM is a structural migration from a commercial Indian-origin SaaS platform to an open-source, self-hostable CRM with a documented GraphQL API. Kylas uses a distinct Lead pre-conversion object alongside Contacts and Companies; Twenty consolidates these into Person (for individuals) and Company (for organizations) as its two core standard objects, with no built-in Lead-to-Contact conversion workflow. We map Kylas Leads with a lead_score or unconverted status to a Twenty Person record with a custom lead_source property, preserving the original Kylas lifecycle stage in a custom field for audit and reporting. Kylas Deals map to Twenty Opportunities with pipeline stage names remapped to Twenty stage values. Kylas workflow automations, Smart Lists, and custom integrations do not migrate; we deliver a written inventory of every active automation and Smart List filter so the customer's team can rebuild them in Twenty or document them for an automation partner. The self-hosted deployment model of Twenty introduces infrastructure decisions that Kylas customers on a flat-rate SaaS plan do not face; we address storage, hosting, and API rate-limit considerations in the scoping phase.
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 Kylas Sales 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.
Kylas Sales CRM
Lead
Twenty CRM
Person (custom field)
1:1Kylas Lead records map to Twenty Person records with a custom field kylas_lead_source__text storing the original lead_source value and a custom field kylas_lead_score__number preserving any numeric score. Kylas lead status (New, Contacted, Qualified, Unqualified) maps to a custom picklist kylas_lead_status__picklist on the Person object. Since Twenty has no built-in Lead conversion workflow, converted Kylas Leads retain their Person record; the customer's team configures any follow-up conversion logic post-migration.
Kylas Sales CRM
Contact
Twenty CRM
Person
1:1Kylas Contact records map directly to Twenty Person records. Email, phone, address, job title, and lifecycle-stage metadata transfer to the corresponding Twenty Person fields. Custom fields on Kylas Contacts (beyond the standard set) are created in Twenty via the /metadata API before import and mapped by field type. Kylas Contact-to-Company linkage transfers as a Twenty Person-to-Company relation.
Kylas Sales CRM
Company
Twenty CRM
Company
1:1Kylas Company records map to Twenty Company records with industry classification, company size, and domain data preserved. The Kylas industry picklist values are remapped to Twenty industry picklist equivalents. Multi-currency settings from Kylas (relevant for companies with international operations) are stored as a custom field in Twenty since Twenty's self-hosted model handles currency display at the deployment level.
Kylas Sales CRM
Deal
Twenty CRM
Opportunity
1:1Kylas Deals map to Twenty Opportunities. The deal value transfers to the Opportunity amount field, the expected close date maps to closeDate, and the pipeline stage name maps to a Twenty Opportunity stage. Kylas pipeline names (if multiple exist) map to a custom Opportunity field pipeline_name__text for segmentation. Closed-won and closed-lost reasons from Kylas custom fields become Twenty custom fields for deal retrospective analysis.
Kylas Sales CRM
Pipeline
Twenty CRM
Opportunity Stage (configuration)
lossyKylas named Pipelines with custom stage sets map to Twenty Opportunity stage configurations. We extract every unique stage name from every Kylas pipeline and create matching stage values in Twenty's Opportunity settings. If a Kylas pipeline exceeds Twenty's practical stage count, we consolidate low-volume stages into a catch-all stage and document the mapping for the customer's review.
Kylas Sales CRM
Activity (Task, Call, Note)
Twenty CRM
Task, Comment
1:1Kylas Activity records (Tasks, Calls, Notes attached to Leads, Contacts, Deals, and Companies) map to Twenty Task records and Comment records. The activity type determines the mapping: Kylas task engagements become Twenty Tasks with status and due date preserved; Kylas call logs become Twenty Tasks with a custom call_duration__number field; Kylas notes become Twenty Comment records linked to the parent Person or Company. Activity timestamps are preserved as the Task createdAt date.
Kylas Sales CRM
Custom Fields (all objects)
Twenty CRM
Custom Fields
lossyKylas custom fields on any object are exported with their field type, picklist value IDs, and current values. We create matching custom fields in Twenty via the /metadata API before data import. Picklist value IDs from Kylas are remapped to Twenty picklist labels, and a custom field kylas_original_field_name__text is added to preserve traceability. Custom field migration is a pre-requisite step executed before any record import.
Kylas Sales CRM
Documents
Twenty CRM
Attachment (via API)
1:1Documents stored in Kylas are exported as binary blobs with parent record associations. Twenty supports file attachments via its API; we map Kylas documents to Twenty attachments linked to the corresponding Person or Company record. Very large document stores (over 5 GB of attachments) require a separate storage provisioning step and may extend the migration timeline by one to two weeks.
Kylas Sales CRM
Tag
Twenty CRM
Label (Label2)
lossyKylas tags apply across objects as a cross-object labeling system. Twenty uses Label2 for tagging entities. We export the full Kylas tag vocabulary and map each tagged record to a Twenty Label2 with the same name. Tags that apply to both Persons and Companies create multiple Label2 relations on the respective records.
Kylas Sales CRM
User (Owner)
Twenty CRM
WorkspaceMember
1:1Kylas user records (name, email, role, profile) are exported and mapped to Twenty WorkspaceMember records. We match by email as the primary key. Inactive Kylas users become inactive WorkspaceMembers in Twenty pending the customer's decision to re-activate. Owner assignment on Deals, Activities, and Contacts resolves by matching the Kylas owner email to the Twenty WorkspaceMember after user provisioning.
Kylas Sales CRM
Smart Lists
Twenty CRM
SavedFilter (documentation only)
1:1Kylas Smart Lists are dynamic saved searches with filter criteria evaluated at display time; they have no persistent record set to export. We document every Smart List's filter criteria (field names, operators, values) in a written inventory so the customer's team can recreate the logic using Twenty's filter and view system. This is not a data migration; it is a configuration inventory delivery.
Kylas Sales CRM
Workflow Automation
Twenty CRM
Workflow (documentation only)
1:1Kylas workflow automation rules (triggers, conditions, action sequences) are not exposed via the export API. We perform a UI-assisted audit of every active Kylas automation and document it in a written inventory specifying the trigger object, conditions, and action sequence. The customer's team uses this document to rebuild automations in Twenty or via an external automation tool. This is not a code migration; it is a rebuild blueprint.
| Kylas Sales CRM | Twenty CRM | Compatibility | |
|---|---|---|---|
| Lead | Person (custom field)1:1 | Fully supported | |
| Contact | Person1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Pipeline | Opportunity Stage (configuration)lossy | Fully supported | |
| Activity (Task, Call, Note) | Task, Comment1:1 | Fully supported | |
| Custom Fields (all objects) | Custom Fieldslossy | Fully supported | |
| Documents | Attachment (via API)1:1 | Mapping required | |
| Tag | Label (Label2)lossy | Fully supported | |
| User (Owner) | WorkspaceMember1:1 | Fully supported | |
| Smart Lists | SavedFilter (documentation only)1:1 | Not supported | |
| Workflow Automation | Workflow (documentation only)1: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.
Kylas Sales CRM gotchas
Record storage caps gate migration scope
Smart List filter criteria are non-exportable
Workflow automation rules cannot be transferred
API lacks publicly documented rate limits
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
Discovery and data audit
We audit the source Kylas account across all active objects: Leads, Contacts, Companies, Deals, Activities (Tasks, Calls, Notes), Documents, Tags, Custom Fields, and Pipelines. We extract record counts per object, identify custom field definitions and picklist value sets, flag any Kylas objects approaching the plan record cap, and inventory active workflow automations and Smart Lists via a UI-assisted walkthrough. The discovery output is a written migration scope document covering object counts, schema complexity, and which items require a configuration inventory versus an actual data migration.
Twenty workspace provisioning and schema design
We provision a Twenty workspace (self-hosted instance or the twenty.com hosted option depending on the customer's deployment choice) and design the destination schema. This includes creating all custom fields via the /metadata API, configuring Opportunity stages to match the Kylas pipeline stages, setting up industry and status picklist values, and designing the Person and Company field layout. Schema is validated in the staging workspace before any production migration step.
Owner reconciliation and workspace member provisioning
We extract every distinct Kylas user referenced as an Owner on Deals, Contacts, Companies, and Activities and match them by email against the Twenty workspace member list. The customer provisions any missing Twenty WorkspaceMembers before record import begins. Inactive Kylas users are flagged for the customer's decision on whether to include them as historical assignees in Twenty.
Staging migration and reconciliation
We run a full migration into the staging Twenty workspace using production-like data volume. The customer reconciles record counts (Persons, Companies, Opportunities, Tasks) against the Kylas source, spot-checks 25-50 records for field-level accuracy, and reviews the opportunity pipeline stage mapping. Any schema corrections, picklist value gaps, or field mapping errors are resolved in staging before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: WorkspaceMembers (validated), Companies (from Kylas Companies), Persons (with Lead fields and Contact fields merged by email deduplication), Opportunities (with stage, amount, close date, and owner resolved), Tasks and Comments (activity history via Twenty API), Labels (tag migration), and Documents (file attachments). Each phase emits a row-count reconciliation report. We use conservative throttling against the Twenty GraphQL API and monitor for error responses.
Cutover, validation, and automation inventory handoff
We freeze Kylas writes during cutover, run a final delta migration of any records modified during the migration window, then enable Twenty as the system of record. We deliver the Workflow Automation Inventory and Smart List Filter Criteria document to the customer's team. We support a one-week hypercare window for reconciliation issues. We do not rebuild Kylas automations or Smart Lists inside the migration scope; those are documented for the customer's team to rebuild in Twenty using their own resources or an automation partner.
Platform deep dives
Kylas Sales CRM
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 Kylas Sales CRM and Twenty CRM.
Object compatibility
2 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
Kylas Sales CRM: Not publicly documented.
Data volume sensitivity
Kylas Sales CRM 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 Kylas Sales CRM to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Kylas Sales CRM 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 Kylas Sales CRM
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.