CRM migration

Migrate from Case Status to Odoo CRM

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

Case Status logo

Case Status

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

100%

10 of 10

objects map 1:1 between Case Status and Odoo CRM.

Complexity

BStandard

Timeline

24–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Case Status stores law-firm data around Clients, Cases, Messages, Documents, Appointments, and Billing items — a flat object model optimized for client-facing portals. Odoo CRM uses crm.lead for both leads and opportunities, res.partner for all contacts and organizations, crm.stage for Kanban pipeline stages, and ir.attachment for files. The migration requires flattening Case Status's case hierarchy into Odoo's crm.lead with a custom case_type field to distinguish matters, routing case statuses to Odoo stage names via value mapping, and preserving attorney assignments as opportunity owner fields. Activities migrate as Odoo CRM activities with original timestamps. Workflows, client portal settings, and billing automation do not transfer — those are rebuilt using Odoo's built-in automation rules and the Documents app after migration. FlitStack AI sequences the migration so partner records exist before case records (foreign-key dependency), runs a sample migration with field-level diff, and captures a 24–48-hour delta window for in-flight changes during cutover.

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

Case Status logo

Case Status

What's pushing teams away

  • Firms report that Case Status is a portal layer rather than a full case management system, so they end up paying for both Case Status AND a separate practice management tool, creating double-licensing costs.
  • Some customers cite frustration that automation options feel limited compared to what they can build in their primary CRM, requiring workarounds or third-party integrations for complex client communication sequences.
  • Pricing is not transparently published on the website, and firms report surprise costs when adding the API access tier, premium support, or migration assistance as separate line items.

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

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

Case Status

Client

maps to

Odoo CRM

res.partner

1:1
Fully supported

Case Status clients map directly to Odoo res.partner records. The client name splits into First Name and Last Name on res.partner; organization clients store as company_name on res.partner with is_company=True. Email, phone, and address fields map field-for-field. The original Case Status client ID is stored as an external ID field on res.partner for traceability.

Case Status

Case

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Case Status cases become Odoo crm.lead records. A custom selection field case_type__c distinguishes matters (e.g. Litigation, Corporate, Family Law) so each case type can route to a separate Odoo pipeline or sales team. The crm.lead functions as both lead and opportunity — cases that represent active matters land as Open opportunities; closed or archived cases migrate as Lost or Won leads for historical reference.

Case Status

Case Status

maps to

Odoo CRM

crm.stage

1:1
Fully supported

Case Status status values (Intake, Active, Pending Review, Awaiting Response, Closed) map to Odoo crm.stage names. The mapping is value-by-value: each Case Status status string is assigned a target stage_id. If your firm uses multiple case types with different status sets, each status group maps to its own stage sequence within its pipeline. Stage-entered timestamps from Case Status are stored as custom datetime fields on crm.lead.

Case Status

Message

maps to

Odoo CRM

mail.activity

1:1
Fully supported

Case Status messages (both inbound client messages and outbound attorney replies) migrate as Odoo mail.activity records linked to the corresponding crm.lead. The activity's note field contains the full message body. Activity type is set to 'communication' for portal messages and 'call' or 'email' for logged phone/email entries. Original message timestamps and sender/recipient details are preserved as fields on the activity record.

Case Status

Document

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Case Status documents attached to cases migrate to Odoo ir.attachment records linked to the crm.lead via res_model='crm.lead' and res_id set to the target lead ID. Files are re-uploaded to Odoo's filestore. Document names and original upload dates are preserved. If a document was shared with the client in Case Status's portal, a note is appended to the attachment record indicating client-facing sharing status.

Case Status

Appointment

maps to

Odoo CRM

calendar.event

1:1
Fully supported

Case Status appointments migrate as Odoo calendar.event records. Start and end datetimes transfer directly. Attendees are resolved by matching the client email to res.partner records already migrated. The event is linked to the related crm.lead via the event's opportunity_id field if Odoo Calendar CRM integration is active.

Case Status

Attorney / Team Member

maps to

Odoo CRM

res.users

1:1
Fully supported

