CRM migration
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
Source
Twenty CRM
Destination
Compatibility
14 of 14
objects map 1:1 between The Dental System and Twenty CRM.
Complexity
BStandard
Timeline
24–72 hours
Overview
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.
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 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
Twenty CRM
People
1:1The 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
Twenty CRM
People custom field Recall_Due_Date__c
1:1The 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
Twenty CRM
People custom field Last_Hygiene_Visit__c
1:1The 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
Twenty CRM
People custom field Outstanding_Treatment_Value__c
1:1The 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
Twenty CRM
People custom field Insurance_Carrier__c
1:1The 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
Twenty CRM
People custom field Insurance_Policy_Number__c
1:1Policy 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
Twenty CRM
People custom field Insurance_Group_Number__c
1:1Insurance 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
Twenty CRM
People custom field Source_System_ID__c
1:1The 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)
Twenty CRM
People WorkspaceMember relation
1:1The 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
Twenty CRM
Note
1:1The 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
Twenty CRM
Task
1:1Patient 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
Twenty CRM
People custom field Referral_Source__c
1:1Referral 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
Twenty CRM
People address fields
1:1Street 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
Twenty CRM
Company
1:1If 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.
| The Dental System | Twenty CRM | Compatibility | |
|---|---|---|---|
| Patient | People1:1 | Fully supported | |
| Patient Recall Date | People custom field Recall_Due_Date__c1:1 | Fully supported | |
| Last Hygiene Visit Date | People custom field Last_Hygiene_Visit__c1:1 | Fully supported | |
| Outstanding Treatment Value | People custom field Outstanding_Treatment_Value__c1:1 | Fully supported | |
| Insurance Carrier Name | People custom field Insurance_Carrier__c1:1 | Fully supported | |
| Insurance Policy Number | People custom field Insurance_Policy_Number__c1:1 | Fully supported | |
| Insurance Group Number | People custom field Insurance_Group_Number__c1:1 | Fully supported | |
| PMS Patient ID | People custom field Source_System_ID__c1:1 | Fully supported | |
| Provider (Primary Dentist) | People WorkspaceMember relation1:1 | Fully supported | |
| Treatment Notes | Note1:1 | Fully supported | |
| Appointment Record | Task1:1 | Fully supported | |
| Referral Source | People custom field Referral_Source__c1:1 | Fully supported | |
| Patient Address | People address fields1:1 | Fully supported | |
| Dental Practice Location | Company1: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.
The Dental System gotchas
No documented public API
Custom field discovery requires manual audit
Insurance carrier and payer data may require re-credentialing
Document storage may not be directly accessible for bulk export
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 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.
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.
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).
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.
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
The Dental System
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 The Dental System and Twenty CRM.
Object compatibility
2 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
The Dental System: Not publicly documented.
Data volume sensitivity
The Dental System 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 The Dental System to Twenty CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave The Dental System
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.