CRM migration

Migrate from Henry Schein One to Twenty CRM

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

Henry Schein One logo

Henry Schein One

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

90%

9 of 10

objects map 1:1 between Henry Schein One and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Henry Schein One — encompassing Dentrix, Dentrix Ascend, and Dentally — is a dental-practice-management platform built around patient records, appointments, treatment plans, and insurance billing. Twenty CRM is a general-purpose open-source CRM built on People, Companies, Opportunities, Tasks, and Notes with a CSV-based import system and a 20,000-record-per-export limit. We extract data from Henry Schein One via its API Exchange (700+ endpoints, 6B annual requests) or direct export, transform patient demographics into Twenty People records, store insurance carriers as Twenty Companies with custom fields for plan names and group numbers, and convert appointment history into Twenty Tasks. Clinical treatment data — procedure codes, tooth numbers, X-ray counts — has no native equivalent in Twenty and migrates as custom fields on the People record. Insurance EDI clearinghouse settings, imaging files, and claim clearinghouse configurations cannot migrate and require re-enrollment post-migration. We run a sample migration of 50–100 patient records before committing the full load, using delta pickup to capture in-flight changes during the cutover window.

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

Henry Schein One logo

Henry Schein One

What's pushing teams away

  • Legacy on-premise Dentrix installations accumulate database bloat over time, causing sluggishness that drives practices toward cloud alternatives like Dentrix Ascend or competing platforms.
  • Henry Schein One has tightened integration restrictions — third-party vendors like Vyne Dental report missing API data elements for claims workflows and requirements to discontinue existing integration methods.
  • Practices report difficulty extracting complete data from Dentrix when evaluating a switch, with the migration path treated as a competitive moat rather than an open standard.
  • Annual subscription costs for cloud tiers ($800–$1,400/month) plus module add-ons create budget pressure for small solo practices comparing total cost of ownership.
  • Internal staffing complaints on Glassdoor and Indeed — unattainable targets, finance team issues — reflect onto customer perception of account management and support quality.

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 Henry Schein One objects map to Twenty CRM

Each row shows how a Henry Schein One 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.

Henry Schein One

Patient

maps to

Twenty CRM

People

1:1
Fully supported

Henry Schein One patient records map directly to Twenty People. Fields like first name, last name, date of birth, phone, email, address, and SSN transfer as direct mappings or custom fields. The original patient account number from Henry Schein One is stored as a custom field on the People record for reconciliation and delta-run de-duplication.

Henry Schein One

Insurance Carrier

maps to

Twenty CRM

Company

1:1
Fully supported

Insurance carriers in Henry Schein One (payer name, plan type, group number, subscriber ID, employer info, subscriber relationship) have no direct equivalent in Twenty. We store each carrier as a Company record with custom fields — Insurance_Plan_Name__c, Insurance_Group_Number__c, Insurance_Subscriber_ID__c, and Insurance_Relationship__c — to preserve the full payer relationship.

Henry Schein One

Appointment

maps to

Twenty CRM

Task

1:1
Fully supported

Henry Schein One appointment records — appointment date, time, type, length, provider, operatory, and status — convert to Twenty Task records. Task.name carries the appointment type; Task.body carries the full notes; Task.dueDate maps from the appointment date. Original appointment IDs are preserved as Custom_Appointment_ID__c on the Task for traceability.

Henry Schein One

Provider / Doctor

maps to

Twenty CRM

People

1:1
Fully supported

Referring doctors and hygiene providers from Henry Schein One become Twenty People records with a Provider_Type__c custom field to distinguish them from patient contacts. The provider's state license number, DEA number, and NPI are stored as text custom fields on the People record since Twenty has no native license tracking object.

Henry Schein One

Guarantor

maps to

Twenty CRM

People

1:1
Fully supported

The guarantor on a Henry Schein One patient record — the person responsible for billing — migrates as a separate Twenty People record. The primary patient's record links to the guarantor via a people-to-people relationship field. If the guarantor is also a patient, both records are created and the relationship is explicitly linked.

Henry Schein One

Treatment Plan / Procedure

maps to

Twenty CRM

Custom fields on People + Notes

1:1
Fully supported

Treatment plans in Henry Schein One (CDT codes, tooth numbers, surfaces, procedure descriptions, fees, provider, treatment status) have no native equivalent in Twenty. We migrate active treatment plan data as structured custom fields on the People record — Procedure_Codes__c, Tooth_Numbers__c, Treatment_Fees__c — and append full clinical notes to the People record as a Note with original timestamps and provider attribution.

Henry Schein One

Referral Source

maps to

Twenty CRM

Custom field on People

1:1
Fully supported