Case Status attorney and staff assignments on cases map to Odoo res.users as the crm.lead owner (user_id field). Users are matched by email address. Unmatched Case Status assignees are flagged pre-migration — your Odoo admin either creates the user record first or assigns those cases to a fallback attorney. This prevents crm.lead records from landing without an owner.

Case Status

Billing Item

maps to

Odoo CRM

account.move (separate scope)

1:1
Fully supported

Case Status billing items (invoices, payments, trust ledger entries) are out of scope for CRM migration. These belong in Odoo's Accounting app (account.move, account.payment) and require a separate accounting-focused migration scope. FlitStack AI can migrate billing data as a follow-on engagement with an accounting-specific validation step.

Case Status

Client Portal Settings

maps to

Odoo CRM

portal.access (rebuilt)

1:1
Fully supported

Case Status's branded client portal configuration — logo, welcome message, color scheme, and client-facing document sharing rules — has no equivalent in Odoo CRM. After migration, the Odoo Portal app is activated and client portal access is provisioned per res.partner. This is a configuration step, not a data migration.

Case Status

Custom Field (Case)

maps to

Odoo CRM

x_studio_* or ir.model.fields

1:1
Fully supported

Case Status custom fields on cases (e.g. practice area codes, opposing counsel, court jurisdiction) migrate to Odoo as custom fields on crm.lead. Field types are matched: text to char, pick-lists to selection, numbers to float or integer. The field name in Odoo uses the custom field naming convention (x_studio_ prefix in Community edition). Notes 15–30 words each describing the actual translation, not 'we handle it'.

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.

Case Status logo

Case Status gotchas

High

No publicly documented public API for self-service exports

High

Portal data is partially decoupled from source case management

Medium

Add-on pricing model obscures true cost for migration assistance

Medium

Custom properties are stored as JSON key-value pairs with limited schema visibility

Low

Client app notifications and push token state does not transfer

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

  • Case Status case types require custom field routing into Odoo pipelines

    Odoo CRM has no native concept of a 'case type' field on crm.lead. When migrating from Case Status, every matter type (litigation, corporate, family law) needs a custom x_studio_case_type__c field so that cases can route to the correct Odoo sales team, pipeline stage, or automation trigger. If your firm runs multiple practice areas with different stage sets, the case_type field drives which crm.stage sequence applies to each record — without it, all case types share one pipeline and stage values collide across practices. We create the custom field during schema setup and validate routing before the full migration runs.

  • Odoo crm.stage names are scoped per sales team and must be pre-created

    Odoo CRM stages exist within the context of a sales team. Each team has its own Kanban column set, and stage IDs are team-specific. Case Status statuses map to stage IDs, but if the Odoo sales team does not exist at migration time, the stage lookup fails and cases land without a stage. We require pre-creation of all target crm.stage records (with exact names matching the value-mapping table) before the migration loads. The migration plan delivers the complete stage creation script with names, sequences, and team assignments for your Odoo admin to apply.

  • Client portal configuration does not migrate — Odoo Portal is provisioned separately

    Case Status's client-facing portal — with its branded layout, client onboarding flow, and document sharing preferences — is a platform-level configuration with no Odoo equivalent in the CRM module. Odoo Portal is a separate application that must be enabled, configured, and linked to res.partner records post-migration. Client portal credentials and access records are not carried over. We flag the portal configuration gap in the migration plan and provide a setup checklist, but the portal rebuild itself is a post-migration implementation step, not part of the data migration.

  • Billing items and trust ledger records belong to Odoo Accounting, not CRM

    Case Status stores billing items and payment history tied to the case record. Odoo treats these as financial transactions within the Accounting app (account.move, account.payment) rather than CRM data. Migrating them requires an accounting-data validation pass — ensuring account codes, tax rates, and fiscal positions match the target Odoo chart of accounts. FlitStack AI marks billing records as out-of-scope for the CRM migration and offers a follow-on accounting migration engagement that maps Case Status invoice and payment records to Odoo account.move with proper journal and account assignment.

  • Odoo ir.attachment file size limits and filestore paths affect document migration

    Odoo Community stores ir.attachment files on the server filesystem (by default under ~/.local/share/Odoo/filestore/{db_name}/). There is no hard file-size limit enforced at the API level, but very large documents (>50 MB) can cause timeouts during xmlrpc upload. Case Status documents exceeding this threshold are flagged in the pre-migration audit. We chunk large files, use Odoo's batch attachment API, and fall back to direct filestore injection for files over 20 MB to avoid timeout errors during the document migration phase.

