CRM migration

Migrate from DentAdmin to Twenty CRM

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

DentAdmin logo

DentAdmin

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

10 of 10

objects map 1:1 between DentAdmin and Twenty CRM.

Complexity

BStandard

Timeline

3–7 days

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

DentAdmin is a dental-practice management system built around patient records, appointments, treatment plans, invoicing, and RIZIV-code billing — it is not a general-purpose CRM, which means the data model has deep clinical and financial logic baked into its objects. Twenty CRM is a modern open-source CRM built around People, Companies, Opportunities, Notes, Tasks, and unlimited custom objects. We map DentAdmin patients → Twenty People, referring dentists → Twenty Companies (with type set to 'Referral'), insurance providers → Twenty Companies (type 'Insurance'), appointments → Twenty Tasks with Workspace Member relations, and treatment records → a custom 'Treatment' object. Clinical and billing fields with no CRM equivalent (RIZIV professional codes, Mutuality identifiers, tooth-number fields, treatment codes) migrate as custom fields on the People object or on the Treatment custom object. We export DentAdmin data via its API (3,600 calls per hour limit), batch the requests to stay within that ceiling, and load into Twenty via REST/GraphQL or CSV import depending on record volume. Workflows, automations, and the RIZIV billing engine do not migrate — they have to be rebuilt in Twenty's workflow builder or as custom logic outside the CRM. We run a sample migration first with a field-level diff so you can verify the mapping before the full cutover 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

DentAdmin logo

DentAdmin

What's pushing teams away

  • Limited transparency around subscription pricing makes it difficult for practices to compare cost against alternatives before committing to a contract term.
  • The product appears to have a small market footprint outside Belgium, which limits access to peer reviews, third-party integrations, and specialist support talent.
  • Practices report that the software lacks a well-documented public API, making it difficult to connect with modern third-party tools or automate data workflows.

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 DentAdmin objects map to Twenty CRM

Each row shows how a DentAdmin 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.

DentAdmin

Patient

maps to

Twenty CRM

People

1:1
Fully supported

DentAdmin patients map directly to Twenty People records. All contact fields (name, phone, email, address) migrate as standard Twenty fields. Belgian healthcare identifiers (RIZIV professional codes, Mutuality numbers) are stored as custom text fields on the People record since Twenty has no native Belgian healthcare field. The original DentAdmin patient ID is preserved as Source_System_ID__c for delta-run de-duplication.

DentAdmin

Provider / Referring Dentist

maps to

Twenty CRM

Company

1:1
Fully supported

Referring dentists and specialist providers from DentAdmin map to Twenty Companies with a custom 'ProviderType' field set to 'Referral' or 'Specialist'. The company's name, address, and phone migrate as standard Company fields. If DentAdmin stores multiple provider addresses per dentist, the primary address becomes the Company record and additional addresses are preserved as custom fields or notes.

DentAdmin

Insurance Company

maps to

Twenty CRM

Company

1:1
Fully supported

Mutuality and insurance company records from DentAdmin map to Twenty Companies with a custom 'CompanyType' field set to 'Insurance'. The company's name and registration number migrate as standard fields. Insurance policy numbers and coverage tiers attached to patients migrate as custom fields on the People record rather than on the Company record.

DentAdmin

Appointment

maps to

Twenty CRM

Task

1:1
Fully supported

DentAdmin appointments become Twenty Tasks linked to the Patient (People record) via the Task's ' Person' relation and to the treating provider via the 'Assignee' field mapped to a Twenty Workspace Member. Appointment type (check-up, treatment, consultation) maps to a custom 'AppointmentType' select field. Date and duration migrate as Task due date and a custom duration field. Room and chair assignments from DentAdmin are stored as custom text fields.

DentAdmin

Treatment Record

maps to

Twenty CRM

Custom Object: Treatment

1:1
Fully supported

