CRM migration

Migrate from Denticon to Twenty CRM

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

Denticon logo

Denticon

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

92%

11 of 12

objects map 1:1 between Denticon and Twenty CRM.

Complexity

BStandard

Timeline

2–4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Denticon stores dental-practice data in a clinical schema built around patients, providers, appointments, treatment plans, insurance claims, and multi-location offices. Twenty CRM uses a generic CRM model with People, Companies, Opportunities, Notes, and Tasks as standard objects plus a fully customizable data model for custom objects and fields. The migration translates Denticon's patient demographics and contact details into Twenty People records, practice-office entities into Twenty Companies, and appointment-revenue history into Twenty Opportunities — with provider assignments resolved by email match against Twenty workspace members. Clinical data (treatment plans, clinical notes, insurance records) has no native equivalent in Twenty's CRM schema and is preserved as custom fields or Notes attachments. Twenty's import tooling (Settings → Data Model) requires all custom fields to exist before CSV import; FlitStack AI creates those fields first, then sequences the import in dependency order (Companies → People → Opportunities → Custom objects) to satisfy foreign-key requirements. Workflows, automation rules, and sequence logic do not migrate — those are rebuilt using Twenty's workflow builder or the REST/GraphQL API. A delta-pickup window of 24–48 hours captures any records modified in Denticon during cutover, and the full operation runs without disrupting active Denticon users.

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

Denticon logo

Denticon

What's pushing teams away

  • Recurring complaints about expensive pricing increases and poor customer service responsiveness, with users noting errors that require calling to reset and long resolution times.
  • Steep learning curve and unintuitive UI make staff onboarding slow, especially for practices switching from simpler legacy systems.
  • Performance and reliability concerns including message delays and intermittent system errors that disrupt front-office operations.
  • Limited custom field capacity — only two alphanumeric fields of up to 25 characters — frustrates practices needing tailored data capture beyond standard properties.
  • Support quality inconsistency drives churn, with some users reporting they cannot reach a live representative to resolve issues in a timely manner.

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

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

Denticon

Patient

maps to

Twenty CRM

People

1:1
Fully supported

Denticon patient records map directly to Twenty People records. The patient's full name, email address, phone number, and postal address transfer as standard Twenty People fields. A custom field (Patient_ID__c) stores the original Denticon patient ID for traceability and delta-run de-duplication.

Denticon

Patient (with guarantor relationship)

maps to

Twenty CRM

People + Custom Guarantor Field

many:1
Fully supported

Denticon patients may have a guarantor who is a separate person (parent, spouse, or third-party) responsible for billing. FlitStack AI creates the primary patient as a Twenty People record and stores the guarantor's name and relationship as a custom text field (Guarantor_Name__c) on that record. If the guarantor is also a tracked contact, they receive a separate People record linked via a relation field.

Denticon

Practice Office (OID)

maps to

Twenty CRM

Company

1:1
Fully supported

Each Denticon Office ID (OID) — representing a physical practice location — maps to a Twenty Company record. The office name, address, and phone become Company fields. For multi-location DSOs, all OIDs are exported separately and loaded as individual Company records, with a custom pick-list field (Location_Type__c) set to 'Dental Practice' to distinguish them from referring provider offices.

Denticon

Referring Provider / External Referral Source

maps to

Twenty CRM

Company

1:1
Fully supported

Denticon's incoming and outgoing referral sources (external dental offices, specialists) are represented as Company records in Twenty. A custom pick-list field (Referral_Source_Type__c) is created to distinguish referring providers from internal practice locations, preserving the referral relationship without requiring a separate junction object.

Denticon

Provider (Dentist / Hygienist)

maps to

Twenty CRM

WorkspaceMember (People record)

1:1
Fully supported

Denticon providers (dentists, hygienists, specialists) are mapped to Twenty Workspace Members. A People record is created for each provider with a custom pick-list field (Provider_Role__c) storing their Denticon provider type. Their email address is used to match against invited Twenty workspace members; unmatched providers are flagged before migration for the team to invite first, per Twenty's warning that user references must exist before import.

Denticon

Appointment

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Each completed or open dental appointment is treated as a line-item in a Twenty Opportunity representing that patient visit or treatment series. The Opportunity Name is constructed from the patient name and appointment date (e.g., 'Smith J - New Patient Exam 2025-03-15'). Custom fields capture the treatment type (Cleaning, Restorative, Surgical, etc.), provider assigned, and appointment status. Open vs. completed status maps to Opportunity Stage values created during Twenty setup.

Denticon

Treatment Plan / Procedure Record

maps to

Twenty CRM

Note + Custom Fields

1:1
Fully supported

Denticon treatment plans and individual procedure codes (ADA codes) have no direct equivalent in Twenty's standard schema. FlitStack AI exports each treatment plan as a Twenty Note attached to the patient People record, with a structured text format listing procedure codes, tooth numbers, surfaces, and fees. For practices that need searchable procedure data, custom fields (Last_Treatment_Code__c, Last_Treatment_Date__c) are created on the People object.