Referral source data in Henry Schein One (referring doctor name, practice, referral date, referral type) migrates as a Referral_Source__c custom text field on the Twenty People record. If referral tracking becomes a business priority in Twenty, a custom Referral object can be created post-migration to replace the flat field.

Henry Schein One

Insurance Claim / Ledger

maps to

Twenty CRM

Custom fields on People

1:1
Fully supported

Insurance claim status (submitted, pending, paid, denied) and outstanding balance from Henry Schein One ledger records migrate as custom fields — Claim_Status__c and Outstanding_Balance__c — on the corresponding People record. Full claim history requires a custom Claim object in Twenty if the volume warrants it.

Henry Schein One

Document / Attachment

maps to

Twenty CRM

Note + File attachment

1:1
Fully supported

Attachments stored in Henry Schein One — treatment consent forms, insurance cards, referral letters — are extracted from the source system and re-uploaded as files linked to the corresponding Twenty People record. The original file name and source system path are preserved in the file's description metadata. Note: inline images in clinical notes are extracted and rehosted as Twenty attachments.

Henry Schein One

Multi-Location Practice

maps to

Twenty CRM

Multiple Company records

1:many
Fully supported

Group practices or Dental Service Organizations (DSOs) running multiple locations in Henry Schein One require each location to be a separate Company record in Twenty. Location name, address, phone, and a Location_Code__c custom field distinguish each practice. Patient records are then linked to the appropriate location Company via the companyId relationship on the People record.

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.

Henry Schein One logo

Henry Schein One gotchas

High

Proprietary image encoding breaks image links post-migration

High

Insurance EDI re-enrollment required with every payer

Medium

API Exchange restrictions limit third-party data access

Medium

PCI compliance does not transfer between systems

Low

Jarvis Analytics generates derived data that does not 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

  • Dental clinical data has no native Twenty CRM equivalent — custom fields required

    Henry Schein One stores CDT procedure codes, tooth numbers, surfaces, perio chart measurements, X-ray counts, clinical notes, and treatment plan status on the patient record. Twenty CRM is a general-purpose CRM with no clinical or dental object types. We map these as custom fields on the People record (e.g., Procedure_Codes__c as a multi-select, Tooth_Numbers__c as a text field) and append detailed clinical notes to the People record as a Note with original provider and date attribution. Practices expecting treatment plans to appear as structured objects will need to configure a custom Treatment object in Twenty's Data Model settings before the migration runs.

  • Multi-location DSO setups require one Company per practice location

    Dental Service Organizations running multiple locations in Henry Schein One typically manage all locations within a single practice database. Twenty CRM uses a Company record as the parent of People records via companyId — a single Company record cannot hold patients from multiple physical locations without losing location context. We create one Company record per practice location, storing the location address and a Location_Code__c custom field. Each patient is then linked to the correct location Company. Practices with more than 10 locations should budget additional schema planning time for the Twenty admin to pre-create all Company records.

  • Twenty CSV import requires custom fields pre-created in Settings before import runs

    Twenty's CSV import creates records, not fields — per the Twenty documentation, all custom fields must exist in Settings → Data Model before a CSV import can populate them. Henry Schein One exports include custom fields unique to each practice (CDT codes, X-ray counts, perio data, provider-specific properties). We deliver a pre-migration checklist naming every custom field that must be created in Twenty, with field type and select-option values, so the Twenty admin can pre-configure the schema. If custom fields are missing during import, those columns are silently ignored and data is lost.

  • Insurance EDI clearinghouse configuration does not migrate

    Henry Schein One maintains EDI enrollment settings with insurance clearinghouses for electronic claim submission. Twenty CRM has no practice management or billing EDI module — all clearinghouse settings are destination-side configuration that must be rebuilt independently. Teams migrating from Dentrix or Dentrix Ascend need to re-enroll with their EDI clearinghouse (e.g., Edsio, DentalXChange) post-migration. The insurance carrier records themselves migrate cleanly as Company records with plan details preserved, but the EDI submission configuration is lost and requires a separate enrollment process with each payer.

  • Large appointment histories may exceed Twenty's 20,000-record CSV export limit

    Twenty's CSV export supports up to 20,000 records per export operation. Practices running Henry Schein One for 10+ years may accumulate 30,000–100,000+ appointment records. We handle this by exporting appointments in date-range batches (e.g., by year or by provider) and running sequential imports, or by using Twenty's API import method for bulk datasets. The batch boundary is invisible to the end user — all appointment Tasks link to the correct People record regardless of which export batch they originated from.

Migration approach

