CRM migration

Migrate from Curve Dental to Twenty CRM

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

Curve Dental logo

Curve Dental

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between Curve Dental and Twenty CRM.

Complexity

BStandard

Timeline

72–96 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Curve Dental stores dental-practice data: patient demographics, insurance breakdowns, treatment plan line items, clinical notes, provider assignments, and file attachments. Twenty CRM is built around a generic People-Companies-Opportunities model with support for custom objects, custom fields, Tasks, and Notes. The two data models have very little native overlap, which makes this migration more of a domain translation than a straightforward object remap. FlitStack AI maps patient first name, last name, email, phone, address, and date of birth to Twenty's People object fields directly. Insurance carrier names and addresses land in Twenty's Companies object. Treatment plan codes, clinical note content, and provider license numbers become custom fields on People or custom objects that your Twenty admin pre-creates via Settings → Data Model. Provider-to-user resolution happens by email match against Twenty workspace members. Attachments and X-ray file references migrate as Notes attachments. Workflows, appointment reminder sequences, and billing-rule automations do not migrate — Twenty's workflow builder uses a different event model than Curve's clinical scheduling triggers. The migration runs via CSV export from Curve's data extraction layer, transformed against the Twenty import template (People first, then Companies, then custom objects), with a delta-pickup window capturing any records created or modified during cutover. The audit log records every operation, and rollback is available if the reconciliation diff shows unexpected gaps.

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

Curve Dental logo

Curve Dental

What's pushing teams away

  • Reporting module is slow and cumbersome on large databases. Users report that reports timeout before loading, cannot be filtered before running, and lack preview functionality — a significant pain point for practices that rely on data-driven decision-making.
  • Customization limits frustrate power users. Practices that need to modify workflows, build custom integrations, or tweak the system beyond Curve's opinionated defaults find the platform constraining compared to open-source alternatives.
  • Confusing billing and payment workflows generate negative reviews. Multiple Capterra reviewers cite the billing and payment processes as a pain point, with complexity around claims posting, insurance reconciliation, and patient invoices.
  • Pricing transparency is limited — no public tier structure. Prospective customers must speak with a sales representative, and some reviews mention uncertainty about what they were paying for versus what was included.

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

Each row shows how a Curve Dental 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.

Curve Dental

Patient

maps to

Twenty CRM

People

1:1
Fully supported

Patient first name, last name, date of birth, email address, phone number, and home address map directly to Twenty People object fields. The Patient record is the primary unit of migration — all other dental records (insurance, treatment plans, appointments) link back to a People record.

Curve Dental

Patient Insurance Breakdown

maps to

Twenty CRM

People + custom fields

1:1
Fully supported

Insurance carrier name, group number, subscriber ID, and coverage percentage become custom fields on the People record (InsuranceCarrier__c, GroupNumber__c, SubscriberID__c, CoveragePercent__c). Each insurance carrier name also spawns a unique Company record in Twenty for cross-referencing, with the patient's relationship to that carrier maintained via the People-Company link. This dual mapping ensures insurance details are searchable both by patient and by carrier entity.

Curve Dental

Insurance Carrier

maps to

Twenty CRM

Companies

1:1
Fully supported

Unique insurance carrier names extracted from patient insurance breakdowns become Twenty Companies records. Carrier address and phone map to the standard Company address and phone fields. This deduplication step is critical — N patients referencing the same carrier collapse to one Company record with a count of linked People.

Curve Dental

Treatment Plan

maps to

Twenty CRM

Custom Object (TreatmentPlan) + custom fields on People

1:1
Fully supported

Treatment plan code, description, estimated cost, and status (proposed, accepted, completed) require a custom TreatmentPlan object in Twenty. Created via Settings → Data Model → Create Custom Object before import. Each treatment plan links to a People record via a relation field. Completed treatment history becomes a custom field on People (LastTreatmentDate__c, TreatmentSummary__c).

Curve Dental

Clinical Note / Chart Note

maps to

Twenty CRM

Notes

1:1
Fully supported

Chart notes and clinical observations export as free-text Notes attached to the corresponding People record. Original provider name and note date are preserved as Note metadata. Rich-text formatting is stripped to plain text for Twenty Notes compatibility. Historical clinical context remains accessible within the patient's timeline for future reference by the care team.

Curve Dental

Appointment / Schedule

maps to

Twenty CRM

Tasks

1:1
Fully supported

Curve appointments (date, time, provider, procedure type, status) map to Twenty Tasks with due date, assignee (provider-matched to Twenty workspace member by email), and a custom description field capturing the procedure type and status. Completed appointments become historical Tasks; future appointments become open Tasks.

Curve Dental

Provider / Staff Record

maps to

Twenty CRM

Workspace Members

1:1
Fully supported