Migration approach

Six steps for a successful Case Status to Odoo CRM data migration

  1. Audit Case Status data and deliver schema setup plan

    FlitStack AI connects to the Case Status API and exports all records (clients, cases, messages, documents, appointments) as JSON. We profile field types, identify custom fields, count attachment sizes, and map Case Status status values to target Odoo crm.stage records. We deliver a schema setup plan listing every custom field to create on crm.lead, every stage name to create per sales team, and the value-mapping table linking Case Status statuses to Odoo stage IDs.

  2. Create Odoo custom fields, stages, and user mappings

    Your Odoo admin (or our team using Odoo Studio or direct ir.model.fields API calls) creates all required custom fields on crm.lead: case_type__c, case_number__c, opened_date__c, and any firm-specific attributes from Case Status. All target crm.stage records are created and sequenced. Attorney and staff emails from Case Status are mapped to res.users records — unmatched users are flagged so they can be provisioned before migration.

  3. Migrate res.partner records first, then crm.lead, then activities

    Odoo foreign-key dependencies require a specific load order. We migrate all Case Status clients to res.partner first, preserving the original Case Status client ID as cs_external_id__c for lookup. Then crm.lead records load — each case links to its client via partner_id resolved from the cs_external_id__c map, and attorney assignments resolve via user_id by email. Messages and appointments follow as mail.activity and calendar.event records linked to the crm.lead. Documents load last as ir.attachment records.

  4. Run sample migration with field-level diff

    A representative slice of records — typically 100–500 covering the full range of case types, statuses, and attorney assignments — migrates first. FlitStack AI generates a field-level diff comparing source values against destination field values, including stage-name mapping validation, owner resolution results, and attachment count. You review the diff and approve the mapping plan before the full run commits. This catches case_type routing errors and unmatched attorney assignments before they affect the entire dataset.

  5. Full migration with delta-pickup and rollback readiness

    The full migration runs against the Odoo instance. A delta-pickup window (24–48 hours) captures any cases, messages, or documents created or modified in Case Status during the cutover. Every operation is logged to an audit trail. One-click rollback reverts all migrated records to the pre-migration state if reconciliation finds discrepancies. Post-migration, we deliver a data reconciliation report comparing record counts and field coverage between the Case Status snapshot and Odoo destination.

Platform deep dives

Context on both ends of the pair

Case Status logo

Case Status

Source

Strengths

  • Highly-rated mobile app and client portal that requires no custom development to deploy
  • Built-in AI for message triage and client intelligence that surfaces urgent communications proactively
  • Seamless integration ecosystem with Clio, PracticePanther, MyCase, and other leading legal case management platforms
  • Client satisfaction tracking via NPS with automated review request workflows that drive referral growth
  • G2-recognized ease of use for admins and AI assistant categories, indicating low learning curve for firm staff

Weaknesses

  • Platform is a client-facing layer rather than a full practice management system, requiring firms to maintain a separate case management license
  • No publicly documented API — full API access requires a paid tier, limiting programmatic data extraction options
  • Automation builder lacks the depth of enterprise CRM workflow engines, limiting complex client communication sequences
  • Pricing lacks public transparency, with many features billed as add-ons rather than included in published tiers
  • Small company footprint (~$4.5M revenue, ~77 employees) raises long-term viability and support capacity questions for large firm deployments
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. All 8 core objects map 1:1 between Case Status and Odoo CRM.

B

Overall complexity

Standard migration

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

  • Object compatibility

    A

    All 8 core objects map 1:1 between Case Status and Odoo CRM.

  • 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

    Case Status: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Case Status to Odoo CRM migrations complete within 24–72 hours of clock time for firms with under 20,000 records. Larger firms with over 200,000 combined records (clients, cases, messages, documents) extend to 5–10 days. The longest planning step is creating the crm.stage sequence and validating case_type routing before data loads. Document re-upload to Odoo's filestore adds time proportional to attachment volume.

Adjacent paths

Related migrations to explore

Ready when you are

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