CRM migration
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
Source
Odoo CRM
Destination
Compatibility
17 of 18
objects map 1:1 between Virtual Case Management and Odoo CRM.
Complexity
BStandard
Timeline
3–5 business days
Overview
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.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
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
Odoo CRM
crm.lead
1:1Each 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)
Odoo CRM
crm.lead (stage_id = Lost/Won)
1:manyVCM 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
Odoo CRM
res.partner
1:1VCM 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)
Odoo CRM
res.partner (type='company')
1:1VCM 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
Odoo CRM
x_case_plan (custom char field on crm.lead)
1:1VCM 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
Odoo CRM
crm.stage
1:1VCM 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
Odoo CRM
res.users
1:1VCM 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
Odoo CRM
x_referral_source (custom char field on crm.lead)
1:1VCM 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
Odoo CRM
date_open (crm.lead)
1:1VCM 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
Odoo CRM
date_closed (crm.lead)
1:1VCM 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
Odoo CRM
x_priority (custom selection field on crm.lead)
1:1VCM 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
Odoo CRM
mail.message (on crm.lead)
1:1VCM 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
Odoo CRM
ir.attachment
1:1VCM 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
Odoo CRM
Not migratable
1:1VCM 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
Odoo CRM
res.users
1:1VCM 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
Odoo CRM
Not migratable
1:1VCM 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
Odoo CRM
x_case_type (custom selection on crm.lead)
1:1VCM 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
Odoo CRM
Not migratable
1:1VCM 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.
| Virtual Case Management | Odoo CRM | Compatibility | |
|---|---|---|---|
| Case | crm.lead1:1 | Fully supported | |
| Case (status = Closed/Resolved) | crm.lead (stage_id = Lost/Won)1:many | Fully supported | |
| Client | res.partner1:1 | Fully supported | |
| Client (organization) | res.partner (type='company')1:1 | Fully supported | |
| Case Plan | x_case_plan (custom char field on crm.lead)1:1 | Fully supported | |
| Case Status | crm.stage1:1 | Fully supported | |
| Case Worker / Assigned Staff | res.users1:1 | Fully supported | |
| Referral Source | x_referral_source (custom char field on crm.lead)1:1 | Fully supported | |
| Intake Date | date_open (crm.lead)1:1 | Fully supported | |
| Case Close Date | date_closed (crm.lead)1:1 | Fully supported | |
| Case Priority / Urgency | x_priority (custom selection field on crm.lead)1:1 | Fully supported | |
| Case Note / Activity Log | mail.message (on crm.lead)1:1 | Fully supported | |
| Document / File Attachment | ir.attachment1:1 | Fully supported | |
| VCM Workflow / Automation Rule | Not migratable1:1 | Fully supported | |
| VCM User / Agency Record | res.users1:1 | Fully supported | |
| Service Directory Entry | Not migratable1:1 | Fully supported | |
| Case Type / Category | x_case_type (custom selection on crm.lead)1:1 | Fully supported | |
| Multi-Agency Security / Agency Tier | Not migratable1:1 | Fully supported |
Gotchas + challenges
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 gotchas
No publicly documented bulk export API
Report definitions are not exportable
Database-entry interface creates training burden
Multi-agency security level mapping requires manual verification
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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
Virtual Case Management
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Virtual Case Management and Odoo CRM.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Virtual Case Management: Not publicly documented — confirmed during integration scoping..
Data volume sensitivity
Virtual Case Management doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Virtual Case Management to Odoo CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Virtual Case Management
Other ways to arrive at Odoo CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.