Curve provider records (dentist, hygienist, office manager) are matched to Twenty workspace members by email address. Providers without a Twenty user account are flagged and assigned to a fallback owner. Provider specialty and license number migrate as custom fields on the matched Workspace Member record.

Curve Dental

Practice / Location

maps to

Twenty CRM

Companies

1:1
Fully supported

For multi-location Curve setups, each physical practice location becomes a Twenty Companies record with address, phone, and a custom PracticeLocation__c flag. Patient records link to their primary location via companyId relation. This allows location-level pipeline and task reporting in Twenty.

Curve Dental

Referral Source

maps to

Twenty CRM

Custom field on People (ReferralSource__c)

1:1
Fully supported

Referral source names—such as referring dentists, marketing channels, or patient referrals—become custom pick-list values on the People object. Each unique referral source is enumerated in Twenty's Settings → Data Model before import to maintain consistency across all patient records. The field stores the original source identifier for reporting on patient acquisition trends.

Curve Dental

Custom Form Fields

maps to

Twenty CRM

Custom fields on relevant objects

1:1
Fully supported

Curve custom form fields (e.g., fluoride preference, osteopath flag, patient preference flags) must be pre-created in Twenty Settings → Data Model for the relevant object (People, Companies, or TreatmentPlan). Each custom field in Curve requires a corresponding Twenty field created before CSV import — import creates records, not fields.

Curve Dental

Document / Attachment (images, X-rays)

maps to

Twenty CRM

Notes with file attachments

1:1
Fully supported

Curve file attachments (X-rays, scanned documents, referral letters) re-upload as Twenty Notes attachments. File size limits and supported formats apply (Twenty supports common image formats and PDF). Clinical X-ray images are preserved as Notes attachments linked to the People record for historical access.

Curve Dental

Billing / Accounts Receivable

maps to

Twenty CRM

Custom fields on People + Notes

1:1
Fully supported

Outstanding balance, last payment date, and billing status migrate as custom fields on People. Full A/R history (individual charge entries, payments, adjustments) exports as Notes entries since Twenty has no native A/R ledger. A separate accounting system handles ongoing billing 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.

Curve Dental logo

Curve Dental gotchas

High

Reporting timeout on large databases

Medium

Image and x-ray migration requires chunked transfer and post-migration validation

Medium

Accounts receivable balances drift after payment ledger migration

Low

Custom form structure and Smart Forms do not export

Low

Curve Pay dispute fee of $25 per chargeback

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

  • Dental PMS fields have no native CRM equivalents — custom fields must be created before import

    Curve Dental stores dental-specific data (fluoride preference, osteopath flag, insurance breakdown, treatment plan codes) that has no direct equivalent in Twenty's standard People-Companies-Opportunities model. Twenty's CSV import creates records, not fields — your admin must pre-create every custom field (InsuranceCarrier__c, GroupNumber__c, SubscriberID__c, CoveragePercent__c, TreatmentPlan custom object) in Settings → Data Model before the migration file is loaded. If a field does not exist at import time, its data is silently skipped. We surface the full field inventory in the pre-migration audit so your admin can configure everything in Twenty before data lands.

  • Insurance carrier N-to-N relationships collapse to one Company per unique carrier

    Curve Dental stores insurance as a per-patient breakdown — the same carrier (e.g., Delta Dental) appears across thousands of patient records. Twenty's Companies object represents each carrier once, linked to multiple People records via companyId. During migration, we deduplicate carrier names across all patients and create one Company per unique carrier. If your practice uses multiple plan types under the same carrier (PPO vs. HMO), those distinctions must be captured as custom fields on People rather than separate Company records, since Twenty's Company model does not natively support plan-type variants under one company name.

  • Appointment and recall automations cannot migrate — Twenty's workflow engine uses a different event model

    Curve's recall sequences, appointment reminder triggers, and billing-rule automations are tied to clinical workflow states (treatment stage entered, appointment completed, claim filed). Twenty's workflow builder automates CRM tasks and field updates based on CRM events (opportunity stage changed, task completed, note added). The two automation models are architecturally incompatible. We export your Curve workflow definitions as a configuration reference document so your Twenty admin can rebuild the logic in Twenty's workflow builder — but the rebuild is a manual step that must be planned separately from the data migration.

  • Provider-to-user email matching is required before owner assignment

    Twenty assigns Tasks and Notes to Workspace Members. Curve provider records (dentist, hygienist, office manager) must be matched to existing Twenty workspace members by email. If a Curve provider has no corresponding email in your Twenty workspace, their records are flagged and assigned to a fallback owner. You must invite all active providers to Twenty before migration runs, or their patient-facing Tasks (appointments, recall reminders) will land without a Twenty assignee. We provide a pre-flight owner-resolution report identifying every unmatched provider 48 hours before the migration window opens.

  • Multi-location Curve setups require per-location Company record planning

    If your Curve Dental account manages multiple practice locations, each location's address, phone, and provider roster must be represented as separate Twenty Company records (with a custom PracticeLocation__c flag) rather than one parent organization. Patient records then link to their primary location via companyId. Without pre-planning, all patients from all locations land under one Company in Twenty, eliminating per-location reporting capability. We deliver a location-mapping worksheet during discovery so your Twenty admin can configure all Company records and their address fields before data import begins.

