CRM migration

Migrate from Dent-O-Soft to Odoo CRM

Field-level mapping, validation, and rollback between Dent-O-Soft and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.

Dent-O-Soft logo

Dent-O-Soft

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

92%

11 of 12

objects map 1:1 between Dent-O-Soft and Odoo CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Dent-O-Soft stores dental practice data — patients, appointments, treatment plans, billing records, and supplier contacts — in a clinical management schema that differs fundamentally from Odoo CRM's business relationship model. FlitStack AI's migration engine extracts Dent-O-Soft records via the platform's API, transforms each patient record into an Odoo res.partner contact, maps appointment timestamps to Odoo mail.activity records, and surfaces treatment histories as custom fields (x_treatment_history, x_primary_insurance, x_dental_provider) on the contact form. The migration handles Dent-O-Soft's multi-address practitioner records and supplier contacts by splitting them into separate Odoo contacts with a custom contact_type tag. Foreign-key resolution runs before the main import so that Odoo's parent-company hierarchy (parent_id on res.partner) builds correctly. After the bulk load, a 24–48 hour delta window catches appointments scheduled during the cutover. FlitStack does not migrate clinical workflow rules, imaging files stored in Dent-O-Soft's imaging module, or billing transaction history — those require separate export-for-rebuild workflows documented in the post-migration handoff package.

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

Dent-O-Soft logo

Dent-O-Soft

What's pushing teams away

  • When practices grow to multiple locations or add specialists, Dent-O-Soft does not appear to have published multi-site management or role-based access controls that large dental groups typically require.
  • Integration options with third-party imaging systems, e-prescribing platforms, and clearinghouses are not clearly documented, leading some practices to switch to platforms with more active marketplace ecosystems.
  • Support responsiveness and the availability of certified implementation consultants appear inconsistent compared to larger dental software vendors with formal channel partner networks.
  • Pricing structure is not transparently published, making it difficult for practices to compare total cost of ownership including modules for patient communication, insurance eligibility, and analytics.

Choosing

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How Dent-O-Soft objects map to Odoo CRM

Each row shows how a Dent-O-Soft object lands in Odoo CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.

Typical mapping — final map is confirmed during the sample migration step.

Dent-O-Soft

Patient

maps to

Odoo CRM

res.partner

1:1
Fully supported

Dent-O-Soft patient records map directly to Odoo res.partner contacts. The patient's full name splits into firstname and lastname on res.partner. Email, phone, and address fields map 1:1 to their Odoo counterparts. Dent-O-Soft's patient_id becomes x_source_patient_id custom field for traceability and delta-run de-duplication, ensuring that repeated migration runs do not create duplicate contacts in Odoo.

Dent-O-Soft

Patient Insurance

maps to

Odoo CRM

res.partner (custom fields)

1:1
Fully supported

Insurance provider name, policy number, and group number from Dent-O-Soft patient records migrate to custom fields x_primary_insurance_provider and x_insurance_policy_number on res.partner. Secondary insurance maps to x_secondary_insurance_provider as additional text fields. All insurance fields preserve the original Dent-O-Soft values exactly as entered, including any formatting or special characters present in the source data.

Dent-O-Soft

Treatment History

maps to

Odoo CRM

res.partner (custom field)

1:1
Fully supported

Dent-O-Soft stores procedure codes, dates, and notes in a treatment history table with multiple rows per patient. FlitStack concatenates this into a structured text block stored in x_treatment_history__c in Enterprise or x_treatment_history on Community, preserving the date, procedure code, and dentist name for each entry. Entries are separated by newlines for readability and searchability within the Odoo interface.

Dent-O-Soft

Appointment

maps to

Odoo CRM

mail.activity

1:1
Fully supported

Dent-O-Soft appointment records containing date, time, practitioner, procedure_type, and status map to Odoo mail.activity entries linked to the patient res.partner. Activity type defaults to 'appointment' using mail.activity.type configuration, with the original appointment datetime stored in activity_date_deadline and appointment notes preserved in the activity note field including any HTML formatting that exists in the source records.

