CRM migration

Migrate from Virtual Case Management to Odoo CRM

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

Virtual Case Management logo

Virtual Case Management

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

94%

17 of 18

objects map 1:1 between Virtual Case Management and Odoo CRM.

Complexity

BStandard

Timeline

3–5 business days

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Virtual Case Management platforms are purpose-built for nonprofit and social-service case tracking: they model cases, clients, case plans, and activity logs against a service-directory schema. VCM platforms typically expose a REST or proprietary export API that yields flat record sets with embedded custom-field metadata. Odoo CRM models everything as leads, opportunities, and partners against a relational schema built on res.partner and crm.lead, with custom fields added via Odoo Studio. The migration carries every case, client, contact, and activity into Odoo's crm.lead (for open or in-progress cases) and res.partner (for clients), with case plans, service types, and custom metadata preserved as custom fields on the lead. Workflows, automations, and routing rules do not migrate — they must be rebuilt in Odoo's Actions and Automation menus. FlitStack AI sequences the load so res.partner records exist before crm.lead records reference them via partner_id, runs a test migration against a representative slice, then cuts over with a delta-pickup window capturing any cases modified during the final hours of the VCM run.

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

Virtual Case Management logo

Virtual Case Management

What's pushing teams away

  • Reporting and demographic tools are severely limited, making it difficult to extract meaningful business intelligence or comply with funder data requests.
  • The platform is challenging for users unfamiliar with database-style data entry, creating adoption friction for non-technical staff.
  • Agencies outgrow the platform as they scale, needing advanced workflow automation or deeper integrations that VCM does not provide.
  • Lack of flexible export options makes it difficult to move data to other systems when switching platforms.

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 Virtual Case Management objects map to Odoo CRM

Each row shows how a Virtual Case Management 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.

Virtual Case Management

Case

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Each VCM Case becomes an Odoo crm.lead record. The lead's name field is populated with the client name plus case ID for traceability. The lead's partner_id is set by resolving the client record. Stage is assigned based on the VCM case status mapping.

Virtual Case Management

Case (status = Closed/Resolved)

maps to

Odoo CRM

crm.lead (stage_id = Lost/Won)

1:many
Fully supported

VCM case statuses are mapped by value. 'Closed - Resolved' maps to Odoo Won stage. 'Closed - Incomplete' or 'Terminated' maps to Lost stage. Cases without a close date remain as open leads in Odoo. FlitStack AI generates the value-mapping table before migration.

Virtual Case Management

Client

maps to

Odoo CRM

res.partner

1:1
Fully supported

VCM Client records map directly to Odoo res.partner. The partner is created with type='contact'. FlitStack AI resolves duplicate partners by email — if a partner with the same email already exists, the case is linked to that record rather than creating a duplicate.

Virtual Case Management

Client (organization)

maps to

Odoo CRM

res.partner (type='company')

1:1
Fully supported

VCM organizations are identified by a flag or org_name field in the source export. These records create Odoo res.partner entries with type='company'. Individual client contacts are created as separate res.partner records with type='contact' and linked to the organization via parent_id. This parent‑child hierarchy is required for Odoo's address book and for proper activity attribution across the CRM.

Virtual Case Management

Case Plan

maps to

Odoo CRM

x_case_plan (custom char field on crm.lead)

1:1
Fully supported

VCM case plans define service types, deliverables, and deadlines. Odoo has no native case plan object, so FlitStack creates a custom char field x_case_plan on crm.lead to store the plan name. For migrations with multiple plan types, a custom selection field is used instead.

Virtual Case Management

Case Status

maps to

Odoo CRM

crm.stage

1:1
Fully supported

VCM case status values (New, Active, Pending, Closed) map to Odoo crm.stage records. FlitStack AI creates or reuses Odoo stage records matching the source values. Stage display names are matched case-by-case; probability is inherited from the Odoo stage defaults unless custom probabilities are provided.

Virtual Case Management

Case Worker / Assigned Staff

maps to

Odoo CRM

res.users

1:1
Fully supported

