CRM migration
Field-level mapping, validation, and rollback between SwiftCRM and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
SwiftCRM
Source
Twenty CRM
Destination
Compatibility
8 of 10
objects map 1:1 between SwiftCRM and Twenty CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from SwiftCRM to Twenty CRM is a migration from a small-team Apple-native CRM in public beta to an open-source, self-hostable CRM with a production-quality React interface and GraphQL API. SwiftCRM does not publish a public REST API, so we extract data via available CSV exports or direct database access, then validate the schema against a snapshot taken near migration day to handle any beta-stage field changes. We map SwiftCRM Contacts to Twenty People, Appointments to Events or Tasks, and preserve the client-record relationships throughout. E-documents migrate as file attachments to the corresponding People record. We do not migrate automations or notification rules; these require rebuilding in Twenty's workflow system post-migration. Custom fields audit and relationship mapping follow standard scoping before any records move.
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 SwiftCRM 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.
SwiftCRM
Contact
Twenty CRM
People
1:1SwiftCRM Contact records map directly to Twenty People. Name fields (first name, last name), phone, email, address, and any Face ID-protected custom properties migrate as standard People fields or custom fields pre-created in Twenty Settings → Data Model. Relationship metadata from SwiftCRM's relationship tracking (family, business) migrates to custom contact properties or custom field types in Twenty's People object. We preserve the SwiftCRM contact identifier in a custom field swiftcrm_id__c for cross-system audit.
SwiftCRM
Company/Organization
Twenty CRM
Company
1:1SwiftCRM stores organization context within Contacts rather than as a separate Company object. During scoping we assess whether the customer uses organizational groupings; if so, we split these into Twenty's Company records and link People via the workEmail domain or a manual organization field. If no formal company structure exists in SwiftCRM, People records are created without a Company link.
SwiftCRM
Appointment
Twenty CRM
Event or Task
1:1SwiftCRM Appointments migrate to Twenty Event records when they represent scheduled calendar entries (with start and end timestamps). The client link preserves by resolving the SwiftCRM contact reference to the migrated Twenty People record via swiftcrm_id__c. Reminders and notification metadata from the Appointment migrate as custom fields or as Twenty Task records if the customer prefers task-based activity tracking.
SwiftCRM
Reminder
Twenty CRM
Task
1:1SwiftCRM Reminders tied to specific clients or appointments map to Twenty Task records. Status, Priority, and due date migrate directly. The SwiftCRM notification context (reminder type, recurrence) is preserved in custom Task fields. Tasks without a matching People record in Twenty are held in a reconciliation queue during scoping.
SwiftCRM
Notification
Twenty CRM
Note
1:1SwiftCRM notification history tied to client interactions migrates as Note records in Twenty, linked via ContentDocumentLink to the corresponding People record. Notification type, timestamp, and content body are stored in custom Note fields. We do not replicate the active notification delivery mechanism as Twenty does not have a native push notification system for CRM activity.
SwiftCRM
E-Doc
Twenty CRM
Attachment (ContentDocumentLink)
1:1SwiftCRM e-documents attached to client records migrate as Twenty Attachments linked to the corresponding People record via ContentDocumentLink. We export the file binary and metadata, then attach to the target record during migration. File organization structure (folders, tags) from SwiftCRM's e-doc system is preserved as a custom text field on the Attachment record for navigation reference.
SwiftCRM
Relationship
Twenty CRM
Custom Field (People)
lossySwiftCRM relationship structures between contacts (family, business) map to custom multi-select or relation-type fields on Twenty's People object. We audit the relationship types during scoping, create matching custom fields in Twenty Settings → Data Model before migration, and populate with the related People record reference where Twenty's relationship field type supports it.
SwiftCRM
Custom Field
Twenty CRM
Custom Field (People, Company, or Opportunity)
lossySwiftCRM beta-tier custom fields migrate to equivalent Twenty custom fields. Field types map to Twenty field types (text, number, date, select, multi-select, relation). We audit available custom fields during scoping, create the corresponding fields in Twenty Settings → Data Model before any record import, and flag any fields that cannot be mapped due to type incompatibility for the customer admin to resolve.
SwiftCRM
User
Twenty CRM
WorkspaceMember
1:1SwiftCRM user accounts and basic permissions map to Twenty WorkspaceMember records. We extract users by email address, invite them to the Twenty workspace during preparation, and wait for acceptance before migrating any records that carry an Owner or assignee reference. Users without an email in the destination workspace cannot have Owner lookups resolved and go to a provisioning queue.
SwiftCRM
Deal
Twenty CRM
Opportunity
1:1If SwiftCRM contains deal or opportunity-like records (closed-won pipeline tracking), these map to Twenty Opportunity. Opportunity name, amount, stage, close date, and owner migrate as standard Opportunity fields. Stage values are mapped to Twenty Opportunity stage picklist values configured before migration. If SwiftCRM has no deal object, this mapping is omitted from the migration scope.
| SwiftCRM | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | People1:1 | Fully supported | |
| Company/Organization | Company1:1 | Fully supported | |
| Appointment | Event or Task1:1 | Fully supported | |
| Reminder | Task1:1 | Fully supported | |
| Notification | Note1:1 | Fully supported | |
| E-Doc | Attachment (ContentDocumentLink)1:1 | Fully supported | |
| Relationship | Custom Field (People)lossy | Fully supported | |
| Custom Field | Custom Field (People, Company, or Opportunity)lossy | Fully supported | |
| User | WorkspaceMember1:1 | Fully supported | |
| Deal | Opportunity1: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.
SwiftCRM gotchas
No public API documentation requires manual or alternative export
Active beta status means schema may change during migration
Pricing tiers are not publicly documented
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 export capability assessment
We audit the SwiftCRM account for record counts across all objects (Contacts, Appointments, Reminders, Notifications, E-Docs, Relationships, Custom Fields, Users), the SwiftCRM beta version, and the available export methods. We confirm whether CSV export, data dump, or database access is available from the customer's account. The discovery output is a written scope, a data quality assessment, and a confirmed export path with an estimated extraction timeline.
SwiftCRM data extraction
We extract data from SwiftCRM using the confirmed export path. For CSV exports we validate field completeness and flag any empty required fields. For direct database access we run targeted queries against the SwiftCRM data store with a read-only connection, preserving the schema at extraction time. We take a schema snapshot and cross-reference it against the scoping schema to identify any beta-stage field changes that require mapping adjustments before Twenty preparation begins.
Twenty workspace preparation
We set up the Twenty workspace before any record import. This includes creating all custom objects and custom fields in Settings → Data Model, inviting all SwiftCRM users as WorkspaceMembers and confirming acceptance, and configuring Opportunity stage picklist values if SwiftCRM contains deal records. The customer admin provides the Twenty workspace URL and admin credentials for this phase.
Schema mapping and transformation
We build the field-level mapping document mapping each SwiftCRM field to its Twenty equivalent. Relationship structures map to custom People properties or relation fields. Appointment timestamps, client links, and reminder metadata map to Event or Task fields. We apply deduplication logic for any duplicate Contact records identified during the audit. All transformations run as pre-import scripts against the extracted SwiftCRM data before it enters Twenty.
Staged record migration and reconciliation
We run migration in dependency order: WorkspaceMembers first (user provisioning validated), then People records with swiftcrm_id__c preserved for relationship resolution, then Events and Tasks for Appointments and Reminders, then Attachments for E-Docs, and finally Custom Fields. Each phase emits a row-count reconciliation report. The customer reviews a random sample of migrated records against the SwiftCRM source to confirm accuracy before cutover.
Cutover, delta sync, and automation handoff
We freeze SwiftCRM writes during cutover, run a final delta migration of any records modified during the migration window, and hand over Twenty as the system of record. We deliver the automation inventory document listing every SwiftCRM notification rule, reminder, and appointment recurrence with a recommended Twenty workflow configuration. We do not rebuild automations in Twenty as part of the standard migration scope.
Platform deep dives
SwiftCRM
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 SwiftCRM 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
SwiftCRM: Not publicly documented.
Data volume sensitivity
SwiftCRM 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 SwiftCRM to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your SwiftCRM 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 SwiftCRM
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.