Dent-O-Soft

Practitioner / Dentist

maps to

Odoo CRM

res.partner

1:1
Fully supported

Dentists and hygienists in Dent-O-Soft migrate as separate res.partner records tagged with contact_type = 'practitioner' using a custom x_contact_category field. Their professional credentials store in x_credential, license numbers in x_license_number, and specialty designations in x_specialty custom fields on the partner record for complete practitioner profiles in Odoo.

Dent-O-Soft

Supplier / Lab

maps to

Odoo CRM

res.partner

1:1
Fully supported

Dental labs and material suppliers from Dent-O-Soft map to res.partner with supplier = True flag set on the partner record. Contact type set to 'supplier' in the x_contact_category custom field. Primary contact person name, email, and phone map directly to the corresponding res.partner fields, while lab-specific flags like is_lab store in x_is_dental_lab custom field.

Dent-O-Soft

Emergency Contact

maps to

Odoo CRM

res.partner

1:many
Fully supported

Dent-O-Soft patients can have multiple emergency contacts stored as separate related table rows. Each emergency contact row becomes its own res.partner record with contact_type = 'emergency' in the x_contact_category field and a parent_id link back to the patient partner record using Odoo's child contact relationship. The relationship type between patient and emergency contact stores in x_emergency_relationship custom field.

Dent-O-Soft

Billing Record

maps to

Odoo CRM

account.move (reference only)

1:1
Fully supported

Dent-O-Soft billing transactions including charges, payments, and adjustments have no direct Odoo CRM equivalent in the base CRM app. The migration preserves x_last_billing_date and x_outstanding_balance as custom Char fields on res.partner for reference. Full billing history export provided as CSV for Odoo Accounting module import, including invoice numbers, dates, amounts, and payment status for each transaction.

Dent-O-Soft

Clinical Note

maps to

Odoo CRM

mail.message

1:1
Fully supported

Treatment notes and clinical observations stored in Dent-O-Soft map to Odoo mail.message records attached to the patient res.partner. Author resolved by practitioner email match against Odoo system users. The body field preserves original note text exactly as entered, including any clinical terminology or formatting, with the creation datetime matching the original Dent-O-Soft timestamp to maintain clinical record chronology.

Dent-O-Soft

Appointment Reminder

maps to

Odoo CRM

base.automation rule

1:1
Fully supported

Automated reminder rules configured in Dent-O-Soft have no Odoo equivalent that migrates automatically between the two platforms. FlitStack exports reminder configuration as a structured JSON document that Odoo administrators use to rebuild automation rules in Odoo's base.automation or mail.activity.plan framework. The export includes trigger conditions, timing offsets, notification channels, and recipient filters from the source system.

Dent-O-Soft

Practice Setting

maps to

Odoo CRM

res.company

1:1
Fully supported

Multi-location dental practices using Dent-O-Soft's practice identifier system map to separate res.company records in Odoo for each physical location. Each company's name, address, and NPI or tax ID stored in standard Odoo company fields including street, city, state_id, zip, and country_id. The practice name from Dent-O-Soft maps to the res.company name field, and location-specific contact information preserves for each branch.

Dent-O-Soft

Referral Source

maps to

Odoo CRM

crm.lead (source field)

1:1
Fully supported

Dent-O-Soft tracks referral source for new patients as a field on the patient record. This data transforms into crm.lead.source values on the original patient-contact record in Odoo, allowing practices to maintain referral tracking visibility within the CRM. FlitStack creates source tags in Odoo's crm.lead.source model matching the Dent-O-Soft referral source values, enabling reporting on referral trends by source.

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.

Dent-O-Soft logo

Dent-O-Soft gotchas

High

No API and no documented bulk export path

Medium

On-premises deployment with limited remote access

Medium

No free trial and no published pricing

Low