VCM case_worker_id is a string or user reference. FlitStack AI resolves it to an Odoo res.users record by matching the case worker's email address against Odoo logins. If no match is found, the lead is assigned to a designated fallback user and flagged for admin review before the migration commits.

Virtual Case Management

Referral Source

maps to

Odoo CRM

x_referral_source (custom char field on crm.lead)

1:1
Fully supported

VCM referral source is stored as a text or pick-list field on the Case record. Odoo CRM has no native referral source field. FlitStack AI creates a custom char or selection field x_referral_source on crm.lead and maps values directly from the source pick-list.

Virtual Case Management

Intake Date

maps to

Odoo CRM

date_open (crm.lead)

1:1
Fully supported

VCM intake_date values are mapped directly to Odoo's crm.lead.date_open field, which powers dashboards and reports that calculate time‑to‑first‑contact and lead aging metrics. If the source VCM record lacks an intake date, FlitStack AI leaves date_open blank and falls back to the lead's create_date, ensuring that pipeline analytics remain accurate even when source timestamps are missing.

Virtual Case Management

Case Close Date

maps to

Odoo CRM

date_closed (crm.lead)

1:1
Fully supported

VCM case_close_date maps to Odoo crm.lead.date_closed. This field is set automatically by Odoo when the stage is moved to Won or Lost. For migrations where the VCM close date exists but Odoo's stage is not yet Won/Lost, the date is stored in a custom field x_original_close_date for audit purposes.

Virtual Case Management

Case Priority / Urgency

maps to

Odoo CRM

x_priority (custom selection field on crm.lead)

1:1
Fully supported

VCM priority levels (High, Medium, Low) map to a custom selection field x_priority on crm.lead with the same values. Odoo's native priority field is used for CRM-level urgency; the VCM priority is preserved in the custom field to avoid overwriting it during re-imports.

Virtual Case Management

Case Note / Activity Log

maps to

Odoo CRM

mail.message (on crm.lead)

1:1
Fully supported

VCM case notes are imported as Odoo mail.message records attached to the crm.lead. Each message records the original author (case_worker), creation date, and body content. Notes are imported in chronological order. Odoo's chatter widget displays them below the lead record.

Virtual Case Management

Document / File Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

VCM file attachments are downloaded and re-uploaded to Odoo as ir.attachment records linked to the crm.lead. FlitStack AI preserves the original filename, MIME type, and binary content. Files exceeding Odoo's default 25MB per-file limit are split and linked to multiple records if necessary.

Virtual Case Management

VCM Workflow / Automation Rule

maps to

Odoo CRM

Not migratable

1:1
Fully supported

VCM workflow rules, escalation triggers, and deadline reminders have no Odoo CRM equivalent at the schema level. FlitStack AI does not migrate them. We export the rule definitions as a JSON specification document that your Odoo administrator can use to rebuild equivalent rules in Odoo's Automation menu or via Studio.

Virtual Case Management

VCM User / Agency Record

maps to

Odoo CRM

res.users

1:1
Fully supported

VCM agency staff records contain login credentials, role assignments, and security tier data that do not map to Odoo's res.users schema. FlitStack AI does not migrate user accounts. Your Odoo administrator creates res.users accounts independently before migration, and FlitStack resolves case worker references against those accounts.

Virtual Case Management

Service Directory Entry

maps to

Odoo CRM

Not migratable

1:1
Fully supported

VCM service directory entries are organizational metadata, not client data. They do not map to any Odoo CRM object. If your Odoo deployment includes Odoo Contacts or a custom service catalog, this data can be migrated separately as a custom import job. FlitStack AI can extend the migration plan to include it.

Virtual Case Management

Case Type / Category

maps to

Odoo CRM

x_case_type (custom selection on crm.lead)

1:1
Fully supported

VCM case type defines the category of service being delivered. Odoo CRM has no native case type field. FlitStack AI creates a custom selection field x_case_type on crm.lead with the source pick-list values mapped 1:1. If VCM uses free-text case type, the field is created as a char field.

Virtual Case Management

Multi-Agency Security / Agency Tier

maps to

Odoo CRM

Not migratable

1:1
Fully supported