Six steps for a successful Henry Schein One to Twenty CRM data migration

  1. Discover Henry Schein One data structure and export scope

    We audit your Henry Schein One setup to identify all patient records, insurance carriers, appointment history, treatment plan fields, and custom properties. If you use Dentrix, Dentrix Ascend, or Dentally, we note the specific data export paths available (API Exchange vs. direct database export) and confirm record counts per object. We deliver a data inventory document listing every field to migrate, every custom field to create in Twenty, and the import order required to satisfy Twenty's foreign-key constraints (Companies → People → Tasks → Notes).

  2. Create Twenty CRM schema — custom fields and objects first

    Before any data moves, your Twenty admin (or our team) creates all required custom fields in Settings → Data Model. We provide the exact field name, type (text, number, select, multi-select, date, currency), and option values for every Henry Schein One property that lacks a direct Twenty equivalent. For multi-location practices, we also map each practice location to a separate Company record. We do not run the import until all custom fields are confirmed present in Twenty — importing into a missing field silently drops that column.

  3. Migrate insurance carriers as Companies, then patients as People

    We run the migration in the sequence Twenty requires: first, all insurance carrier Company records (with Insurance_Plan_Name__c, Insurance_Group_Number__c, Insurance_Subscriber_ID__c, Insurance_Relationship__c custom fields populated). Second, all patient People records — with name, email, phone, address, date of birth, patient account number, guarantor relation, and custom clinical fields (CDT codes, tooth numbers, X-ray count, treatment plan notes) filled. Third, guarantor People records for patients where the guarantor is a separate individual. This sequence ensures companyId lookups resolve correctly on every People record.

  4. Convert appointment history to Tasks with provider resolution

    We pull appointment records in date-range batches (per the 20,000-record export limit), map each to a Twenty Task with appointment type as name, original notes as body, and appointment date as dueDate. Provider names resolve by email match to existing Twenty users — any provider without a Twenty account is flagged for your team to either invite or assign to a fallback owner before the full migration commits. Original appointment IDs are preserved as Original_Appointment_ID__c on each Task for traceability and delta de-duplication.

  5. Run sample migration with field-level diff, then full cutover

    A representative slice of 50–200 records — spanning patients across age ranges, appointments with different providers, and cases with active treatment plans — migrates first. We generate a field-level diff showing every mapped value side-by-side in source and destination so you can verify custom field completeness, insurance carrier linking, and guarantor relationship construction before the full run. Once approved, the full migration commits. A 24–48 hour delta window captures any patient records or appointments created or modified in Henry Schein One during the cutover. Audit log records every operation; rollback is available if reconciliation reveals unexpected data gaps.

Platform deep dives

Context on both ends of the pair

Henry Schein One logo

Henry Schein One

Source

Strengths

  • Widest installed base of any dental PMS in North America, making integrations and staff familiarity a practical advantage.
  • Integrated ecosystem covering PMS, billing, analytics, marketing, and specialty workflows under one vendor umbrella.
  • API Exchange with SOC 2 Type II compliance and 700 endpoints — meaningful for practices that depend on third-party integrations.
  • Dentrix Ascend eliminates on-premise server hardware and remote desktop dependencies for cloud-oriented practices.
  • OMSVision offers purpose-built surgical scheduling and AAOMS-aligned workflows unavailable in general-purpose dental PMS products.

Weaknesses

  • On-premise Dentrix requires server maintenance, backups, and IT staff that many small practices lack internal capacity to manage.
  • Henry Schein One has restricted third-party API access — Vyne Dental and others cite missing claims workflow data elements and integration discontinuation requirements.
  • Image migration from Dentrix is technically complex due to proprietary file naming, making it the most common source of post-migration data integrity failures.
  • Insurance EDI re-enrollment with payers is required when switching PMS systems, adding 4–8 weeks of administrative work that is not always disclosed upfront.
  • Pricing is opaque and subscription-based ($800–$1,400/month for cloud tiers), with modules priced individually, making total cost unpredictable for small practices.
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 Henry Schein One 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

    Henry Schein One: Not publicly documented per-org limits; enterprise customers receive dedicated API capacity.

  • Data volume sensitivity

    A

    Henry Schein One exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Henry Schein One 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 Henry Schein One to Twenty CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Henry Schein One to Twenty migrations complete in 48–72 hours for practices with under 50,000 patient records. Multi-location group practices or DSO setups with 50,000+ records and complex insurance carrier mappings extend to 5–10 days. The longest phase is custom field creation in Twenty's Settings → Data Model before the import runs — that schema setup typically takes 1–3 days depending on the number of custom fields. We sequence the migration so the Twenty admin can create fields in parallel while we prepare the export files.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Henry Schein One.
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