Single-language support (English) and small distribution footprint

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • Appointment-to-activity type mapping loses clinical context without custom activity types

    Dent-O-Soft stores appointment procedure_type as a structured dental code (e.g., D0120, D2750) that carries clinical meaning. Odoo mail.activity has a fixed set of activity types that don't natively include dental procedure codes. FlitStack migrates these as custom Char fields (x_procedure_type), but the clinical taxonomy is flattened. Practices that depend on procedure-code reporting need to create custom activity type records in Odoo post-migration and map the codes manually — otherwise analytics on appointment types require custom reports built on the custom fields rather than native activity type filters. This is a high-severity limitation for practices using procedure codes for insurance billing or production tracking.

  • Binary imaging files (X-rays, intraoral photos) do not migrate via standard data export

    Dent-O-Soft stores X-rays, intraoral photographs, and scanned consent forms as binary blobs in its imaging module. Odoo CRM stores ir.attachment records linked to res.partner, but Dent-O-Soft's export API does not surface binary field data in a format compatible with Odoo's attachment import. FlitStack can export imaging file metadata (filename, date, record association) and provide a separate file-folder export, but the actual binary re-upload requires manual intervention or a custom connector. Practices should plan for a separate imaging migration phase and determine whether Odoo's document management module (Documents app) will be used to store the files.

  • Multi-emergency-contact records require manual contact hierarchy setup after bulk import

    Dent-O-Soft allows patients to have unlimited emergency contact rows stored as separate related records. Odoo res.partner's child contact model works well for this use case, but Odoo's import tools process parent_id as a name lookup rather than an ID, which fails when the parent hasn't been created yet. FlitStack resolves this by staging emergency contacts after all patients are loaded and updating parent_id by source patient_id match. However, Odoo's contact_type field must be set correctly (using x_contact_category custom field) to distinguish emergency contacts from related persons — FlitStack sets this automatically, but the Odoo UI may show the contact under the wrong section without a contact type tag configured in Odoo's partner configuration.

  • Odoo res.partner has no native treatment history field — dental data requires upfront custom field creation

    Unlike Dent-O-Soft which has a dedicated treatment history table, Odoo CRM's res.partner model has no native field for clinical history. Before FlitStack can migrate treatment data, the Odoo administrator (or FlitStack's setup team) must create the x_treatment_history custom field on res.partner. If using Odoo Community, custom fields require developer mode and technical knowledge of Odoo's fields definition syntax. If using Odoo Enterprise with Studio, fields can be added via the UI, but the field must be created before the migration run begins — otherwise FlitStack falls back to storing treatment history as a JSON-serialized custom field, which breaks Odoo's built-in search and reporting on that data.

  • Billing outstanding balance migration creates reference data only — not live receivables

    Dent-O-Soft billing records (charges, payments, adjustments, outstanding balances) are accounting records that belong in Odoo's account.move model, not res.partner. Migrating them as such requires Odoo Accounting to be installed and configured with the correct chart of accounts. Many dental practices moving to Odoo CRM run only the CRM app initially, without Accounting. In this configuration, FlitStack preserves x_outstanding_balance and x_last_billing_date as reference custom fields on the contact — these are informational only and do not sync to Odoo's payment reconciliation or accounts receivable reporting. Practices expecting live billing visibility must enable Odoo Accounting and run a separate billing migration with the account.move model.

Migration approach