Denticon

Insurance Claim / RCM Record

maps to

Twenty CRM

Custom Object + Note

1:1
Fully supported

Denticon's RCM (Revenue Cycle Management) module — including insurance claims, claim status, adjustments, and payments — has no CRM equivalent in Twenty. FlitStack AI exports claim summaries as Notes on the patient record. For practices with complex billing histories, a custom object (Insurance_Claim__c) is created with fields for claim number, carrier, status, amount billed, and amount paid — this requires the team to configure the object in Settings → Data Model before migration runs.

Denticon

Patient Communication / Message Log

maps to

Twenty CRM

Task

1:1
Fully supported

Denticon's 2-way texting log and automated campaign delivery records map to Twenty Tasks. Each outbound or inbound patient message is created as a Task with Type='Message', linked to the patient People record. Original timestamps, message content, and delivery status are preserved in the Task description field.

Denticon

Custom Field (Patient-Level)

maps to

Twenty CRM

Custom Field on People

1:1
Fully supported

Denticon allows two alphanumeric custom fields per patient record (each up to 25 characters) accessible in Office Setup screens. FlitStack AI creates matching custom fields on the Twenty People object (up to 2 custom fields per migration scope) and populates them from the Denticon export. Practices using the API-based custom field extension pattern store values in custom text fields named to match their Denticon field labels.

Denticon

Recall / Re-Care Schedule

maps to

Twenty CRM

Task + Custom Date Field

1:1
Fully supported

Denticon recall appointments (hygiene re-care, annual exam reminders) map to Twenty Tasks with a due date set to the recall date. A custom datetime field (Next_Recall_Date__c) is added to the People record so the recall window is visible directly on the contact without opening the task. Completed recalls are linked to the patient as a closed Task.

Denticon

Patient Attachments / Files

maps to

Twenty CRM

Note attachments or external URL field

1:1
Fully supported

Denticon file attachments (treatment plan PDFs, insurance cards, signed consent forms) cannot be re-hosted inside Twenty's standard attachment model. FlitStack AI downloads all attachments, stores them in the customer's designated cloud storage, and creates a Note on the patient record with a link to the file. The customer configures their own storage bucket; FlitStack does not host files long-term.

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.

Denticon logo

Denticon gotchas

High

PGID Split requires signed agreements and coordination between buyer and seller

Medium

Chrome cache and bad shortcuts corrupt patient context between sessions

Medium

Custom fields are severely limited to two fields of 25 characters

Low

API writeback scope is limited to specific endpoints

Low

Automated campaign quiet hours restrict message delivery timing

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 all custom fields to exist before CSV import — they are not auto-created

    Twenty's CSV import function reads data into existing fields; it cannot create fields on the fly. This means the entire custom field schema — Last_Treatment_Code__c, Next_Recall_Date__c, Insurance_Carrier__c, Guarantor_Name__c, NPI__c, and any custom select options — must be built in Settings → Data Model before FlitStack runs the first import. For practices with 20+ custom fields, this pre-work phase adds 2–4 days to the project timeline. We deliver a field-creation checklist derived from the Denticon custom field export so your admin can pre-build the schema without guessing.

  • Multi-location DSO accounts require PGID-to-workspace mapping decisions before migration

    Denticon DSOs store all locations under a single PGID (Practice Group ID), with each office as a separate OID. Twenty has no native multi-PID concept — each office must become its own Company record. For DSOs migrating more than five locations, FlitStack AI creates a Company record per OID and adds a custom pick-list field (Location_ID__c) storing the original OID. The team must decide before migration whether referring provider offices are loaded as separate Company records or excluded — this affects the record count and the referral history that can be preserved.

  • Workflows, patient communication sequences, and recall automations do not migrate

    Denticon's automated patient communication campaigns (2-way texting, recall reminders, appointment confirmations) are built on Denticon's internal messaging engine and cannot be exported as reusable automation definitions. Twenty's workflow builder supports basic day-to-day automations but does not include a native sequencing engine for multi-step patient outreach. We export the workflow logic as a documented rebuild reference (step descriptions, timing rules, trigger conditions) so your Twenty admin can recreate the logic. For practices relying heavily on automated recall campaigns, plan 2–3 weeks of rebuild work after go-live.

  • Provider-user matching by email is required for Twenty's relation fields to resolve

    Twenty's warning is explicit: 'Invite users BEFORE importing data. If your data includes user references, those relations cannot be mapped.' FlitStack AI resolves Denticon provider IDs to Twenty People records by matching the provider's email address against invited workspace members. If a Denticon provider does not have an email in the system or the email does not match a Twenty invite, the relation is stored as a custom text field (Provider_Name_Fallback__c) and the team resolves it manually post-migration. Practices with 15+ providers across multiple offices should audit their provider email list before kickoff.

  • Clinical treatment records and ADA procedure codes require custom object configuration

    Denticon's clinical module stores ADA procedure codes, tooth numbers, surfaces, and treatment plan details in a structured clinical schema. Twenty has no dental clinical object and no procedure-code taxonomy. FlitStack AI exports the clinical record as a structured Note (ADA code, tooth/surface, fee, date) attached to the patient People record. For practices that need searchable procedure history, a custom object (Treatment_Record__c) can be created in Twenty's Settings → Data Model with fields for procedure_code__c, tooth_number__c, surface__c, fee__c, and date__c — but this object must be configured before migration and its schema reviewed for the custom object limits on your Twenty plan (10 on Cloud Pro, unlimited on Organization).