VCM multi‑agency sharing rules and confidentiality tiers have no direct counterpart in Odoo CRM's standard security model, so FlitStack AI does not migrate them. After migration the Odoo administrator must define record rules on crm.lead and res.partner, assign agency‑specific sales teams, and optionally add a custom agency field to enforce visibility restrictions. FlitStack AI includes a recommended rule set in the deliverables package to simplify this configuration.

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.

Virtual Case Management logo

Virtual Case Management gotchas

High

No publicly documented bulk export API

Medium

Report definitions are not exportable

Low

Database-entry interface creates training burden

Medium

Multi-agency security level mapping requires manual verification

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

  • Odoo crm.lead object is both Lead and Opportunity — migration scope must be declared upfront

    In Odoo CRM the same crm.lead record represents both a raw Lead and a qualified Opportunity. A VCM Case with status 'Active' becomes a crm.lead with stage_id set to the Active-equivalent Odoo stage. Odoo does not have a separate Opportunity object — it uses a stage named 'Proposition', 'Negotiation', or a custom stage to indicate the Opportunity state. Before migration begins, FlitStack AI and the client must agree on which VCM case statuses map to which Odoo stages, and whether closed cases should land in Won, Lost, or a custom archived stage. This declaration affects the crm.lead.stage_id value on every record and cannot be corrected by a simple re-import.

  • Odoo ir.model.fields custom fields must be pre-created before the migration API writes data

    Odoo enforces schema integrity at the ORM layer — you cannot write to a field that does not exist in the model definition. All custom fields referenced in the VCM export (x_case_plan, x_case_type, x_priority, x_referral_source, x_original_close_date) must be created as ir.model.fields records in Odoo before the migration API attempts to write them. FlitStack AI generates a field creation manifest from the VCM export schema and either creates the fields via the Odoo XML-RPC API or provides the manifest as a step-by-step guide for your Odoo admin to create them manually using Odoo Studio. This is the most common source of migration failures when teams attempt self-service imports without this step.

  • Odoo's many2one partner_id resolution is required for crm.lead writes — orphaned leads fail validation

    Odoo requires that every crm.lead has a valid partner_id pointing to a res.partner record. If the VCM client linked to the case cannot be resolved to an Odoo partner (because the client's email does not match any res.partner), Odoo's ORM will reject the crm.lead write. FlitStack AI implements a two-pass migration: first all VCM Client records are loaded as res.partner records, then crm.lead records reference those partner IDs. Cases with unresolvable client emails are held in a staging table, assigned a placeholder partner, and flagged for manual review. If Odoo is configured with partner_id as required on crm.lead (enforced via Studio), this flagging step is critical to avoid migration failures.

  • Odoo XML-RPC has a configurable timeout that can reject large VCM export files mid-transfer

    Odoo's XML-RPC interface has a request timeout (default 120 seconds in many configurations) and a max result size limit. Large VCM exports with 50,000+ rows or large binary attachments will exceed these limits during a single API write call, causing a timeout error that leaves the Odoo database partially loaded. FlitStack AI uses batched writes with configurable page sizes (typically 500 records per batch) and implements retry logic with exponential backoff. For attachments larger than 25MB, files are chunked and stored as ir.attachment records with a reference to the original file URL. This is particularly relevant for VCM platforms that attach scanned documents or intake forms to case records.

  • Odoo Community Edition does not include the Odoo Enterprise 'Studio' tool for field creation — custom fields require an admin or developer

    Odoo Community Edition lacks the Studio app used to create custom fields and modify layouts through a GUI. Custom fields on crm.lead must be created via Python code (as an Odoo module), via XML data files in a custom addon's data directory, or by installing a third-party module that exposes field creation to the UI. For migrations targeting Odoo Community, FlitStack AI delivers the custom fields as an installable Odoo module (a zip containing the necessary XML and Python files) that your Odoo administrator installs before the migration run. For Odoo Enterprise targets, the fields can be created directly in Studio.

Migration approach

Six steps for a successful Virtual Case Management to Odoo CRM data migration

  1. Discover VCM export schema and target Odoo configuration

    FlitStack AI reads the VCM data export (REST API, CSV, or database dump) and catalogues every object, field, and pick-list value. We simultaneously inspect the target Odoo instance's crm.lead model, existing stages, and res.partner schema via XML-RPC. Any missing stages are created in Odoo, and any missing custom fields are flagged in the field creation manifest. We also confirm the Odoo edition (Community vs Enterprise) because field creation method differs. This step produces a migration map document reviewed and approved by the client's Odoo administrator before any data moves.

  2. Create custom fields and stages in Odoo

    FlitStack AI executes the field creation manifest against the target Odoo instance. For Odoo Enterprise, custom fields are created via Studio or the XML-RPC field creation API. For Odoo Community, we deliver an installable Odoo module containing the field definitions and install it on the target database. We also create or confirm Odoo crm.stage records for every mapped VCM case status. This step runs in a staging or development Odoo environment first; production field creation happens only after client sign-off.

  3. Load Client records to res.partner before cases to crm.lead

    Odoo CRM requires partner_id on a crm.lead to reference a valid res.partner record. FlitStack AI sequences the migration so all VCM Client records load first, deduplicated by email, and land in res.partner. The migration engine captures each res.partner's new Odoo id and stores it in a cross-reference table keyed by the original VCM client_id. Only after this reference table is complete do crm.lead records begin loading, pulling partner_id from the cross-reference table. This prevents ORM validation errors from orphaned leads and ensures every lead in Odoo is correctly linked to a contact.

  4. Run a representative test migration on a 100-500 record sample

    Before committing the full dataset, FlitStack AI runs a sample migration using 100-500 records selected to span the range of VCM case statuses, case plan types, and assigned case workers. We generate a field-level diff comparing the source VCM values against the written Odoo values, surfaced in a FlitStack QA report. The client reviews the QA report, confirms that stage mapping, priority mapping, and partner resolution are correct, and signs off before the full migration proceeds. Any mapping errors discovered at this stage are corrected and the test run is repeated.

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

    FlitStack AI runs the full migration against the production Odoo instance, writing all crm.lead and res.partner records in batched API calls. A delta-pickup window of 24 hours after the full migration begins captures any new cases or client updates created in VCM during the migration run. All migration operations are logged to an audit table. If reconciliation fails — a record count mismatch, a validation error, or a client-reported data gap — the one-click rollback reverts the Odoo database to its pre-migration state. The delta-pickup run is then executed to capture final in-flight changes before the Odoo instance is promoted to production.

Platform deep dives

Context on both ends of the pair

Virtual Case Management logo

Virtual Case Management

Source

Strengths

  • Purpose-built for nonprofit and human services case management rather than adapted from a general CRM.
  • Referral system natively links client records across the VCM agency network without manual re-entry.
  • Multi-security-level architecture addresses inter-agency confidentiality requirements out of the box.
  • Responsive support team helps users resolve questions without extensive documentation.
  • Client auto-ID generation provides immediate record organization for new agencies.

Weaknesses

  • Reporting and analytics tools are shallow and do not meet typical funder or management reporting requirements.
  • No publicly documented bulk export or API, making data portability a significant hurdle.
  • Steep learning curve for users without database or structured data entry experience.
  • Limited customization compared to modern CRM platforms, restricting workflow adaptation as agencies grow.
  • No clear path to advanced automation or deep third-party integrations.
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 mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Virtual Case Management and Odoo CRM.

  • Object compatibility

    B

    1 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

    Virtual Case Management: Not publicly documented — confirmed during integration scoping..

  • Data volume sensitivity

    B

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

Estimator

Estimate your Virtual Case Management 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 Virtual Case Management to Odoo CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

A standard VCM to Odoo CRM migration for under 10,000 cases and fewer than 20 custom fields typically completes in 3–5 business days from discovery to delta-pickup. The longest phase is schema planning — identifying every VCM field, creating matching Odoo custom fields, and agreeing on stage mapping. Complex migrations with multiple case plan types, extensive activity history, or a VCM instance exceeding 50,000 records can take 3–4 weeks. The most common delay is waiting for the client's Odoo administrator to install the custom-field module before data writes begin.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Virtual Case Management.
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