CRM migration

Migrate from My Practice Now to Twenty CRM

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

My Practice Now logo

My Practice Now

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

10 of 10

objects map 1:1 between My Practice Now and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

My Practice Now stores client records, appointment schedules, invoicing data, and client notes in a single unified structure optimized for small professional practices. Twenty CRM uses a relational data model built around People, Companies, Opportunities, Notes, and Tasks objects with support for unlimited custom objects and fields via the Metadata API. FlitStack AI extracts My Practice Now client records and maps them directly to Twenty's People object, company records to Companies, appointment history to Tasks, invoice data to custom Opportunity fields, and client notes to Twenty's Notes object. Custom fields defined in My Practice Now migrate as custom fields on the corresponding Twenty objects. Workflow automations, email templates, and scheduling rules do not transfer — we export configuration definitions for manual rebuild in Twenty's workflow builder. The migration uses Twenty's Core API (REST or GraphQL) for record creation and Metadata API for custom field provisioning before data loads begin. All migrations include a validation pass to confirm field-level integrity before switching user access.

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

My Practice Now logo

My Practice Now

What's pushing teams away

  • Capterra reviewers cite poor customer service and unresponsive support as primary churn drivers, with issues remaining unresolved long enough to erode trust.
  • Negative reviews describe the software as non-intuitive and complicated, contradicting positive reviews and suggesting a steep or inconsistent onboarding experience.
  • Multiple reviews note that implementation is time-consuming and lengthy, which frustrates small practices with limited administrative capacity.

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 My Practice Now objects map to Twenty CRM

Each row shows how a My Practice Now 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.

My Practice Now

Client

maps to

Twenty CRM

People

1:1
Fully supported

My Practice Now's Client record maps directly to Twenty's People object. The Client's primary contact fields (name, email, phone, address) transfer as corresponding People fields. Primary company association becomes the companyId relation in Twenty. All contact details retain their original formatting and timezone information to preserve communication history.

My Practice Now

Client Company

maps to

Twenty CRM

Companies

1:1
Fully supported

When a My Practice Now client includes organizational affiliation data, that organization record creates a Twenty Companies entry. The company record holds industry, size, and location data that Twenty's Companies object supports natively. Industry classification uses standard codes, while size categories map to Twenty's built-in employee range options.

My Practice Now

Appointment

maps to

Twenty CRM

Tasks

1:1
Fully supported

My Practice Now appointments become Twenty Tasks with the original appointment date preserved as the due date, appointment duration stored in a custom number field, and the client name linked via the Tasks' relation field. Status maps from scheduled/completed/cancelled to the corresponding Task status values.

My Practice Now

Invoice

maps to

Twenty CRM

Opportunities

1:1
Fully supported

Invoice records from My Practice Now translate to Twenty Opportunities. The invoice amount becomes the Opportunity amount, invoice date becomes the expected close date, and invoice status (paid/pending/overdue) maps to custom picklist values on the Opportunity record. The mapping preserves original invoice identifiers for audit trails.

My Practice Now

Client Note

maps to

Twenty CRM

Notes

1:1
Fully supported

Notes attached to My Practice Now client records migrate as Twenty Notes linked to the corresponding People record. Original note timestamps and author information preserve for audit continuity. Rich-text formatting in My Practice Now notes converts to plain text in Twenty.

My Practice Now

Custom Field (Client)

maps to

Twenty CRM

Custom Field (People)

1:1
Fully supported

Custom fields defined on My Practice Now client records require pre-creation in Twenty via the Metadata API before migration. Field types map to Twenty equivalents: text fields become STRING, pick-lists become SELECT, dates become DATE. The Metadata API endpoint POST /rest/metadata/objects/{objectName}/fields creates each field.

My Practice Now

Custom Field (Appointment)

maps to

Twenty CRM

Custom Field (Task)

1:1
Fully supported

Appointment-specific custom fields such as appointment type, location, or practitioner notes migrate as custom fields on Twenty Tasks. These require provisioning via the Metadata API using POST /rest/metadata/objects/tasks/fields before the appointment-to-task translation runs. Field definitions include type, label, and optional picklist values for consistent data capture.

My Practice Now

Service/Product

maps to

Twenty CRM

Custom Object

1:1
Fully supported

If My Practice Now tracks services or products separately, these map to a Twenty custom object (e.g., Services). The custom object definition is created via POST /rest/metadata/objects with the appropriate field schema before records load. Each field is defined with type, required flag, and display label for user-friendly UI rendering.

My Practice Now

Client Owner

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

My Practice Now user assignments on client records resolve by email match against Twenty WorkspaceMembers. Unmatched owners flag for admin review before migration — records can assign to a fallback WorkspaceMember or the owner can be invited to Twenty first.

My Practice Now

Attachment/File

maps to

Twenty CRM

Files (via URL)

1:1
Fully supported

My Practice Now file attachments on client records do not transfer as native files. We preserve attachment URLs and file names in a custom text field on the People record so your team can re-upload files to Twenty's storage or an external system post-migration.

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.

My Practice Now logo

My Practice Now gotchas

Medium

Research data is sparse and often misattributed

High

Thinkific export scope determines what we can migrate

Medium