DentAdmin treatment records have no direct Twenty CRM equivalent — Twenty has no native dental-procedure object. We create a custom 'Treatment' object in Twenty with fields for procedure code (mapped from DentAdmin's RIZIV procedure list), tooth number or quadrant, date performed, treating provider, associated Patient (People relation), and treatment cost. Tooth-number notation (FDI, Universal) is preserved as a text field to avoid data loss on format interpretation.

DentAdmin

Invoice / Financial Record

maps to

Twenty CRM

Custom Object: Invoice

1:1
Fully supported

DentAdmin's invoicing module does not map to any Twenty CRM standard object — Twenty has no native invoicing. Invoice records migrate as a custom 'Invoice' object with fields for invoice number, date, amount, patient (People relation), treatment reference (Treatment custom object relation), and payment status. Original invoice PDFs are exported from DentAdmin and re-uploaded as file attachments to the Invoice record in Twenty.

DentAdmin

Document / Attachment

maps to

Twenty CRM

Note

1:1
Fully supported

DentAdmin document attachments (treatment plans, lab prescriptions, clinical images) associated with a patient become Twenty Notes linked to the People record. If DentAdmin exports attachments as files rather than inline content, the file is downloaded to local storage and re-uploaded to Twenty's file storage, with the file URL embedded in the Note body. Large archives (panoramic X-rays, intraoral scans) may exceed Twenty's default file size limits and are flagged for manual handling.

DentAdmin

Accounting / RIZIV Module

maps to

Twenty CRM

No equivalent in Twenty

1:1
Fully supported

DentAdmin's RIZIV billing engine and accounting module are healthcare-financial constructs with no CRM equivalent. RIZIV procedure codes and Mutuality billing logic do not migrate — those records become reference data on the Treatment custom object, and the billing workflow needs to be rebuilt in Twenty or handled in a separate accounting tool. We preserve all financial transaction records as a custom 'BillingTransaction' object for historical reference.

DentAdmin

Workflows and Sequences

maps to

Twenty CRM

Twenty Workflow Builder

1:1
Fully supported

Appointment reminder sequences, recall workflows, and treatment-plan follow-up sequences in DentAdmin have no direct equivalent in Twenty CRM. They must be rebuilt in Twenty's workflow builder or as an external automation layer. We export DentAdmin workflow definitions as a structured reference document so your Twenty admin can rebuild them in the correct order.

DentAdmin

Reports and Dashboards

maps to

Twenty CRM

Twenty Dashboards

1:1
Fully supported

DentAdmin's built-in clinical and financial reports (RZIV-code utilization, patient retention, treatment revenue by provider) do not migrate. The underlying data — appointments, treatments, invoices — is fully migrated, and the Twenty dashboard builder can reconstruct those reports from the migrated records. We provide a report-mapping worksheet listing each DentAdmin report and its Twenty equivalent using the migrated data.

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.

DentAdmin logo

DentAdmin gotchas

High

No publicly documented REST API for DentAdmin

Medium

Pricing is opaque and requires direct contact

Medium

RIZIV code version drift between systems

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

  • Twenty requires custom fields and objects to exist before import — CSV only creates records, never schema

    Twenty's CSV import creates records within existing fields and objects; it cannot create the fields or objects themselves. If your DentAdmin setup has custom fields (tooth-number notation, Mutuality membership tiers, provider-specialty codes), those fields must be pre-created in Twenty's Settings → Data Model before the migration runs. We deliver a schema setup plan based on your DentAdmin field inventory so your Twenty admin can create all custom fields and the Treatment/Invoice custom objects before we begin loading data. This is the single most common point of failure in Twenty migrations and is handled in our pre-flight step.

  • DentAdmin's API ceiling of 3,600 calls per hour constrains export throughput for large practices

    DentAdmin enforces a rate limit of 3,600 API calls per hour per account, which is documented in their integration community forum. Multi-site practices with 10 or more practice locations compounding into one export job will exhaust this ceiling quickly. We batch DentAdmin API requests with exponential backoff, stagger exports by object type (patients first, then appointments, then treatment records), and resume from the last checkpoint if a rate-limit error interrupts the run. This adds processing time but prevents data truncation mid-export. Practices with fewer than 5,000 total records typically complete the export within the rate-limit window in a single run.

  • RIZIV codes and Mutuality numbers are Belgian healthcare identifiers with no native Twenty CRM field

    DentAdmin stores RIZIV professional registration numbers and Mutuality membership identifiers as core fields on the patient record. Twenty CRM has no native Belgian healthcare identifier fields — these are stored as custom text fields (RIZIVCode__c, MutualityNumber__c) on the People object. RIZIV codes follow a specific numeric format (000-XXXXXXX-YY) and DentAdmin may enforce format validation that Twenty's custom text field does not enforce. We validate the format during the ETL step and flag records with malformed codes before they load into Twenty so you can correct them before they become data-quality problems downstream.

  • Twenty does not have an invoicing or RIZIV billing module — invoice history migrates as a custom object

    DentAdmin's invoicing module handles patient billing, RIZIV-code submission, and Mutuality reimbursement tracking. Twenty CRM has no native invoicing or healthcare billing construct. We migrate invoice records as a custom 'Invoice' object with fields for invoice number, date, amount, and payment status, linked to the Patient (People) and Treatment records. The actual invoice PDFs are exported from DentAdmin and re-uploaded as file attachments to the Invoice record in Twenty. The RIZIV submission workflow itself — the logic that maps a treatment record to a RIZIV code and submits to the Mutuality — is not a CRM function and must be rebuilt in a separate tool or handled manually post-migration.

  • Appointment-to-patient and appointment-to-dentist relationships require Workspace Members to exist in Twenty first

    Twenty's import system requires that any user referenced in a record (as Assignee on a Task, for example) must already exist in the workspace. If a DentAdmin export contains appointments assigned to a dentist whose email does not match an invited Twenty Workspace Member, the assignment cannot map and the record lands without an owner. We run owner resolution by email match before the migration runs: any dentist in DentAdmin without a corresponding Twenty user is flagged, and you either invite them to Twenty first or assign their records to a fallback Workspace Member. This prevents orphaned Tasks in Twenty's pipeline view.

Migration approach

Six steps for a successful DentAdmin to Twenty CRM data migration

  1. Audit DentAdmin data and export capabilities

    FlitStack AI connects to DentAdmin via its REST API and inventories all object types available for export: patients, providers, insurance companies, appointments, treatment records, and attachments. We verify which DentAdmin edition you are running to confirm API access and rate-limit ceiling (3,600 calls/hour), then produce an export plan listing every object, estimated record count, and any fields that cannot be extracted via API (those require CSV export from the desktop application). The audit output is a data inventory document that defines the full scope before any field mapping begins.

  2. Map DentAdmin schema to Twenty data model

    We create a field-level mapping document pairing every DentAdmin field to its Twenty equivalent. Standard contact fields map directly. RIZIV codes, Mutuality numbers, and tooth-notation fields map to custom fields on the People object. Treatment records map to a new 'Treatment' custom object with a relation to People. Invoice history maps to an 'Invoice' custom object. We identify all custom fields and custom objects that must be pre-created in Twenty's Settings → Data Model and deliver the schema setup plan to your Twenty admin with field types, select-option values, and relation definitions. This plan is reviewed and approved before step 3 begins.

  3. Set up Twenty workspace and create custom schema

    Before any data lands, your Twenty admin (or our team) creates the custom fields and custom objects defined in the mapping document. For the Treatment custom object, we define fields for procedure code, tooth number, treatment date, cost, and relations to People and WorkspaceMember. For the Invoice custom object, we define fields for invoice number, date, amount, and payment status. If your DentAdmin setup has provider-specialty pick-list values, those are created as select options in the corresponding custom fields. We verify all fields appear in Twenty's table views before the import step begins.

  4. Run sample migration with field-level diff

    A representative slice of records — typically 100–200 patients spanning different creation dates, a cross-section of providers, and a sample of appointments and treatment records — migrates first. We generate a field-level diff between the DentAdmin source record and the Twenty destination record so you can verify that RIZIV codes, Mutuality numbers, tooth-notation values, and dentist assignments all landed correctly. If a mapping is wrong or a required custom field was missed, this step catches it before the full run commits data. You review the diff and approve the sample before we proceed.

  5. Execute full migration with delta pickup

    Companies migrate first (they have no foreign-key dependencies), then People with their companyId relations, then Tasks with personId and WorkspaceMember assignments, then Treatment and Invoice custom objects with their relations. We batch DentAdmin API calls to stay within the 3,600 calls/hour ceiling using exponential backoff. A delta-pickup window of 24–48 hours runs in parallel with your final DentAdmin use: any appointments booked, patients modified, or treatments recorded in DentAdmin during the cutover are captured and loaded into Twenty after the initial batch completes. An audit log records every operation, and one-click rollback is available if record counts or relationship integrity fail validation.

Platform deep dives

Context on both ends of the pair

DentAdmin logo

DentAdmin

Source

Strengths

  • Native Belgian RIZIV-code and health-insurance billing automation reduces administrative overhead for domestic practices.
  • Managed migration service from CGM Belgium handles database import from any prior dental system at onboarding.
  • Explicit GDPR-conformity statement addresses data-privacy compliance requirements for European dental practices.
  • Multi-provider support within a single database accommodates group practices and multi-dentist clinics.

Weaknesses

  • No publicly documented REST API, limiting automated integrations and making programmatic migration more complex.
  • Subscription pricing is not published publicly, requiring direct contact to obtain a quote.
  • Small international footprint outside Belgium reduces availability of peer reviews, community support, and third-party integration plugins.
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 DentAdmin 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

    DentAdmin: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your DentAdmin 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 DentAdmin to Twenty CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most DentAdmin-to-Twenty migrations complete in 3–7 days for practices with fewer than 5,000 patient records and standard custom fields. Practices exceeding 50,000 total records — including appointment history, treatment records, and insurance company data — extend to 2–4 weeks. The longest planning step is the schema setup in Twenty (creating custom objects and fields), which must be completed before the import runs. DentAdmin's API rate limit of 3,600 calls per hour is the technical ceiling on export throughput; large multi-site exports may require multiple nightly runs to stay within that limit.

Adjacent paths

Related migrations to explore

Ready when you are

Move from DentAdmin.
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