CRM migration

Migrate from Practice by Numbers to Twenty CRM

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 logo

Practice by Numbers

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between Practice by Numbers and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Practice by Numbers logo

Practice by Numbers

What's pushing teams away

  • Limited public API documentation makes automated data extraction difficult, forcing practices to rely on manual CSV exports which restrict field selection and historical depth.
  • No free tier or low-cost entry point means the full feature set requires a significant commitment before the practice can validate fit with their specific workflow.
  • The breadth of features creates a steep onboarding curve, and some practices report that staff adoption lags during the first months after implementation.

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 Practice by Numbers objects map to Twenty CRM

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

maps to

Twenty CRM

People

1:1
Fully supported

PbN 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

maps to

Twenty CRM

People → WorkspaceMember

1:1
Fully supported

PbN'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

maps to

Twenty CRM

People → Custom Field (Insurance_Carrier__c)

1:1
Fully supported

PbN 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

maps to

Twenty CRM

Task

1:1
Fully supported

PbN 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

maps to

Twenty CRM

Custom Object (Treatment_Plan__c)

1:1
Fully supported

PbN 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

maps to

Twenty CRM

Treatment_Plan__c → Custom Fields

1:1
Fully supported

Individual 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

maps to

Twenty CRM

Custom Object (Billing_Record__c)

1:1
Fully supported

PbN 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

maps to

Twenty CRM

People → Custom Field (Referral_Source__c)

1:1
Fully supported

PbN 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

maps to

Twenty CRM

Note

1:1
Fully supported

PbN 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

maps to

Twenty CRM

Custom Object (Insurance_Claim__c)

1:1
Fully supported

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

maps to

Twenty CRM

Custom Field

1:1
Fully supported

Any 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

maps to

Twenty CRM

Task (Type: Communication)

1:1
Fully supported

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

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.

Practice by Numbers logo

Practice by Numbers gotchas

High

No publicly documented API for automated migration

High

Dental EHR data is inherently messy during extraction

Medium

Goal management metrics require explicit field mapping

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

  • PbN's patient-centric model does not have a native Company equivalent — dental practices operate under a single org, not account hierarchies

    Practice by Numbers is built for single-location and multi-location dental practices where every record traces back to a patient. Twenty CRM's data model requires a Company record as the parent of People records and as the anchor for Opportunities. When migrating from PbN, we create a default Company record representing the dental practice itself (using the practice name and domain) and link all People records to it. If PbN stores multi-location data with separate practice names, we create separate Company records per location and assign patients by their location affiliation. This is a structural divergence that requires explicit business rules from your team before migration runs — FlitStack surfaces this as a pre-migration decision point.

  • PbN appointment and treatment data may require custom-object creation before import — Twenty requires fields to exist before CSV data lands

    Twenty's documentation states explicitly: 'Fields must exist before import. The CSV import creates records, not fields.' FlitStack handles this sequencing by creating all required custom objects (Treatment_Plan__c, Billing_Record__c, Insurance_Claim__c) and custom fields in your Twenty workspace under Settings → Data Model before the migration run executes. If your PbN setup uses non-standard custom field names or stores dental data in unexpected column structures, we surface those discrepancies during the audit phase and give you a field-creation checklist before data moves. Skipping this step results in silent field drops on import — we prevent that by enforcing the sequence.

  • Twenty has no native appointment scheduling or recall automation — these must be rebuilt using workflows or external tools

    Practice by Numbers includes appointment scheduling, automated patient reminders, and recall sequence automation as core product features. Twenty CRM does not include a native scheduling or recall engine — its workflow builder triggers on record updates and time delays, but does not have a built-in calendar or reminder engine. After migration, your automated appointment reminders, recall sequences, and patient follow-up campaigns must be rebuilt using Twenty's workflow builder (Settings → Workflows) or by integrating a dedicated scheduling tool via Twenty's REST API and webhooks. FlitStack exports your PbN workflow definitions as a rebuild reference, but the rebuild itself requires configuration in Twenty's UI. This is a process gap that should be scoped during migration planning, not discovered after go-live.

  • PbN data export capabilities are not fully documented publicly — API availability and CSV export column coverage must be verified per-customer

    Unlike HubSpot or Salesforce, Practice by Numbers is a vertical dental SaaS with no publicly documented REST API for programmatic data extraction. FlitStack's migration engine supports two extraction paths: PbN's built-in CSV export (which covers standard patient and appointment fields) and direct database read access if your PbN instance exposes a database connection. The availability of these paths varies by PbN subscription tier and data volume. Before committing to a migration timeline, FlitStack runs a data audit against your PbN instance to identify exactly which fields and object types are exportable and which require manual data preparation. Complex custom fields may require a manual extract step from PbN's UI before migration begins.

  • Twenty workspace members must exist before importing records that reference them as owners or assignees

    Twenty's import documentation warns: 'Invite users BEFORE importing data. If your data includes user references (Account Owner, Assignee, etc.), those users must exist in Twenty before import. Otherwise, those relations cannot be mapped.' FlitStack applies this by inviting all identified PbN providers and staff members to your Twenty workspace during the workspace setup phase. The invitation acceptance step must complete before the import run — FlitStack tracks acceptance status and will not begin the migration until all required workspace members have accepted. If a PbN provider has left the practice, we flag the record and assign it to a designated fallback workspace member rather than leaving it orphaned.

Migration approach

Six steps for a successful Practice by Numbers to Twenty CRM data migration

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

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

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

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

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

Context on both ends of the pair

Practice by Numbers logo

Practice by Numbers

Source

Strengths

  • Bi-directional integration with major dental PMSs (Open Dental 15.4+, Dentrix, Dentrix Ascend, EagleSoft, Practice-Web) — PbN writes SMS, email, call and note activity back into the PMS CommLog so the PMS remains the system of record.
  • Dentist-founded product with a 9.8/10 G2 support rating and 99.99% advertised uptime — reviewers consistently call out responsive support and quick feature delivery.
  • Real-time Practice IQ dashboards cover production, collections, case acceptance, new-patient, hygiene reappointment and other dental KPIs that horizontal BI tools do not pre-build.
  • PbN Voice native phone system (call tracking, recording, analytics) plus payments, digital forms and insurance verification consolidate vendors small practices would otherwise stitch together.
  • Modular plan structure lets practices add Voice, Payments or specific modules incrementally rather than paying for everything in tier 1.

Weaknesses

  • Only the Core plan ($249/month) has publicly listed pricing — higher tiers (Flow, Scale, Thrive) require sales contact, complicating self-serve evaluation.
  • Reports are not customisable enough for some practices — granular per-practice metric configuration often requires support involvement.
  • Single-location practices report PbN can feel expensive relative to features they actually use — pricing is more competitive at multi-location and DSO scale.
  • Some digital-form and online-scheduling flows have reliability gaps — reviewers cite forms occasionally failing to send and patients struggling to open them.
  • PbN is a layer on top of the PMS, not the PMS itself — practices migrating need to plan PMS-side data extraction (Open Dental, Dentrix) in parallel.
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 Practice by Numbers 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

    Practice by Numbers: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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 consultation

Most PbN-to-Twenty migrations complete in 48–72 hours of clock time for under 50,000 records. Larger setups with 200,000+ records, complex treatment-plan histories, or multiple custom objects extend to 5–10 days. The longest single step is typically the data audit phase, where FlitStack maps PbN's export output to Twenty's custom-object schema before the first record moves. Self-hosting Twenty (rather than using the cloud tier) adds 1–2 days for your team to configure the hosting environment before FlitStack can connect to the target instance.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Practice by Numbers.
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