CRM migration

Migrate from NeoDeck Holdings to Odoo CRM

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

NeoDeck Holdings logo

NeoDeck Holdings

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between NeoDeck Holdings and Odoo CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

NeoDeck Holdings operates the NeoMed EHR ecosystem, which stores patient and provider contacts alongside billing and claims workflow data. The platform does not expose a public REST API for bulk record export, so migration requires scoped read access to the NeoMed database or NeoDeck's internal export utilities to extract contacts, organizations, deals, and custom property values. FlitStack AI sequences the extraction to resolve foreign-key dependencies — organizations load first as res.partner records, then contacts attach via partner_id, then deals attach as crm.lead records. Custom properties (specialty, payer relationships, insurance plan identifiers) migrate as custom.char, custom.selection, or custom.many2one fields on the appropriate Odoo model. NeoDeck's internal notes and communication logs map to Odoo mail.message records with original timestamps and author IDs preserved. Workflows, automations, and billing logic do not migrate — those are rebuilt in Odoo's Studio automation tools post-migration. The Odoo XML-RPC API (jsonrpc endpoint) handles record creation; rate limits are respected to avoid throttling during large-volume passes.

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

NeoDeck Holdings logo

NeoDeck Holdings

What's pushing teams away

  • Healthcare focus means CRM-classified pages are misaligned — NeoDeck does not offer a general CRM product, so buyers seeking sales-CRM functionality should look elsewhere.
  • Regional focus on Puerto Rico/Caribbean limits suitability for practices expanding to mainland US or international markets where local-regulatory specialization is required.
  • No published pricing — every deal is sales-led, creating procurement friction vs. published-price EHR vendors.
  • Limited public API and integration documentation makes connecting NeoMed to lab systems, modern HL7-FHIR integrations, or analytics platforms harder than with API-first EHRs.
  • Smaller market footprint than mainstream EHRs (Epic, Cerner, Athenahealth, eClinicalWorks) means fewer third-party connectors and less community implementation knowledge.

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 NeoDeck Holdings objects map to Odoo CRM

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

NeoDeck Holdings

Patient Contact

maps to

Odoo CRM

res.partner

1:1
Fully supported

NeoDeck patient contact records map to Odoo res.partner entries. Each partner is created as an individual contact with type='contact', preserving the patient's demographic information including name components (firstname, lastname), address details, phone numbers, and email. Any custom clinical properties stored in NeoDeck (such as date of birth, risk tier, or referral source) migrate as x_ prefixed custom fields on the res.partner record, ensuring all patient context carries forward into Odoo without data loss.

NeoDeck Holdings

Provider Organization

maps to

Odoo CRM

res.partner

1:1
Fully supported

NeoDeck provider organization records (including clinics, hospitals, and group practices) map to Odoo res.partner entries created with type='contact' and is_company=True to designate them as company records. Each organization partner preserves the provider's name, website, and primary contact information. Provider-specific attributes such as NPI number, medical specialty, and billing address are stored as custom fields on the company partner record, maintaining the clinical context of each organization in Odoo's CRM.

NeoDeck Holdings

Insurance Payer Record

maps to

Odoo CRM

res.partner

1:1
Fully supported

NeoDeck insurance payer entities (insurance companies, plan administrators) map to Odoo res.partner records with a custom partner_type='payer' tag. Odoo does not have a native payer concept, so we create a custom selection field (x_payer_type) to distinguish payers from clinical contacts and sales accounts.

NeoDeck Holdings

Patient-to-Payer Link

maps to

Odoo CRM

res.partner (custom relation)

1:1
Fully supported

NeoDeck stores the relationship between a patient and their insurance payer (plan name, member ID, group number) as a property on the contact. These map to custom fields on the patient res.partner record: x_insurance_plan (char), x_member_id (char), x_group_number (char), x_payer_partner_id (many2one to the payer partner).

NeoDeck Holdings

Provider Deal / Service Agreement

maps to

Odoo CRM

crm.lead

1:1
Fully supported

NeoDeck deal records (including service agreements, licensing contracts, and pipeline opportunities) map to Odoo crm.lead records created with type='opportunity' to distinguish them from raw leads. The crm.lead.name field captures the deal title or description from NeoDeck, planned_revenue maps directly from the deal amount field, and date_deadline corresponds to the target close date. Additional deal-level custom properties such as contract type or implementation milestones also migrate to custom fields on the crm.lead record.

NeoDeck Holdings

Deal Stage

maps to

Odoo CRM

crm.lead.stage_id

1:1
Fully supported

NeoDeck deal status strings (e.g., Prospecting, Proposal, Under Review, Won, Lost) map via value-by-value lookup to Odoo stage_id records. Probability percentages from Odoo's stage configuration are applied per stage. We create the stage records in the target Odoo database before migration runs.

NeoDeck Holdings

Owner / Responsible Provider