Six steps for a successful Dent-O-Soft to Odoo CRM data migration

  1. Stand up Odoo custom fields and activity types before migration

    FlitStack delivers a custom field manifest listing every x_ prefixed field that must exist on res.partner and mail.activity before the migration runs. This includes x_treatment_history, x_primary_insurance_provider, x_insurance_policy_number, x_date_of_birth, x_source_patient_id, and x_original_create_date. The manifest also includes activity type records that need to exist in mail.activity.type (e.g., 'Dental Appointment', 'Consultation', 'Follow-up'). Your Odoo administrator (or FlitStack's setup team) creates these in developer mode or via Studio before data begins loading. No records can import until custom fields exist — this step prevents the fallback-to-JSON scenario described in Gotcha #4.

  2. Resolve practitioner and supplier owners by email match

    Dent-O-Soft stores practitioner_id and supplier_contact_id as foreign keys. FlitStack extracts the practitioner email from Dent-O-Soft's user table and matches it against Odoo system users. Matched practitioners become the mail.activity user_id owner for their appointments. Suppliers matched by contact email become res.partner supplier records with supplier=True. Unmatched practitioners and suppliers are flagged in a pre-migration report — your team either invites them as Odoo users first or assigns their records to a fallback owner (typically the admin user). No activity or contact lands without a resolved owner.

  3. Stage parent records (patients, practitioners, suppliers) before child records

    Odoo's database requires res.partner parent records to exist before child emergency contacts can link via parent_id. FlitStack sequences the migration: first all patient partners (as main contacts), then all practitioner partners, then all supplier partners — each batch completes before the next begins. This ensures foreign-key resolution works without orphans. After the main patient batch completes, FlitStack runs a second pass to link emergency contacts to their parent patient using x_source_patient_id as the matching key.

  4. Run sample migration with field-level diff on 200–500 patient records

    A representative slice migrates first: 200–500 patient records spanning different states, insurance types, and appointment histories. FlitStack generates a field-level diff report comparing source Dent-O-Soft values against the target Odoo res.partner fields. The diff verifies custom field population, activity date mapping, emergency contact linkage, and owner resolution. You review the diff and approve before the full run commits. This step catches mis-mapped state_id values, incorrect date formats, and missing activity type records before they affect thousands of records.

  5. Execute full migration with 24–48 hour delta-pickup window

    Full record batch loads into Odoo: patients → practitioners → suppliers → emergency contacts → appointments as mail.activity records. A delta-pickup window opens at migration start and runs for 24–48 hours after the bulk load completes. Any Dent-O-Soft appointments created or modified during the cutover window are captured and loaded as supplemental mail.activity records. FlitStack's audit log tracks every insert and update. If reconciliation fails, one-click rollback reverts the Odoo database to its pre-migration state. Post-migration, FlitStack delivers the appointment reminder automation export JSON for Odoo admin to rebuild in base.automation.

Platform deep dives

Context on both ends of the pair

Dent-O-Soft logo

Dent-O-Soft

Source

Strengths

  • Covers scheduling, clinical charting, patient billing, and lab/vendor management in one database.
  • Per-tooth graphical charting with linked treatment history gives clinicians a visual clinical record.
  • Integrated charge and payment posting against patient accounts.
  • Supplier and dental technician records maintained alongside patient data.
  • Designed for small-to-mid-size single-location dental practices.

Weaknesses

  • No publicly documented API for bulk data export or integration with external systems.
  • Multi-location and DSO-scale role management capabilities are not described.
  • Integration marketplace for imaging, e-prescribing, and clearinghouses is not publicly documented.
  • Pricing tiers and module-level costs are not transparently published on the vendor website.
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a manual workaround.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Dent-O-Soft and Odoo CRM.

  • Object compatibility

    B

    1 of 8 objects need a manual workaround.

  • 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

    Dent-O-Soft: N/A.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Dent-O-Soft to Odoo 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 Dent-O-Soft to Odoo CRM data migrations

Answers to the questions buyers ask most during Dent-O-Soft to Odoo CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Dent-O-Soft to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Dent-O-Soft to Odoo CRM migrations complete in 48–72 hours for practices with under 25,000 patient records. Larger setups with 100,000+ records, complex supplier contact networks, or practices that include imaging file exports extend to 5–8 days. The longest planning step is custom field creation in Odoo before data loads — this requires Odoo administrator access and must be completed before FlitStack's migration engine can map treatment histories and insurance data to the correct fields.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Dent-O-Soft.
Land in Odoo 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