CRM migration

Migrate from The Dental System to Twenty CRM

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

The Dental System logo

The Dental System

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

14 of 14

objects map 1:1 between The Dental System and Twenty CRM.

Complexity

BStandard

Timeline

24–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

The Dental System stores patient data as dental-practice objects: patients with recall intervals, treatment plan values, insurance policy details, hygiene visit dates, and clinical notes tied to provider names. Twenty CRM models its core entities as People (individuals), Companies (organizations), Opportunities (deals), Notes (free-text), and Tasks (action items) — plus custom objects and fields for domain-specific data. FlitStack AI runs a scoped-read export of your The Dental System patient records, maps each dental property to either a native Twenty field or a custom field on the People object, resolves provider names to existing Twenty Workspace Members, and sequences the import so Companies exist before People (Twenty's import-order requirement). Recall dates, last hygiene visit dates, and outstanding treatment values migrate as custom date and currency fields on the People record. Insurance carrier name, policy number, and group number migrate as a grouped set of custom text fields. Appointment history and treatment notes migrate as Notes and Tasks linked to the patient People record. Dental-specific workflows — recall reminder sequences, recall due-date alerts, and recall-stage follow-ups — do not migrate and must be rebuilt in Twenty's workflow builder. File attachments are not included in standard The Dental System exports and require manual re-upload or API-based transfer. The migration runs through Twenty's REST and GraphQL API endpoints (100 requests per minute on the free tier, 200 on paid tiers), with FlitStack pacing requests to avoid throttling and generating a field-level diff report before the full run commits.

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

The Dental System logo

The Dental System

What's pushing teams away

  • No public pricing means every evaluation requires a sales demo, slowing comparison against transparent competitors like DentiMax ($169/month) or MOGO ($250/month flat).
  • Newer product without the multi-decade install base of Dentrix or Open Dental, so the integration ecosystem with imaging vendors, payment processors, and lab partners is shallower.
  • Modern cloud-first design means it does not run offline; practices with unreliable internet (rural, multi-op high bandwidth needs) may prefer Open Dental's local-install model.
  • Limited third-party review presence on G2 and Capterra makes independent quality assessment harder than for legacy market leaders.
  • Marketing claims around AI/clinical intelligence ('thinks like a dentist') are not independently validated; capabilities depth must be confirmed during demo rather than from public materials.

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

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

The Dental System

Patient

maps to

Twenty CRM

People

1:1
Fully supported

The Dental System patient record is the primary unit of migration. Name, email, phone, address, and all dental-specific properties transfer to a Twenty People record. The patient's primary provider resolves to a Twenty Workspace Member by email match before the People record is created.

The Dental System

Patient Recall Date

maps to

Twenty CRM

People custom field Recall_Due_Date__c

1:1
Fully supported

The Dental System stores the next recall date as a patient property. Twenty has no native recall field — FlitStack creates a custom date field (Recall_Due_Date__c) on the People object. The original recall-interval logic (e.g., 6-month hygiene) is preserved as a text note on the People record for the dental office admin to rebuild as a workflow trigger.

The Dental System

Last Hygiene Visit Date

maps to

Twenty CRM

People custom field Last_Hygiene_Visit__c

1:1
Fully supported

The Dental System tracks the last completed hygiene visit per patient. FlitStack creates a custom date field (Last_Hygiene_Visit__c) on the People record to preserve this clinical milestone. After migration the field serves as the anchor date for overdue‑hygiene reports, patient‑lapse segmentation, and recall‑workflow triggers in Twenty's builder. The original visit timestamp is retained as a static value; any subsequent visits must be logged directly in Twenty.

The Dental System

Outstanding Treatment Value

maps to

Twenty CRM

People custom field Outstanding_Treatment_Value__c

1:1
Fully supported

The Dental System stores the dollar value of recommended but uncompleted treatment per patient. This migrates as a custom currency field (Outstanding_Treatment_Value__c) on the People record. It does not transfer to a Twenty Opportunity unless the treatment converts to an active deal — the dental office decides that post-migration.

The Dental System

Insurance Carrier Name

maps to

Twenty CRM

People custom field Insurance_Carrier__c

1:1
Fully supported

The Dental System stores the insurance carrier as a patient sub-field. FlitStack creates a custom text field (Insurance_Carrier__c) on the People record. If the carrier name matches an existing Twenty Company, FlitStack also creates a Company relation on the People record.

The Dental System

Insurance Policy Number

maps to

Twenty CRM

People custom field Insurance_Policy_Number__c

1:1
Fully supported

Policy number migrates as a custom text field (Insurance_Policy_Number__c) on the People record. It is stored from Insurance_Carrier__c; each can be used in filter conditions and workflow rules. FlitStack maps the policy string to the field and logs it in the migration manifest. It can feed segmentation rules, task triggers, and dashboards. If the policy number should match an existing Company, the admin can link it manually after import.

The Dental System

Insurance Group Number

maps to

Twenty CRM

People custom field Insurance_Group_Number__c

1:1
Fully supported

Insurance group number migrates as a custom text field (Insurance_Group_Number__c) on the People record. This field is distinct from the policy number and carrier name. FlitStack maps the group string to the field and logs it in the manifest. As text, it can be used in filter conditions, segmentation, and workflow rules directly. If the group number corresponds to an existing Company, the admin may link it manually after import.

The Dental System

PMS Patient ID

maps to

Twenty CRM

People custom field Source_System_ID__c

1:1
Fully supported

The Dental System's internal patient identifier migrates as a custom text field (Source_System_ID__c) on the People record. FlitStack marks this field as unique, preventing collisions on subsequent imports. The unique constraint supports delta‑run de‑duplication, audit trails, and cross‑system reconciliation with the original PMS. After migration the field can be used in filters, linked relations, and API queries to reference the source patient record directly.

The Dental System

Provider (Primary Dentist)

maps to

Twenty CRM

People WorkspaceMember relation

1:1
Fully supported

The Dental System stores the primary dentist's name as a string on the patient record. FlitStack resolves this name to an existing Twenty Workspace Member by email domain or name match. If no match is found, the provider name is stored as a custom text field (Primary_Dentist__c) on the People record for manual assignment post-migration.

The Dental System

Treatment Notes

maps to

Twenty CRM

Note

1:1
Fully supported

The Dental System stores clinical notes per patient visit. Each note migrates as a Twenty Note linked to the corresponding People record. Original timestamps and provider attribution are preserved as Note metadata. Long notes exceeding Twenty's field length are split into multiple Note records.

The Dental System

Appointment Record

maps to

Twenty CRM

Task

1:1
Fully supported

Patient appointments (cleaning, exam, procedure) migrate as Twenty Tasks linked to the People record. Task subject uses the appointment type from The Dental System, start date uses the appointment date, and the assigning Workspace Member is resolved from the provider name. Completed vs. scheduled status maps to Task completion.

The Dental System

Referral Source

maps to

Twenty CRM

People custom field Referral_Source__c

1:1
Fully supported

Referral source recorded in The Dental System (e.g., patient referral, external referral, marketing campaign) migrates as a custom text field on the People record. If The Dental System uses a pick-list, FlitStack creates a custom select field with the same options.

The Dental System

Patient Address

maps to

Twenty CRM

People address fields

1:1
Fully supported

Street address, city, state, and postal code on the patient record map to Twenty's native address fields on the People object. FlitStack normalizes the source address strings, splitting them into the appropriate sub‑fields (street, city, state, postal code) to match Twenty's expected structure. After migration the normalized address can be used for region‑based segmentation and task triggers based on location.

The Dental System

Dental Practice Location

maps to

Twenty CRM

Company

1:1
Fully supported

If The Dental System stores the practice or location as a separate entity, it maps to a Twenty Company record. The Company record holds the practice name, address, and phone. Patient records link to the Company via the People.companyId relation.

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.

The Dental System logo

The Dental System gotchas

High

No documented public API

Medium

Custom field discovery requires manual audit

Medium

Insurance carrier and payer data may require re-credentialing

Medium

Document storage may not be directly accessible for bulk 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

  • Recall interval logic does not migrate — it must be rebuilt in Twenty's workflow builder

    The Dental System enforces recall intervals (e.g., 6-month hygiene, annual exam) as native patient properties with automatic due-date recalculation. Twenty CRM has no built-in recall model — recall due dates migrate as static custom date fields (Recall_Due_Date__c) but the interval rules that generated them do not transfer. FlitStack surfaces the original interval values as a text field on each People record so the dental admin can rebuild the logic as a workflow: when (Today >= Recall_Due_Date__c) and (Lifecycle = 'Patient') → create Task 'Recall Reminder'. This is pair-level because no CRM besides a dental-specific system carries recall interval logic natively.

  • File attachments require manual re-upload — The Dental System does not export binary files via scoped read

    The Dental System's scoped-read export does not include binary file attachments (uploaded patient documents, insurance cards, treatment plan PDFs, or clinical images). Twenty's CSV import also does not accept binary files. FlitStack generates a manifest listing every attachment reference in The Dental System — file name, record association, and original upload date — so the dental office can manually re-upload or use Twenty's API (200 req/min on paid tiers) to bulk-reload them post-migration. This is pair-level because the export limitation is specific to The Dental System's scoped-read scope, not a universal CRM migration constraint.

  • Twenty's import-order requirement means Companies must migrate before People

    Twenty's data model enforces referential integrity: the People.companyId relation requires an existing Company record. The Dental System does not enforce this dependency in its export. FlitStack re-sequences the migration: first, unique dental practice locations export as Company records; second, patient records create as People records linked to the appropriate companyId. If The Dental System stores the practice as a patient field rather than a separate entity, FlitStack creates a default Company record ('Primary Practice') and links all patients to it, with a post-migration flag to split by location afterward.

  • Insurance coverage percentages and effective dates require multi-field custom mapping

    The Dental System stores insurance as a sub-object with carrier name, policy number, group number, coverage percentage, and effective start/end dates. Twenty has no native insurance object. FlitStack maps the three text fields (carrier, policy, group) to People custom fields. Coverage percentage and effective dates require additional custom fields (Insurance_Coverage_Pct__c and Insurance_Effective_Date__c). Dental offices that use The Dental System's coverage calculations for treatment planning need to rebuild those calculations in Twenty using custom formula fields or a reporting tool, since Twenty's free-tier reporting is basic.

  • Email uniqueness constraint on Twenty People records can cause partial failures

    Twenty enforces email uniqueness at the workspace level: importing a People record with an email address already in the workspace creates a duplicate conflict. The Dental System may contain patients with duplicate email addresses (e.g., family members sharing one email). FlitStack's pre-migration audit flags duplicate emails and applies a rule — by default, the most recently modified patient record wins, and others are imported with a duplicate-email suffix (e.g., [email protected]_2). The dental admin reviews and resolves conflicts post-migration.

Migration approach

Six steps for a successful The Dental System to Twenty CRM data migration

  1. Audit The Dental System data export and define the People schema in Twenty

    FlitStack connects via scoped-read access to The Dental System and exports all patient records, appointment history, treatment notes, and insurance data. We audit record counts, identify custom dental fields (recall dates, PMS IDs, treatment values), and flag duplicate emails and orphaned provider references. In parallel, we create the custom fields on the Twenty People object — Recall_Due_Date__c, Last_Hygiene_Visit__c, Insurance_Carrier__c, Policy_Number__c, Group_Number__c, Treatment_Plan__c, Source_System_ID__c, and others — so the schema is ready before any data lands.

  2. Resolve provider names and Workspace Members by email match

    The Dental System stores primary dentist and assistant names as strings on patient records. FlitStack attempts to match each provider name to an existing Twenty Workspace Member by email address or name. Matched providers link directly to the People record via the assigneeId relation. Providers without a Twenty account are flagged in the migration plan — the dental office either invites them as Workspace Members before the migration or assigns their patients to a fallback owner. No patient record migrates without a resolved or flagged owner.

  3. Import Companies first, then People with full relational mapping

    FlitStack follows Twenty's required import order: Companies (dental practice locations) are created first so their companyId values exist for the People relation. Then patient records are imported as People, each linked to the correct companyId, with all dental custom fields populated. Appointment history creates as Tasks linked to the People records, and treatment notes create as Notes. Each import batch is logged with record counts and error rates. FlitStack paces writes to stay within Twenty's API rate limits (100 req/min free tier, 200 req/min paid tier).

  4. Run a sample migration and generate a field-level diff report

    A representative slice of 100–500 patient records migrates first — spanning different recall statuses, insurance types, and appointment histories. FlitStack generates a field-level diff comparing source values against the Twenty destination fields for each record. The dental office reviews the diff to verify recall date mapping, insurance field completeness, provider resolution, and note linkage. Any mapping corrections feed back into the full migration configuration before the full run commits.

  5. Execute full migration with delta-pickup window and post-migration verification

    The full patient record set migrates against Twenty. A delta-pickup window (24–48 hours) captures any patient records created or updated in The Dental System during the cutover. FlitStack generates a post-migration verification report: record counts by object, error log, and duplicate-email manifest. File attachment manifest is delivered separately for manual re-upload. An audit log captures every operation, and one-click rollback is available if reconciliation fails. The dental office receives a rebuild-reference export for The Dental System recall workflows to re-create in Twenty's workflow builder.

Platform deep dives

Context on both ends of the pair

The Dental System logo

The Dental System

Source

Strengths

  • Covers core dental practice workflows including scheduling, charting, and billing in one system
  • Patient record structure aligns with standard dental data conventions (CDT codes, insurance carriers)
  • Supports document attachments linked to patient records
  • Includes basic reporting for production and collections
  • Practice configuration is stored at the location level, making scoping straightforward

Weaknesses

  • No publicly documented API limits direct integrations and automated migration tooling
  • Limited public information on custom object schema and field-level definitions
  • Pricing and feature tiers are not publicly published, requiring direct inquiry
  • Smaller market footprint means fewer third-party migration resources and community references
  • No published rate-limit or bulk-export documentation found in research
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 The Dental System 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

    The Dental System: Not publicly documented.

  • Data volume sensitivity

    B

    The Dental System doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most The Dental System to Twenty CRM migrations complete within 24–72 hours of clock time for under 10,000 patient records. Practices with 50,000 or more records, multi-location setup, or extensive insurance and treatment-history mapping extend to 5–10 days. The longest planning step is auditing The Dental System's custom dental fields and configuring matching custom fields in Twenty before data validation runs.

Adjacent paths

Related migrations to explore

Ready when you are

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