CRM migration
Field-level mapping, validation, and rollback between Kinabase and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Kinabase
Source
Twenty CRM
Destination
Compatibility
10 of 12
objects map 1:1 between Kinabase and Twenty CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Kinabase stores data as a flat, user-defined Collection-and-Record model where each Collection is its own entity type with typed Fields and cross-collection references. Twenty CRM uses a conventional CRM object model (People/Contacts, Companies, Opportunities, Tasks, Notes) with a REST API built in TypeScript/Next.js. These architectural differences make the migration structural: every Kinabase Collection must be classified as a standard Twenty CRM object or a custom object, and every Field must be mapped to a typed field or flagged for post-migration rebuild. We export via Kinabase's admin CSV panel or Bearer-token API (100 req/min), resolve linked-collection references in dependency order, evaluate Computed Fields to static values before writing, and deliver a written workflow and automation inventory for the customer's admin to rebuild in Twenty. We do not migrate Views, Filters, or integration configurations (Microsoft 365, Entra ID SSO).
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 Kinabase 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.
Kinabase
Collection (generic CRM type)
Twenty CRM
Contact or Company
1:1A Kinabase Collection whose Fields map to standard contact attributes (name, email, phone, address) maps to Twenty CRM's Person object (API name Person). Collections with company-level attributes (legal name, domain, industry, employee count) map to Twenty CRM's Company. We classify each Collection during the pre-migration field audit and assign a mapping type before any export begins.
Kinabase
Collection (project or deal type)
Twenty CRM
Opportunity
1:1Kinabase Collections representing deals, projects, or engagements map to Twenty CRM Opportunity. Stage Fields in the Collection map to the Opportunity stageName field. Amount Fields map to amount, and owner assignment maps to the User resolved from the Collection's assigned-user field.
Kinabase
Collection (custom entity)
Twenty CRM
Custom Object
1:1Any Kinabase Collection that does not fit a standard Twenty CRM object maps to a Twenty custom object. We pre-create the custom object schema via the /metadata API (Twenty v0.26+) before migration, including all custom Fields typed as text, number, date, boolean, or relation. Each custom Field gets a unique name matching the source Collection Field with an underscore suffix if a naming conflict exists.
Kinabase
Record
Twenty CRM
Contact, Company, Opportunity, or Custom Object record
1:1Individual Kinabase Records migrate as rows in the corresponding Twenty CRM object. We map field values by type: text fields to text, numbers to number, dates to date, and dropdown selections to Twenty's select or multiselect type. Null values and empty strings are handled explicitly to avoid unexpected required-field failures on insert.
Kinabase
Linked Collection Field (cross-collection reference)
Twenty CRM
Relation field or lookup field
1:1A Kinabase linked-collection field (e.g., a 'Client' field in a 'Projects' Collection pointing to a 'Clients' Collection record) creates a foreign-key dependency. We export linked Collections in dependency order: parent Collections first, then child Collections. The foreign key value is written as a relation ID in Twenty's custom object relation field. If the target Twenty custom object does not yet exist, the reference is stored as a text field (original_record_id__c) and resolved during a second pass after the parent object is created.
Kinabase
Computed Field
Twenty CRM
Static text or number field
lossyKinabase Computed Fields evaluate a formula expression at display time; the formula itself is not stored data. We evaluate each formula at migration time using the stored operand values and write the resulting scalar value as a static text or number field in Twenty CRM. The formula is not preserved. We flag every Computed Field in the pre-migration audit with a note that the result value transfers but the expression does not.
Kinabase
Activities (email, call, meeting logged as sub-Records)
Twenty CRM
Task, Note, or TimelineEntry
1:1Kinabase activity records stored as sub-Records or typed Fields in a Collection (e.g., a 'Interactions' linked Collection or timestamp Fields) map to Twenty CRM Task or Note. Call duration maps to a custom duration field, meeting location maps to a note body, and timestamps are preserved as the ActivityDate on the target Twenty record.
Kinabase
Task (standalone work item)
Twenty CRM
Task
1:1Kinabase standalone Tasks map directly to Twenty CRM Task. We preserve assignee, due date, status (open, completed), and any linked-record reference via the Relation field. Task body or description maps to the note field on Twenty Task.
Kinabase
Document (file attachment)
Twenty CRM
Attachment reference or Note with URL
1:1File attachments linked to Kinabase Records are exported as filename and reference URL only. Twenty CRM does not include file attachments in CSV imports — they must be re-uploaded manually, migrated via API, or handled through a partner-assisted migration. We export the file association as a text field pointing to the original URL or filename for the customer's admin to re-attach post-migration.
Kinabase
Stage (pipeline status Field)
Twenty CRM
stageName on Opportunity or status on Custom Object
lossyKinabase stage Fields (Draft, In Progress, Approved, Closed) are categorical values. We map them to Twenty's stageName picklist on Opportunity for deal-type Collections, or to a custom status select field on custom objects for non-deal Collections. The stage values are preserved verbatim; the visual pipeline representation does not transfer.
Kinabase
Owner (user assignment)
Twenty CRM
User
1:1Kinabase owner fields reference a user in the platform. We match by email against the Twenty CRM workspace User list. Any Kinabase Owner without a matching Twenty User is held in a reconciliation queue for the customer's admin to provision before the record import phase. If a Twenty workspace is self-hosted and has no Users yet, we advise provisioning at least one admin User before migration begins.
Kinabase
Workflow, automation, trigger rule
Twenty CRM
Written inventory (no automation migration)
1:1Kinabase Workflows define stage progression, trigger-based rules, and scheduled actions. Twenty CRM does not replicate Kinabase's workflow engine. We capture the full workflow definition — triggers, conditions, actions, and stage maps — as a structured JSON inventory document and deliver it to the customer's admin for rebuild as a documented reference. Automated actions, notifications, and approval gates are not migrated.
| Kinabase | Twenty CRM | Compatibility | |
|---|---|---|---|
| Collection (generic CRM type) | Contact or Company1:1 | Fully supported | |
| Collection (project or deal type) | Opportunity1:1 | Fully supported | |
| Collection (custom entity) | Custom Object1:1 | Fully supported | |
| Record | Contact, Company, Opportunity, or Custom Object record1:1 | Fully supported | |
| Linked Collection Field (cross-collection reference) | Relation field or lookup field1:1 | Fully supported | |
| Computed Field | Static text or number fieldlossy | Fully supported | |
| Activities (email, call, meeting logged as sub-Records) | Task, Note, or TimelineEntry1:1 | Fully supported | |
| Task (standalone work item) | Task1:1 | Fully supported | |
| Document (file attachment) | Attachment reference or Note with URL1:1 | Fully supported | |
| Stage (pipeline status Field) | stageName on Opportunity or status on Custom Objectlossy | Fully supported | |
| Owner (user assignment) | User1:1 | Fully supported | |
| Workflow, automation, trigger rule | Written inventory (no automation migration)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.
Kinabase gotchas
API access gated behind a support request
100 req/min rate limit slows large exports
Computed Field values are not stored data
Linked collection fields require relationship re-establishment
Only administrators can export all data
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 Kinabase credential procurement
We audit every Kinabase Collection in the workspace: record counts, Field types (text, number, date, dropdown, computed, linked collection), and any Workflow definitions. We simultaneously initiate the Kinabase API credential request by emailing [email protected] with the workspace domain and required access scope. If API access is delayed beyond five business days, we confirm admin CSV export is available as the fallback data source. The discovery output is a written Collection inventory with a preliminary object classification (Contact, Company, Opportunity, or custom object) for each Collection.
Twenty CRM schema provisioning
We verify the Twenty CRM workspace is running a version that supports custom objects (v0.26+). For each Collection classified as custom object, we call the /metadata API to create the object schema with all Fields typed to match Kinabase's field types. We create relation fields for any linked-collection reference and configure the dropdown picklist values for stage and status Fields to match the Kinabase source values. Schema is deployed to a staging workspace first for validation.
Data export in dependency order
We export Kinabase Collections in topological dependency order: Collections with no linked-collection inbound references export first, then Collections whose linked-collection references point only to already-exported Collections. Each Collection is exported as a separate CSV via the admin panel or paginated API calls (100 req/min rate limit enforced with backoff). Computed Field formulas are evaluated at export time and their resulting values appended as static columns. The export phase emits a per-Collection row count and field count report.
Transformation and field mapping
We transform each exported CSV against the Twenty CRM target schema: field names are mapped, field types are converted (Kinabase dropdown to Twenty select, Kinabase date strings to ISO-8601 timestamps), linked-collection IDs are resolved to Twenty record IDs from the staging load, and Computed Field result values are written to their designated static fields. Any field that cannot be represented 1:1 in Twenty is flagged in the mapping matrix with a recommendation (custom field, text denormalisation, or skip). Multi-select dropdown values are flattened to Twenty's multiselect format.
Staging migration and reconciliation
We load the transformed data into a Twenty CRM staging workspace using CSV import or API upsert calls. The customer reconciles record counts, spot-checks 25-50 records against the Kinabase source, and validates that linked-collection relationships appear correctly as relation fields. Any mapping corrections are documented and applied to the production transform before the next phase. The staging phase must complete with sign-off before production migration begins.
Production migration and cutover
We run production migration in dependency order: standard CRM objects (People/Contacts, Companies, Opportunities) first, then custom objects, then activity and task history. Linked-collection references are resolved against the staging ID map. We freeze writes in Kinabase during the cutover window, run a final delta export of any records modified during migration, and close out the import. We deliver the Workflow inventory document, the file-attachment reconciliation report, and a post-migration validation checklist to the customer's admin. We do not rebuild Kinabase Workflows or automations in Twenty CRM as part of standard scope.
Platform deep dives
Kinabase
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 Kinabase 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
Kinabase: 100 requests per minute.
Data volume sensitivity
Kinabase 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 Kinabase to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Kinabase 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 Kinabase
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.