CRM migration

Migrate from Profi to Twenty CRM

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

Profi logo

Profi

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

82%

9 of 11

objects map 1:1 between Profi and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Profi logo

Profi

What's pushing teams away

  • Limited feature depth frustrates growing coaching businesses that need advanced automation, custom reporting, or third-party integrations beyond what the platform natively provides.
  • No bulk data export mechanism forces coaches to manually re-enter client records and session history when switching platforms, making migration painful and error-prone.
  • Pricing becomes prohibitive for solo practitioners as practice scales, with no transparent mid-tier that balances cost against feature access for small-team use cases.
  • The platform's opinionated structure resists customization needed for specialty coaching niches, leading coaches with non-standard workflows to seek more flexible alternatives.
  • Locked-in session and package metadata makes it difficult to cleanly migrate active enrollments and recurring billing relationships to competing platforms.

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

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

maps to

Twenty CRM

People

1:1
Fully supported

Profi 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

maps to

Twenty CRM

Company

1:1
Fully supported

If 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

maps to

Twenty CRM

Task

1:1
Fully supported

Individual 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

maps to

Twenty CRM

Note

1:1
Fully supported

Session 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

maps to

Twenty CRM

Opportunity

many:1
Fully supported

Profi 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

maps to

Twenty CRM

Custom Object: SessionRecord

1:many
Fully supported

Packages 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

maps to

Twenty CRM

Note / Custom Field

1:1
Fully supported

Profi 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)

maps to

Twenty CRM

Custom Field (Twenty)

1:1
Fully supported

Any 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

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

Profi 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

maps to

Twenty CRM

Note

1:1
Fully supported

Profi 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

maps to

Twenty CRM

Note Attachment / Custom Field

1:1
Fully supported

Profi 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.

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.

Profi logo

Profi gotchas

High

No public API for bulk data export

Medium

Package-to-session linkage breaks in export

Medium

Video recordings stored outside standard export

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 requires fields to exist before CSV import — migration will fail silently for unmapped columns

    Twenty's CSV import layer does not auto-create fields during import. If a column in your exported CSV has no matching Twenty field, the data in that column is discarded without an error notification. FlitStack AI audits your Profi export schema before migration and delivers a field-creation checklist (Settings → Data Model → Create Field) so every Profi property has a target before import runs. This is especially relevant for session_type, custom client attributes, and billing fields that have no native Twenty equivalent.

  • Profi session records require a many-to-one mapping decision before import

    A Profi client may have dozens of session records, each with its own date, duration, and coach. In Twenty, each session can be a Task linked to the People record. However, if sessions are part of a package sold as a single deal, grouping them under a parent Opportunity requires a custom SessionRecord object or a custom Opportunity-Id field on each Task. FlitStack surfaces this decision during the planning phase: clients with high session volume will need a bulk grouping strategy before the import sequence runs.

  • Twenty's CSV import limit is 20,000 records per export file

    Twenty enforces a hard export limit of 20,000 records per CSV file. Profi accounts with large session histories or high-volume client lists will require batched exports and sequenced imports in groups of 20,000 or fewer records. FlitStack handles the batching logic and ensures that the import order (Companies → People → Opportunities → Tasks → Notes) is respected across batches so foreign-key relationships resolve correctly. For accounts exceeding 20,000 records in a single object type, additional batch sequencing is applied with checkpoint validation between runs to prevent orphaned relationships.

  • Profi workflows and sequences have no migration path to Twenty's workflow builder

    Profi sequences and automated workflows — including session reminder automations, client stage progressions, and re-engagement sequences — do not export in a format that maps to Twenty's workflow builder. Twenty's workflow builder operates on different triggers and actions (field-change events, record creation, time-based delays). Each Profi workflow must be manually recreated in Twenty's workflow builder using equivalent triggers, conditions, and actions. FlitStack exports your Profi workflow definitions as a structured rebuild reference document so your Twenty admin can recreate the logic manually post-migration.

  • Owner resolution by email fails for Profi coaches without a matching Twenty WorkspaceMember

    Twenty's import system requires that any user referenced as a record owner (assignee on a Task, owner on an Opportunity) must exist as a WorkspaceMember before the import runs. If a Profi coach has no corresponding Twenty user account, FlitStack flags the unmatched coach and assigns their records to a fallback owner — your team then decides whether to create the Twenty account or keep the fallback assignment. This is a planning decision, not an automated fix.

Migration approach

Six steps for a successful Profi to Twenty CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

Context on both ends of the pair

Profi logo

Profi

Source

Strengths

  • Consolidated feature set covering scheduling, video, content, and billing in one platform.
  • Highly rated interface cleanliness and ease of use for solo and small-team practices.
  • Built-in secure video conferencing eliminates dependency on separate video tools.
  • Native package and enrollment management for recurring coaching programs.
  • Reliable uptime and customer support highlighted by long-term users.

Weaknesses

  • No public bulk-export API makes data portability a manual, error-prone process.
  • Limited customization for specialty coaching workflows and reporting needs.
  • Pricing model lacks a clear mid-tier for small teams, making it expensive at scale.
  • Video recordings and content files require separate file-level export outside the data export process.
  • Gaps in integration ecosystem compared to broader CRM platforms with Zapier or webhook support.
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. 1 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 Profi and Twenty CRM.

  • Object compatibility

    B

    1 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

    Profi: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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 consultation

Most Profi-to-Twenty migrations complete in 48–72 hours of clock time for under 25,000 combined records (clients, sessions, packages). Larger setups with 200,000+ records or multi-session packages that require splitting into a custom SessionRecord object extend to 5–10 days. The longest step is pre-creating Twenty custom fields before the first CSV import — FlitStack delivers that checklist upfront so it runs in parallel with your team's workspace setup.

Adjacent paths

Related migrations to explore

Ready when you are

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