CRM migration
Field-level mapping, validation, and rollback between Practice by Numbers and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Practice by Numbers
Source
Twenty CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Practice by Numbers and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Practice by Numbers organizes dental practice data around patients, appointments, treatment plans, and insurance records. Twenty CRM uses a standard CRM object model (People, Companies, Opportunities, Tasks, Notes) with full custom-object support. FlitStack AI translates PbN's patient-centric schema into Twenty's People and custom objects, mapping appointment history as Tasks, treatment plans as custom-object records, and insurance data as custom fields. The migration accesses PbN's data via API where available and CSV export as a fallback, handling field reformatting such as phone numbers and dates, and performing foreign-key resolution for provider-to-workspace-member and company-to-company relationships. Automations, workflows, and communication sequences built inside PbN do not transfer automatically — FlitStack exports the definitions as a structured rebuild reference for Twenty's workflow builder. The result is a fully populated Twenty workspace with dental-specific context preserved as custom fields and custom objects rather than discarded, enabling your team to continue operations with complete patient history intact.
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 Practice by Numbers 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.
Practice by Numbers
Patient
Twenty CRM
People
1:1PbN patients map directly to Twenty People records. First name, last name, email, phone, address, and date of birth transfer as standard fields. The patient record's create date and last-modified date migrate as Original_Create_Date__c and Original_Modified_Date__c custom fields to preserve history in Twenty's audit model.
Practice by Numbers
Patient → Primary Provider
Twenty CRM
People → WorkspaceMember
1:1PbN's provider assignment on a patient record resolves to a Twenty workspace member by email match. If the provider email exists in Twenty's Members list, the record links to that user. Unmatched providers are flagged and assigned to a fallback owner before migration commits.
Practice by Numbers
Patient → Insurance Carrier
Twenty CRM
People → Custom Field (Insurance_Carrier__c)
1:1PbN insurance carrier data on a patient record migrates to a custom text field on the People object. If PbN stores the carrier as a structured pick-list with specific insurance company options, FlitStack creates Insurance_Carrier__c as a select field in Twenty's Data Model with the same pick-list options before importing data. This preserves the dropdown values rather than free-text entries.
Practice by Numbers
Appointment
Twenty CRM
Task
1:1PbN appointment records become Twenty Tasks linked to the corresponding People record. The Task Subject carries the appointment type (e.g., 'New Patient Exam', 'Prophy'), the due date reflects the appointment date, and the Task body captures provider and notes. Original timestamps preserved as custom datetime fields.
Practice by Numbers
Treatment Plan
Twenty CRM
Custom Object (Treatment_Plan__c)
1:1PbN treatment plans — including procedure codes, proposed vs. completed status, and estimated vs. actual cost — migrate as records in a custom Treatment_Plan__c object in Twenty. The People record links to Treatment_Plan__c via a relation field created in Twenty's Settings → Data Model before import.
Practice by Numbers
Treatment Plan Line Item
Twenty CRM
Treatment_Plan__c → Custom Fields
1:1Individual procedures within a PbN treatment plan map to custom fields on the Treatment_Plan__c record. Each line item denormalizes into structured fields including Procedure_Code__c for the dental procedure code, Tooth_Surface__c for tooth identifiers, and Surface_Fee__c for the individual charge. FlitStack restructures multi-line plan data into a flat format that Twenty's custom-object schema accepts as field-level values during import.
Practice by Numbers
Billing Record / Patient Balance
Twenty CRM
Custom Object (Billing_Record__c)
1:1PbN billing records (outstanding balance, payment plan status, last payment date) migrate to a Billing_Record__c custom object linked to People. Since Twenty has no native billing object, FlitStack creates the custom object and fields to hold financial history without losing context.
Practice by Numbers
Patient → Referral Source
Twenty CRM
People → Custom Field (Referral_Source__c)
1:1PbN referral source values such as 'Internal Referral', 'Google Ads', 'Partner Practice', or 'Direct Mail' migrate as a custom select field on the People object. FlitStack creates the Referral_Source__c field in Twenty's Data Model and maps each unique value from PbN to a matching Twenty select option, preserving attribution tracking across the migration.
Practice by Numbers
Patient Note / Clinical Note
Twenty CRM
Note
1:1PbN clinical notes and general patient notes attach to the corresponding People record in Twenty as Notes. The Note body preserves the full clinical text and observations, and the original note create date migrates as Original_Create_Date__c for reporting continuity and audit trail purposes.
Practice by Numbers
Insurance Claim
Twenty CRM
Custom Object (Insurance_Claim__c)
1:1PbN insurance claim records migrate as a custom Insurance_Claim__c object linked to the People record. Each claim carries fields for claim status (Submitted, Pending, Paid, Denied), submitted amount, paid amount, and adjustment values. Status values become select field options in Twenty's Data Model, enabling filtering and reporting by claim stage after migration completes.
Practice by Numbers
Custom Field (PbN-specific)
Twenty CRM
Custom Field
1:1Any PbN custom field not covered by standard mappings — for example, 'Treatment Coordinator', 'Recall Status', 'Last Cleaning Date', or 'Hipaa_Consent_Date__c' — is created as a custom field in Twenty's Data Model before import. The field type (text, number, date, select) matches PbN's original type.
Practice by Numbers
Communication / Reminder Log
Twenty CRM
Task (Type: Communication)
1:1PbN automated reminder logs and manual communications including appointment reminders, recall messages, and follow-up communications migrate as Tasks with Type='Communication' linked to the People record. The Task subject carries the communication type identifier, and the description field holds the full message content, delivery timestamp, and delivery status for historical tracking.
| Practice by Numbers | Twenty CRM | Compatibility | |
|---|---|---|---|
| Patient | People1:1 | Fully supported | |
| Patient → Primary Provider | People → WorkspaceMember1:1 | Fully supported | |
| Patient → Insurance Carrier | People → Custom Field (Insurance_Carrier__c)1:1 | Fully supported | |
| Appointment | Task1:1 | Fully supported | |
| Treatment Plan | Custom Object (Treatment_Plan__c)1:1 | Fully supported | |
| Treatment Plan Line Item | Treatment_Plan__c → Custom Fields1:1 | Fully supported | |
| Billing Record / Patient Balance | Custom Object (Billing_Record__c)1:1 | Fully supported | |
| Patient → Referral Source | People → Custom Field (Referral_Source__c)1:1 | Fully supported | |
| Patient Note / Clinical Note | Note1:1 | Fully supported | |
| Insurance Claim | Custom Object (Insurance_Claim__c)1:1 | Fully supported | |
| Custom Field (PbN-specific) | Custom Field1:1 | Fully supported | |
| Communication / Reminder Log | Task (Type: Communication)1: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.
Practice by Numbers gotchas
No publicly documented API for automated migration
Dental EHR data is inherently messy during extraction
Goal management metrics require explicit field mapping
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 PbN data export capabilities
FlitStack connects to your Practice by Numbers instance to assess export paths: built-in CSV export column coverage, custom field visibility, and API availability if present. We generate a data audit report listing every patient, appointment, treatment plan, billing record, and custom field — with exportability status for each. This report identifies gaps where manual extracts from PbN's UI are required before migration can proceed and gives your team a complete picture of what will and will not move automatically.
Create Twenty workspace structure and custom fields
Before any data moves, FlitStack creates the custom objects and fields in your Twenty workspace required for dental data: Treatment_Plan__c, Billing_Record__c, and Insurance_Claim__c as custom objects, plus custom fields on People (Insurance_Carrier__c, Referral_Source__c, Treatment_Coordinator__c, Recall_Status__c, Last_Cleaning_Date__c) and on Tasks (Appointment_Type__c, Original_Appointment_Date__c). We also invite all identified PbN providers and staff as Twenty workspace members so owner and assignee resolution works during import. You review and approve the field list before we proceed.
Run a sample migration with field-level diff
A representative slice of records — typically 200–500 covering patients, appointments, treatment plans, and billing data — migrates first. FlitStack generates a field-level diff comparing source values against the destination records so you can verify field mapping accuracy, custom field population, and provider resolution before the full run commits. You approve the sample before we proceed to the full migration.
Execute full migration with delta pickup window
The full migration runs against your Twenty workspace with a delta pickup window (typically 24–48 hours) active during cutover. Any records created or modified in PbN during the migration run are captured in the delta pass so Twenty reflects PbN's final state at go-live. FlitStack uses scoped read access on PbN — your team keeps working in PbN throughout the migration. An audit log records every operation, and one-click rollback is available if field-level reconciliation reveals unexpected gaps.
Deliver reconciliation report and rebuild reference
After migration, FlitStack delivers a reconciliation report showing record counts by object, custom field population rates, and any records that could not be migrated (with reason codes). We also provide a PbN workflow export document — a structured reference of your PbN automation definitions (appointment reminders, recall sequences, patient follow-up rules) formatted for rebuild in Twenty's workflow builder. Post-migration support is available for any data corrections within 5 business days of delivery.
Platform deep dives
Practice by Numbers
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 Practice by Numbers 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
Practice by Numbers: Not publicly documented.
Data volume sensitivity
Practice by Numbers 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 Practice by Numbers to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Practice by Numbers 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 Practice by Numbers
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.