maps to

Odoo CRM

crm.lead.user_id

1:1
Fully supported

NeoDeck owner (sales rep, account manager, or assigned provider) resolves by email match against Odoo res.users. Unmatched owners are flagged before migration; the customer either pre-creates Odoo users or assigns to a fallback user_id. No crm.lead lands without a responsible user.

NeoDeck Holdings

NeoDeck Custom Properties (Contact-level)

maps to

Odoo CRM

res.partner custom fields

1:1
Fully supported

NeoDeck custom properties on contacts (e.g., clinical specialty, NPI number, referral source, patient risk tier) migrate as x_ prefixed custom fields on res.partner. Odoo Community requires Developer Mode to create fields; Enterprise exposes a Custom Fields UI. FlitStack delivers a field-creation script as part of the migration package.

NeoDeck Holdings

NeoDeck Custom Properties (Deal-level)

maps to

Odoo CRM

crm.lead custom fields

1:1
Fully supported

NeoDeck deal-level custom properties (such as contract type, license count, implementation milestone flags, and renewal dates) migrate as x_ prefixed custom fields on the crm.lead model. These custom fields preserve the full business context and operational details associated with each opportunity, eliminating the need to reference external systems or maintain separate custom objects in Odoo. The FlitStack migration package includes a custom module manifest that defines all deal-level custom fields before migration execution.

NeoDeck Holdings

Communication Log / Clinical Note

maps to

Odoo CRM

mail.message

1:1
Fully supported

NeoDeck appointment logs, clinical notes, and internal communication entries map to Odoo mail.message records attached to the relevant res.partner or crm.lead. Original author_id (resolved by email match to res.users), create_date, and body text are preserved. Attachments re-upload to Odoo ir.attachment.

NeoDeck Holdings

NeoDeck Attachments

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Documents attached to NeoDeck patient records, provider records, or deals migrate to Odoo ir.attachment linked to the corresponding res.partner or crm.lead record. File content is Base64-encoded and uploaded via xmlrpc. Odoo's default 25MB per-file limit is enforced; files exceeding this are flagged for manual handling.

NeoDeck Holdings

NeoDeck User / Staff Account

maps to

Odoo CRM

res.users

1:1
Fully supported

NeoDeck user accounts (providers, billing staff, admin) do not map to Odoo res.users in the CRM migration scope. Staff who will use Odoo CRM must be provisioned separately in the target Odoo instance. NeoDeck user IDs are stored on records as x_source_user_id for traceability.

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.

NeoDeck Holdings logo

NeoDeck Holdings gotchas

High

No public API requires coordinated export with customer service

Medium

Insurance payer IDs require manual cross-reference mapping

Medium

Cloud and client/server deployments have different export paths

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

  • NeoDeck lacks a public REST API — export scope requires scoped database read access

    NeoDeck Holdings does not publish a documented public API for bulk record extraction. Migration depends on either NeoDeck's internal CSV export utility (which produces flat files without relational IDs) or direct database read access granted by the customer. Flat-file exports lose the foreign-key relationships between patients, providers, and payers. FlitStack AI reconstructs these relationships by matching on name + email + NPI number where IDs are absent, and flags records where multiple candidates exist for manual resolution before the migration commits.

  • Odoo Community requires Developer Mode to create custom fields — Enterprise has a UI

    Odoo Community (the free edition) does not expose a Custom Fields UI. Custom fields must be created via Developer Mode (Settings > Activate Developer Mode) or through an XML data file in a custom module manifest. NeoDeck custom properties (NPI number, insurance member ID, payer relationship type, contract tier) require a custom module or manual field creation before data can populate. FlitStack delivers a custom module skeleton with all required x_ prefixed fields defined so the Odoo admin can install it before migration runs.

  • Partner-deal foreign key resolution requires correct import ordering

    Odoo crm.lead records carry a partner_id (res.partner) lookup. If contacts are not loaded before deals, the xmlrpc create call returns a validation error because the partner_id value does not exist yet. FlitStack AI sequences the migration: organization partners (is_company=True) load first, then individual contacts with partner_id set to the parent company, then deals with partner_id set to the linked contact. Any orphaned records (patient with no matching organization) are flagged and migrated with partner_id=False for post-migration manual assignment.

  • NeoDeck communication logs have no structured type taxonomy in Odoo mail.message

    NeoDeck stores clinical notes, appointment summaries, and billing claim updates as unstructured text entries with timestamps. Odoo mail.message has a subtype_id field that categorizes messages (note, email, call, meeting, escalation) but NeoDeck logs carry no type label. FlitStack AI classifies log entries by keyword pattern matching against the body text (e.g., 'appointment' → subtype_id for calendar events, 'claim' → custom x_log_type field) and creates a fallback 'note' subtype for unclassified entries. This classification is approximate and flagged for admin review post-migration.

  • Odoo XML-RPC rate limits require pagination strategy on large record sets

    Odoo's xmlrpc endpoint /jsonrpc does not enforce hard rate limits for authenticated users in self-hosted instances, but cloud-hosted Odoo Online instances apply a 1,000-call-per-minute ceiling. NeoDeck exports with 50,000+ contacts and 10,000+ deals require batched import loops (default batch size 100 records per call) with a 100ms inter-request delay to stay within Odoo Online limits. FlitStack AI's Odoo connector auto-detects the target instance type and applies the appropriate throttling profile before the migration run begins.