Migration approach

Six steps for a successful Denticon to Twenty CRM data migration

  1. Audit Denticon data export and build Twenty field schema

    FlitStack AI exports a full snapshot from Denticon via its REST API (Patients, Providers, Appointments, Practice Offices, Referrals) and CSV admin exports. We audit record counts, identify custom field values, and flag any records with missing email addresses or provider assignments. Simultaneously, we deliver a Twenty field-creation checklist: a list of every custom field and custom object required (DOB__c, Provider_Role__c, Next_Recall_Date__c, Treatment_Record__c, etc.) with field types, select options, and the Settings → Data Model path where each is created. Your Twenty admin builds these fields before the import runs — this is the only manual pre-work required.

  2. Invite all workspace members and resolve provider-to-user email matches

    Twenty requires all users to exist in the workspace before import can map relation fields. FlitStack AI exports the provider list from Denticon and cross-references it against the Twenty workspace member list. Unmatched providers are flagged with their Denticon email (or 'no email in Denticon' label) so the team can either invite them to Twenty or assign a fallback owner. This step prevents the 'relation cannot be mapped' error that Twenty throws when a referenced user does not exist at import time.

  3. Sequence import in dependency order: Companies → People → Opportunities → Custom Objects

    Twenty enforces import order because foreign-key relations must resolve before they are referenced. FlitStack AI imports in this sequence: (1) Practice Offices as Twenty Companies, (2) Referring Providers as Companies, (3) Patients as Twenty People (linked to their primary office Company), (4) Providers as Twenty People with Provider_Role__c set, (5) Appointments as Opportunities (linked to patient People and provider People), (6) Treatment Records as Notes or Custom Objects. Each step includes a field-level diff against the source export so you can verify record counts and field values before the next step starts.

  4. Run sample migration with field-level diff and root-cause any mismatches

    A representative slice of records — typically 200–500 patients spanning multiple offices, plus associated appointments and providers — migrates first. FlitStack AI generates a side-by-side field-level diff showing every source Denticon value and its corresponding Twenty field value. We verify that DOB fields populated, provider relations resolved, opportunity amounts matched, and recall dates transferred correctly. Any mapping errors are corrected in the migration configuration before the full run commits. This step typically takes 1–2 days and is the last chance to adjust field mappings before bulk data lands.

  5. Execute full migration with delta-pickup window and one-click rollback

    The full Denticon export is processed through the validated migration pipeline. During the cutover window (24–48 hours), your team continues working in Denticon — FlitStack AI uses scoped read access only. A delta export captures any records created or modified after the initial snapshot. After the delta is applied, a reconciliation report compares record counts by object between the final Denticon snapshot and the Twenty target. If reconciliation fails, one-click rollback reverts the Twenty workspace to its pre-migration state. An audit log documents every record created, updated, or skipped.

Platform deep dives

Context on both ends of the pair

Denticon logo

Denticon

Source

Strengths

  • Consolidates patient portal, online scheduling, imaging, billing, and RCM into a single cloud subscription.
  • Multi-location architecture with office-level assignment of providers, users, and production types.
  • Integrated revenue cycle management with Denticon Pay for streamlined AR and payment processing.
  • Enterprise reporting and analytics across clinical, operational, and financial dimensions.
  • HIPAA-compliant cloud hosting with data backups and managed security included.

Weaknesses

  • Only two custom fields of up to 25 characters each on major objects — severely limits practice-specific data capture.
  • Customer support quality is inconsistent; users report long resolution times and difficulty reaching live representatives.
  • Steep learning curve for staff accustomed to simpler legacy dental software systems.
  • Performance and reliability issues including message delivery delays and intermittent system errors.
  • Pricing increases over time generate significant negative feedback on review platforms.
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 Denticon 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

    Denticon: Not publicly documented in either the legacy reference (api.denticon.com) or the new developer portal pages indexable without authentication. Confirm at partner onboarding..

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Denticon-to-Twenty migrations complete in 2–4 weeks for practices with fewer than 10,000 patient records and fewer than 15 custom fields. Multi-location DSO setups with 50,000+ records and 25+ custom fields typically require 6–8 weeks. The longest planning step is creating the Twenty custom field schema in Settings → Data Model before the first CSV import runs — this pre-work phase is 2–4 days of admin effort and must be completed before FlitStack can begin the data migration.

Adjacent paths

Related migrations to explore

Ready when you are

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