Migration approach

Six steps for a successful Curve Dental to Twenty CRM data migration

  1. Audit Curve data inventory and build field-mapping plan

    FlitStack AI exports a full data inventory from Curve Dental — patient records, insurance breakdowns, treatment plans, chart notes, appointments, provider roster, and custom form fields. We compare this inventory against Twenty's standard field list and document every field that requires a custom object or custom field in Twenty Settings → Data Model. The output is a field-mapping worksheet with source field names, target Twenty objects and field names, transformation notes, and a pre-migration checklist your admin uses to pre-create all custom fields before the import file is loaded.

  2. Invite all active providers to Twenty workspace

    Before any data moves, your team creates Twenty workspace member accounts for every active Curve provider (dentist, hygienist, office manager). FlitStack AI runs an owner-resolution pass — each Curve provider email is matched against the Twenty workspace member list. Unmatched providers are flagged in a pre-flight report with email addresses so your team can send invites before migration. No Task or Note can be assigned to a provider without an active Twenty user account — this step must complete 24 hours before the migration window opens.

  3. Create custom objects and fields in Twenty

    Using the field-mapping worksheet from Step 1, your admin creates all required custom objects (TreatmentPlan) and custom fields on People, Companies, and Tasks in Twenty Settings → Data Model. This includes: insurance fields (InsuranceCarrier__c, GroupNumber__c, SubscriberID__c, CoveragePercent__c), A/R fields (OutstandingBalance__c, LastPaymentDate__c), provider fields (LicenseNumber__c, Specialty__c), and the TreatmentPlan custom object with its relation to People. FlitStack delivers a named-field creation script so the setup takes minutes rather than hours. Custom fields must exist before the CSV import runs.

  4. Run sample migration with field-level diff

    A representative slice of patient records (typically 200–500 across multiple providers and locations) migrates first. Insurance carrier deduplication runs, treatment plans link to People records, chart notes attach to the correct contacts, and appointments become Tasks with assignees. FlitStack generates a field-level diff showing every source field value alongside its Twenty destination — you can verify that insurance group numbers, treatment plan statuses, and provider assignments arrived correctly before the full run commits. Any mapping errors are corrected before the delta window opens.

  5. Execute full migration with delta-pickup window

    The full Curve dataset migrates in sequence: Companies first (insurance carriers and practice locations), then People with custom field values, then custom TreatmentPlan records with People relations, then Tasks (appointments) and Notes (chart entries) with provider assignees. A 24–48 hour delta-pickup window captures any records created or modified in Curve during the cutover. Every operation is logged to the audit trail. One-click rollback reverts all migrated records if the reconciliation check fails. The final deliverable includes a record-count verification report comparing Curve source totals to Twenty destination totals by object type.

Platform deep dives

Context on both ends of the pair

Curve Dental logo

Curve Dental

Source

Strengths

  • Cloud-native architecture eliminates server hardware and enables access from any browser or mobile device
  • Fast onboarding with guided implementation: dedicated Project Manager, Data Migration Specialist, and 90-day Account Manager
  • Established conversion process from 90+ source systems with 4,000+ completed migrations documented on their website
  • All-in-one platform integrates charting, scheduling, imaging, billing, payments, and patient engagement under one login and one monthly price
  • AI partnership with Pearl for diagnostic assistance and modern patient engagement tools including Smart Forms and text-to-pay

Weaknesses

  • Reporting module is slow and limited — large database reports timeout, cannot filter before running, and lack preview
  • Billing and payment workflows are a recurring pain point with 70% negative reviews citing confusion
  • Customization limits make Curve constraining for practices that need to modify workflows or build custom integrations
  • No public pricing — all tier information requires a sales conversation, making budget comparison difficult
  • Custom form layout and conditional logic do not export, requiring manual rebuild in the destination PMS
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 Curve Dental 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

    Curve Dental: Not publicly documented.

  • Data volume sensitivity

    A

    Curve Dental exposes a bulk API — large-volume migrations stream efficiently.

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Curve Dental to Twenty CRM migrations complete in 72–96 hours of clock time for under 25,000 patient records. Multi-location setups with 100,000+ records, 50+ custom form fields, and insurance carrier dedup across thousands of patients extend to 5–10 days. The longest planning step is pre-creating custom fields in Twenty Settings → Data Model — this must happen before CSV import runs, and it is the step teams most often underestimate. FlitStack delivers a named-field creation checklist during discovery so your admin can configure everything in advance.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Curve Dental.
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