Migration approach

Six steps for a successful NeoDeck Holdings to Odoo CRM data migration

  1. Extract NeoDeck data with scoped read access

    FlitStack AI coordinates with the NeoDeck customer to obtain either a CSV export via NeoDeck's internal export tool or a read-only database connection to the NeoMed instance. We extract patient contacts, provider organizations, insurance payer records, deals, and communication logs in dependency order. Any missing foreign-key IDs are reconstructed by matching on name + email + NPI number. The extraction audit log records every record pulled, its source timestamp, and any deduplication decisions made during the export phase.

  2. Design Odoo custom field schema and stage configuration

    Before data lands, the Odoo admin installs a custom module manifest (provided by FlitStack) that defines all x_ prefixed custom fields required: x_npi_number, x_date_of_birth, x_insurance_plan, x_member_id, x_group_number, x_payer_type, x_contract_type, x_original_create_date, and x_source_record_id on the relevant models. FlitStack also creates the crm.lead.stage records matching NeoDeck's deal stage names and assigns probability percentages per stage. This step runs in parallel with the extraction phase so the target Odoo schema is ready before validation.

  3. Resolve owner and contact matches by email

    NeoDeck assigned owner emails are matched against Odoo res.users by email. Unmatched owners are flagged with the full email address so the Odoo admin can pre-create the user or assign a fallback user before the migration run. Patient and provider contact emails are matched against res.partner by email address — duplicates are flagged for the admin to specify a merge rule (most recent modification wins by default). Insurance payer names are matched against the payer partner set created in Step 2 to populate x_payer_partner_id on patient records.

  4. Run sample migration with field-level diff

    A representative slice of 100–300 records (spanning patient contacts, provider organizations, a payer or two, deals at each stage, and a sample of communication logs) migrates first. FlitStack AI generates a field-level diff comparing every source field value against the destination Odoo field value. The admin reviews the diff to verify custom field mapping, stage assignment, partner linkage, and owner resolution before the full run commits. Any mapping rule corrections are applied to the migration configuration before proceeding.

  5. Execute full migration with delta-pickup cutover window

    The full migration runs in sequenced batches: organization partners, then individual contacts, then insurance payers, then deals, then communication logs. A 24–48 hour delta-pickup window opens simultaneously — any NeoDeck record modified or created during the migration window is captured and applied as a final delta pass. The audit log records every operation (create, update, skip, flag). If reconciliation fails, one-click rollback reverts all destination records created during the migration run. The admin receives a post-migration summary report with record counts, error counts, and a list of flagged records requiring manual review.

Platform deep dives

Context on both ends of the pair

NeoDeck Holdings logo

NeoDeck Holdings

Source

Strengths

  • Integrated EHR, practice management, and billing in a single platform reduces the number of data silos to migrate
  • Regional focus on Puerto Rico healthcare compliance requirements is built into the product
  • NeoBiller integrates directly with NeoMed EHR without requiring third-party billing integrations
  • Telemedicine and e-prescribing features are native to the platform, not separate add-ons
  • Partnership with Inovalon provides quality measure analytics that can be re-calculated at the destination

Weaknesses

  • No publicly documented API means migration depends on native export tools and manual coordination with their customer service team
  • Cloud and client/server deployment options complicate data extraction depending on which version the customer uses
  • Limited public documentation of the data model makes schema discovery a prerequisite step for every migration
  • Small company footprint in a single region limits the pool of migration specialists familiar with the platform
  • No third-party integration marketplace means all external connections are custom and must be individually reviewed
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 NeoDeck Holdings 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

    NeoDeck Holdings: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your NeoDeck Holdings 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 NeoDeck Holdings to Odoo CRM data migrations

Answers to the questions buyers ask most during NeoDeck Holdings to Odoo CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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

Book a free 30 minute consultation

Most NeoDeck to Odoo migrations complete in 48–72 hours for under 25,000 total records (contacts, organizations, deals, and communication logs combined). Larger datasets exceeding 100,000 records or setups with complex payer-insurance relationship data extend to 7–10 days. The longest planning step is the NeoDeck data extraction phase — establishing scoped read access and reconstructing foreign-key relationships from flat exports typically takes 3–5 business days before migration validation can begin.

Adjacent paths

Related migrations to explore

Ready when you are

Move from NeoDeck Holdings.
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