CRM migration
Field-level mapping, validation, and rollback between Profi and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Profi
Source
Twenty CRM
Destination
Compatibility
9 of 11
objects map 1:1 between Profi and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Profi is a client-facing coaching and session-management platform with a relatively flat data model: clients, sessions, packages, and billing records. It does not have a traditional CRM object graph with separate contact and account entities. Twenty CRM is a general-purpose CRM built on PostgreSQL with standard objects for People (contacts), Companies, Opportunities, Tasks, and Notes, plus a full REST and GraphQL API and a CSV import layer that requires fields to be pre-created in Settings → Data Model before import. The migration challenge is structural: Profi's session records have no direct Twenty equivalent — they translate to Tasks or Notes depending on whether the session is a one-off event or a recurring engagement tied to a package. Package pricing that spans multiple sessions must either be split into individual Opportunity line items or represented as a single Opportunity with the total package value. FlitStack AI sequences the migration so that People records land first (unlocking the email-based user resolution), then Opportunities are created with stage and amount mapping, then Tasks are linked to the correct People records. Activity history — call notes, session summaries — migrates as Notes or Tasks with original timestamps and owners preserved. Views, permissions, and any Profi workflows are not migratable and must be rebuilt in Twenty's workflow builder. We surface the rebuild reference for your team before the cutover runs.
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 Profi 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.
Profi
Client
Twenty CRM
People
1:1Profi clients map directly to Twenty People records. The client's name, email, phone, and address fields translate 1:1. Note that Twenty People records require a name field — clients without a full name are imported with the available display name and flagged for review.
Profi
Client
Twenty CRM
Company
1:1If Profi clients include an organization or business name separate from their personal name, that value maps to a linked Company record in Twenty via the companyId relation. The Company record must be created first (import order: Companies → People) so the foreign-key resolves correctly during CSV import.
Profi
Session
Twenty CRM
Task
1:1Individual coaching or service sessions map to Twenty Tasks. The session date and time map to the Task due date; the session duration maps to a custom field or the task description. The Task is linked to the corresponding People record via the People-Task relation. Owner assignment is resolved by email match against Twenty workspace members.
Profi
Session
Twenty CRM
Note
1:1Session notes, summaries, and coach observations map to Twenty Notes attached to the relevant People record. The original session date is preserved in the Note body or a custom datetime field. This approach keeps the session timeline intact in Twenty without creating task clutter for historical sessions.
Profi
Package
Twenty CRM
Opportunity
many:1Profi packages (bundles of sessions sold as a unit) map to Twenty Opportunities. The package price maps to Opportunity amount; the package status maps to Opportunity stage (e.g., 'Active' → 'In Progress', 'Completed' → 'Closed Won'). If a package spans multiple sessions, individual session Tasks are linked to the parent Opportunity via a custom Opportunity-Task relation field.
Profi
Package
Twenty CRM
Custom Object: SessionRecord
1:manyPackages with N sessions that need granular tracking are split: the package becomes an Opportunity, and each session within the package becomes a record in a custom SessionRecord object linked to the Opportunity. This preserves per-session data while maintaining the package-level deal value for pipeline reporting.
Profi
Billing Record
Twenty CRM
Note / Custom Field
1:1Profi billing records (invoice ID, payment status, amount paid) have no native equivalent in Twenty's CRM model. We preserve these as a custom fields on the Opportunity record (Invoice_ID__c, Payment_Status__c, Amount_Paid__c). Recurring billing configuration must be rebuilt using Twenty's workflow builder or a third-party billing integration.
Profi
Custom Field (Profi)
Twenty CRM
Custom Field (Twenty)
1:1Any Profi custom fields (e.g., 'Coach Rating', 'Session Type', 'Referral Source') are migrated as Twenty custom fields. Twenty requires fields to be created in Settings → Data Model before CSV import — we deliver a field-creation checklist as part of the migration plan so your workspace is ready before data lands.
Profi
User / Owner
Twenty CRM
WorkspaceMember
1:1Profi owner and coach IDs are resolved by email match against Twenty Workspace Members. If a Profi owner has no corresponding Twenty user, their records are assigned to a default owner and the unmatched mapping is surfaced in the pre-migration report for your team to resolve.
Profi
Engagement / Note
Twenty CRM
Note
1:1Profi engagement notes (messages, call summaries not tied to a session) migrate as Twenty Notes attached to the relevant People record. Original timestamps and the creating user's email are preserved in custom fields on the Note for audit continuity. This includes any ad-hoc communications logged by coaches or clients outside of scheduled sessions, ensuring that all historical context transfers even when no formal session record exists in the source system.
Profi
Attachment / File
Twenty CRM
Note Attachment / Custom Field
1:1Profi file attachments are preserved as URLs in a custom text field (File_URL__c) on the relevant record. If the attachment is a document (contract, intake form), we recommend re-uploading it to your preferred cloud storage and linking the URL — Twenty's CSV import does not support binary file ingestion.
| Profi | Twenty CRM | Compatibility | |
|---|---|---|---|
| Client | People1:1 | Fully supported | |
| Client | Company1:1 | Fully supported | |
| Session | Task1:1 | Fully supported | |
| Session | Note1:1 | Fully supported | |
| Package | Opportunitymany:1 | Fully supported | |
| Package | Custom Object: SessionRecord1:many | Fully supported | |
| Billing Record | Note / Custom Field1:1 | Fully supported | |
| Custom Field (Profi) | Custom Field (Twenty)1:1 | Fully supported | |
| User / Owner | WorkspaceMember1:1 | Fully supported | |
| Engagement / Note | Note1:1 | Fully supported | |
| Attachment / File | Note Attachment / Custom Field1: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.
Profi gotchas
No public API for bulk data export
Package-to-session linkage breaks in export
Video recordings stored outside standard export
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
Audit Profi data export and map to Twenty schema
FlitStack AI connects to your Profi account via scoped read access and exports all clients, sessions, packages, and billing records. We generate a schema-diff report comparing the Profi export schema against Twenty's current data model. Any Profi field with no Twenty equivalent is flagged for custom field creation, and the field-creation sequence is delivered as a numbered checklist so your workspace is schema-ready before the first import row is submitted.
Create Twenty custom fields and pre-populate pick-list values
Before any CSV import runs, we create all required custom fields in Twenty's Settings → Data Model — including session_type__c on Task, invoice_id__c and payment_status__c on Opportunity, and source__c on People. Pick-list values are pre-populated with the exact values present in your Profi export so the import does not reject rows for unknown enum values. This step must complete before import; we schedule it during your team's business hours to avoid timezone confusion.
Invite Profi coaches and owners as Twenty WorkspaceMembers
Twenty requires user accounts to exist before owner assignment can resolve. We extract the unique list of Profi owner and coach IDs, cross-reference by email against your Twenty workspace, and surface the set of unmatched users. Your team creates the missing WorkspaceMember accounts (or confirms fallback assignment) before migration begins. No record lands without a resolved owner — this is enforced by the import validation layer.
Run a sample migration with field-level diff
A representative slice — typically 100–300 records across clients, sessions, packages, and notes — is imported first. We generate a field-level diff between the source Profi records and the resulting Twenty records so you can verify that session dates landed on Tasks correctly, package values appear in Opportunities with the right stage, and People records are linked to their company and opportunity parents. You approve the sample before the full run proceeds.
Execute full migration with delta-pickup window
The full dataset loads into Twenty in import order: Companies first (so People can link via companyId), then People, then Opportunities, then Tasks and Notes. A delta-pickup window of 24–48 hours runs alongside the cutover, capturing any Profi records modified or created during the import. All operations are logged in FlitStack's audit trail, and one-click rollback is available if field mapping validation fails at reconciliation.
Platform deep dives
Profi
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 Profi and Twenty CRM.
Object compatibility
1 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
Profi: Not publicly documented.
Data volume sensitivity
Profi 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 Profi to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Profi 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 Profi
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.