Content files require separate media migration

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

  • My Practice Now appointment-to-Task translation loses native calendar sync

    Twenty Tasks do not connect to a native calendar sync feature in the same way My Practice Now appointments do. When appointments become Tasks in Twenty, the dueAt field creates a task with a due date, but calendar integration requires connecting Twenty to an external calendar via Google Calendar or Outlook connectors. We recommend setting up calendar sync before go-live so practitioners see Tasks alongside their native calendar events. Proper configuration of the connector ensures that scheduled items appear automatically in practitioners' calendars without requiring manual entry.

  • Invoice-to-Opportunity mapping creates orphan Opportunities without pipeline context

    My Practice Now invoices lack a pipeline-stage concept. When invoice records become Twenty Opportunities, the stage field requires a default value since Twenty's Opportunities are pipeline-keyed. We default invoices to a 'Closed Won' or 'Invoice' stage name, but your admin should pre-create a suitable pipeline stage in Twenty's OpportunityStages via the Metadata API before migration loads. Without this, Opportunities land without stage context and appear in the default pipeline. Ensuring proper pipeline segmentation prevents confusion and supports accurate reporting.

  • Custom fields require Metadata API provisioning before record migration

    Twenty's Metadata API at /rest/metadata/objects/{objectName}/fields must create all custom fields before data loads attempt to populate them. My Practice Now custom fields on clients or appointments must be pre-provisioned via POST requests with field type, display name, and any pick-list options. If records load before custom fields exist, those field values drop silently. We include a custom field provisioning step in our pre-flight checklist and execute it before any record migration runs.

  • Client-to-company N:1 collapse when migrating multi-affiliated clients

    My Practice Now allows a client to have multiple company associations within a single record. Twenty's relational model links a People record to one primary Companies record via companyId, with additional affiliations requiring Account Contact Relationships. We migrate the most recently modified company affiliation as the primary companyId and surface secondary affiliations in a custom multi-select field for manual relationship creation post-migration. Post-migration, your team can configure additional relationships using Twenty's UI or API as needed.

Migration approach

Six steps for a successful My Practice Now to Twenty CRM data migration

  1. Audit My Practice Now data and provision Twenty schema

    We extract a full data inventory from My Practice Now including all client records, appointment history, invoice data, and custom field definitions. Against this inventory, we provision the corresponding Twenty objects and custom fields via the Metadata API before any data loads. This includes creating any custom Opportunity stages needed for invoice data, custom fields on People and Tasks, and custom objects for service or product records.

  2. Resolve owner and user mappings by email

    My Practice Now practitioner and client owner assignments resolve by email match against Twenty WorkspaceMembers. We generate a pre-flight owner resolution report listing matched users and any unmatched owners. Your team either invites unmatched users to Twenty first or assigns records to a fallback WorkspaceMember. No record migrates without a valid Twenty owner assignment. This step ensures traceability of data ownership throughout the migration process and supports compliance with audit requirements.

  3. Run sample migration with field-level diff

    A representative slice of 100–500 records migrates first — covering clients, appointments, invoices, and notes. We generate a field-level diff between source values and destination fields so you can verify appointment-to-Task translation, invoice-to-Opportunity mapping, and owner resolution before the full run commits. This sample run surfaces any custom field gaps or mapping errors before they affect your full dataset. The diff report is delivered in CSV format for straightforward review.

  4. Execute full migration with delta-pickup window

    Full record migration loads into Twenty using the Core API (REST or GraphQL) for record creation. A delta-pickup window of 24–48 hours captures any records created or modified in My Practice Now during the cutover period. Audit logs record every operation, and a one-click rollback reverts the Twenty workspace to its pre-migration state if reconciliation reveals data integrity issues. Post-migration, we perform a final validation against source totals to confirm completeness.

Platform deep dives

Context on both ends of the pair

My Practice Now logo

My Practice Now

Source

Strengths

  • Combines appointment scheduling, invoicing, and client notes in a single interface for small practices
  • Intuitive and simple to use according to positive G2 reviewers
  • Responsive development team that incorporates user feature requests
  • Mobile app allows creating and accessing client notes on the go
  • Great tech support cited by satisfied users

Weaknesses

  • Poor customer service and slow issue resolution reported in negative reviews
  • Non-intuitive and complicated interface according to some users
  • Lengthy, time-consuming implementation process
  • Inconsistent user experience — same product praised as intuitive and criticized as confusing
  • Sparse public documentation makes research and comparison difficult
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. 2 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 My Practice Now and Twenty CRM.

  • Object compatibility

    B

    2 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

    My Practice Now: Not publicly documented at the individual storefront level; Thinkific generally applies org-level rate limits.

  • Data volume sensitivity

    B

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

Estimator

Estimate your My Practice Now 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 My Practice Now to Twenty CRM data migrations

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

Can't find your answer?

Walk through your My Practice Now to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most My Practice Now to Twenty CRM migrations complete in 48–72 hours for under 25,000 records. The timeline extends to 7–10 days when migrating 100,000+ records with extensive appointment history or complex custom field schemas. The longest planning step is provisioning custom fields via Twenty's Metadata API before data loads, which typically takes 2–4 hours depending on the number of custom fields to create.

Adjacent paths

Related migrations to explore

Ready when you are

Move from My Practice Now.
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