CRM migration

Migrate from Case UI to Odoo CRM

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

Case UI logo

Case UI

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

83%

10 of 12

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

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Case UI stores law-firm data as a normalized schema of clients, cases, contacts, documents, and custom fields specific to legal practice management. Odoo CRM uses a different object model: res.partner for clients and companies (as contacts), crm.lead for leads and opportunities (which can represent cases), ir.attachment for documents, and account.analytic.account for billing matters. We extract Case UI data via the platform's export API and REST endpoints, map client records to res.partner with partner_category assignments for matter types, translate case records to crm.lead entries with type='opportunity' for billable matters, preserve document references as ir.attachment links, and carry forward custom fields as ir.model.fields definitions in Odoo Studio. Workflows, document templates, and billing rules do not transfer — we export those definitions as JSON blueprints for manual reconstruction in Odoo's automation engine and accounting modules. The migration runs in three phases: schema discovery, sample migration with field-level diff, then full load with a 24–48 hour delta window for in-flight changes.

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 UI logo

Case UI

What's pushing teams away

  • Small law firms report outgrowing the platform when they need advanced integrations, custom workflows, or multi-office support that Case UI does not provide.
  • Lack of public API documentation makes Case UI difficult to connect with third-party tools, forcing firms to manually export and re-enter data when workflow needs change.
  • Users with complex practice areas report that the platform lacks depth in features like advanced reporting, conflict checking, or specialized litigation tools.
  • On-Premise customers who lack dedicated IT staff struggle with self-managed security updates and backups, leading some to move to fully managed alternatives.

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

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

Case UI Client

maps to

Odoo CRM

res.partner

1:1
Fully supported

Case UI clients map directly to Odoo's res.partner model. Each client becomes a partner record with partner_latitude, partner_longitude, and category_id set from Case UI's client type field. Companies and individual attorneys each become partner records differentiated by the is_company flag.

Case UI

Case UI Case

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Case UI case records become Odoo crm.lead entries with type='opportunity' since Case UI cases represent billable matters rather than pre-sale leads. The case number maps to Odoo's name field, and case status maps to stage_id via value_mapping against Odoo's stage definitions. Attorney assignment maps to user_id by email resolution.

Case UI

Case UI Contact

maps to

Odoo CRM

res.partner

1:1
Fully supported

Contacts linked to Case UI clients become res.partner records with parent_id pointing to the client-partner record. This preserves the client-contact hierarchy in Odoo, allowing contact-level communication history while maintaining the client-level billing relationship. Each contact inherits the parent's partner_category assignments, ensuring that matters associated with the contact inherit the correct categorization for reporting and segmentation in Odoo CRM views and filters.

Case UI

Case UI Document

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Case UI document records map to Odoo's ir_attachment model. The original filename, MIME type, and file content transfer to Odoo's filestore. Each attachment is linked to its parent case record via res_model='crm.lead' and res_id set to the migrated case's Odoo ID.

Case UI

Case UI User (Attorney)

maps to

Odoo CRM

res.users + res.partner

many:1
Fully supported

Case UI users are split across two Odoo objects: res_users for login credentials and res_partner for the user record that holds name, email, and phone. Attorney billable rates stored in Case UI map to account_analytic_account records linked to the Odoo user for time-tracking purposes.

Case UI

Case UI Custom Field (Matter-Specific)

maps to

Odoo CRM

ir.model.fields (Studio-created)

1:1
Fully supported

Case UI custom fields — such as opposing counsel, case venue, court jurisdiction, or insurance carrier — require pre-creation in Odoo Studio before migration data can populate them. We deliver a field-creation script that mirrors each Case UI custom field definition as an Odoo ir.model.fields entry with the correct ttype, relation, and required flags.

Case UI

Case UI Time Entry

maps to

Odoo CRM

account.analytic.line

1:1
Fully supported

Billable hours logged in Case UI migrate to Odoo's account_analytic_line model, linked to the analytic account of the case (crm.lead). The Case UI attorney's hourly rate maps to the Odoo unit_amount field, and the entry description maps to name. Billing approval status is preserved in a custom stage field.

Case UI

Case UI Expense Entry

maps to

Odoo CRM

account.move.line (vendor bill)

1:1
Fully supported

Case UI expenses charged to a matter become Odoo account_move_line entries attached to a vendor bill (account_move with move_type='in_invoice'). The expense description and amount transfer directly; Odoo's expense module can generate these entries or they can be imported as journal items linked to the case's analytic account.

Case UI

Case UI Calendar Event

maps to

Odoo CRM

calendar.event

1:1
Fully supported

Scheduled hearings, depositions, and attorney meetings in Case UI map to Odoo's calendar_event model. Start and stop timestamps, attendees linked to res.partner and res.users, and location details transfer directly. Reminder settings are preserved as Odoo alarm records with corresponding alarm_type and duration values. Recurring event patterns in Case UI become recurring calendar.events in Odoo using the base.action.domain expression syntax for recurrence rules.

Case UI

Case UI Task / To-Do

maps to

Odoo CRM

project.task

1:1
Fully supported

Case UI task items map to Odoo project_task records. We create a project record per case (or per practice area) and link tasks to it via project_id. Tasks not already tied to a project are routed to a default 'Case UI Migration' project. Custom task statuses require stage configuration in Odoo's project module settings.

Case UI

Case UI Billing Profile

maps to

Odoo CRM

res.partner (billing fields)

many:1
Fully supported

Client billing profiles in Case UI — payment terms, billing contact, invoice delivery method — merge into the res.partner record's address fields and property_payment_term_id. Odoo's sale_order and account_move models reference these partner fields when generating invoices, so the billing profile data maps to fields the accounting module already reads.

Case UI

Case UI Opposing Party

maps to

Odoo CRM

res.partner (separate partner record)

1:1
Fully supported

Opposing parties and opposing counsel listed in Case UI become separate res.partner records with a custom partner_category set to 'Opposing Party' or 'Opposing Counsel'. This keeps opposing parties out of the firm's primary client contact list while preserving them in Odoo's partner database for case-related correspondence.

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 UI logo

Case UI gotchas

High

No public API documentation found

Medium

On-Premise perpetual license has upgrade isolation risk

Low

No verified public reviews or G2/Capterra feedback

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 UI custom fields require pre-creation in Odoo Studio before migration data can populate them

    Case UI allows custom fields on clients, cases, and contacts without version control. Odoo's ORM requires custom fields to be defined in ir.model.fields before any data can write to them. If Case UI has 15 custom fields across client and case objects, all 15 must be created in Odoo Studio (or via Python) before the migration script can write values. We provide a field-creation script as part of the migration plan, but Odoo requires an Enterprise license or Studio access to create fields through the UI. Community edition users must create fields programmatically, which adds a setup step that some teams find unfamiliar. This is not a data-loss risk but a sequencing dependency — skipping it causes migration rows to fail validation.

  • Odoo's crm.lead model conflates leads and opportunities — Case UI case records need explicit type and stage assignment

    Case UI separates clients, cases, and contacts into distinct objects. Odoo CRM uses a single crm.lead model where type='lead' means a pre-sale prospect and type='opportunity' means an active business matter. Case UI cases are unambiguously opportunities (they represent billable work), so every migrated case must have type='opportunity' and a valid stage_id from Odoo's pipeline stages. Odoo's default CRM pipeline has stages named New, Qualified, Proposal Sent, and Won/Lost — if Case UI uses different status labels, we must map them value-by-value to Odoo's stage_id picklist. Incorrect type assignment causes cases to appear in the wrong Odoo pipeline view and breaks reporting filters that separate leads from opportunities.

  • Document attachment URLs from Case UI's cloud storage must be re-uploaded to Odoo's filestore

    Case UI stores documents in its own cloud infrastructure with URL references in the database. These URLs are not portable — they point to Case UI's domain and require authentication tokens that expire. Odoo's ir_attachment model stores files either in the PostgreSQL database (as a LOB column) or on the filesystem at the path returned by ir_attachment._filestore. We download each file from Case UI's storage during the extraction phase, then POST them to Odoo via the XML-RPC /web/binary/upload_attachment endpoint with res_model and res_id set to the migrated case. File size limits in Odoo Community default to 115 MB per file; files larger than this must be split or linked externally. This is not a limitation in Odoo Enterprise, which can use external storage backends.

  • Odoo's partner model is a single unified contact record — Case UI's separate client and contact objects collapse to one res.partner with a parent-child relationship

    Case UI treats clients and their contacts as separate database objects with a client_id foreign key on contact records. Odoo uses res.partner as a single model for both individuals and organizations, with parent_id representing the organizational hierarchy. When we migrate Case UI clients and their contacts, the client becomes a res.partner record (with is_company=True if it's an organization) and each Case UI contact becomes a separate res.partner with parent_id pointing to the client. This is structurally correct in Odoo but means queries that referenced Case UI contact.client_id must now query res.partner.parent_id instead. Teams that build Odoo reports or automation triggers based on the partner-contact relationship need to update their field references post-migration.

  • Odoo's billing module requires account_analytic_account records linked to cases for time-tracking to generate invoices

    Case UI time entries link directly to case records and use the attorney's hourly rate from the user profile. Odoo's timesheet module (account_analytic_line) requires an analytic account to aggregate time entries before they can be invoiced through the sale_order or account_move models. Every Case UI case with billable time needs a corresponding account_analytic_account created and linked to the crm.lead via project_id or analytic_account_id. Odoo Enterprise includes a 'Billing' tab on opportunities that auto-creates this analytic account when activated; Community edition requires manual account creation or a Python script. Without this step, migrated time entries appear in the analytic reports but cannot generate invoices from the case record.

Migration approach

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

  1. Extract Case UI data via export API and generate Odoo field-creation script

    We connect to Case UI's export endpoints using scoped read access to pull all clients, cases, contacts, documents, users, time entries, and custom field definitions. The extraction runs against a test copy of the database to avoid any production impact. From the export we generate an Odoo field-creation script that defines every Case UI custom field as an ir.model.fields entry — including field type (char, text, selection, many2one), required flags, and default values. This script runs against your Odoo instance before migration data arrives, ensuring the ORM can validate incoming records. We deliver the script as a Python file you run via Odoo's shell or as a Studio-exported data file you import through the Settings > Technical > Models interface.

  2. Resolve Case UI attorneys and users to Odoo res.users by email match

    Case UI user records — attorneys, paralegals, admins — are matched against existing Odoo user accounts by email address. Any Case UI user without a corresponding Odoo account is flagged in the migration plan with two options: create a placeholder Odoo user before migration (recommended so owner assignments resolve correctly) or assign their records to a migration fallback user. We also capture each user's role and hourly rate from Case UI to populate Odoo's groups_id and account_analytic_account records for billing. If Case UI users have no email (rare but documented in on-premise deployments), we match by full name and validate uniqueness before assigning.

  3. Migrate res.partner records first, then crm.lead cases, then attachments and time entries in dependency order

    Odoo's foreign-key constraints require partners to exist before cases can reference them (partner_id on crm.lead) and cases to exist before attachments can link to them (res_id on ir.attachment). We sequence the migration in four passes: Pass 1 creates all res.partner records from Case UI clients and contacts with parent_id assignments; Pass 2 creates crm.lead records from Case UI cases with user_id and partner_id resolved from the previous pass; Pass 3 uploads ir.attachment records linked to the crm.lead IDs from Pass 2; Pass 4 imports account_analytic_account and account_analytic_line records for billing history. Each pass generates a validation report showing record counts, skipped rows, and error reasons so you can inspect before the next pass runs.

  4. Run a sample migration on a 200–500 record slice and generate field-level diff

    We select a representative slice of Case UI records spanning the main object types — a mix of open and closed cases, clients with multiple contacts, documents of varying types, and time entries from multiple attorneys. This sample runs against your live Odoo database (in a test environment) and produces a field-level diff showing what each Case UI field value became in Odoo. You can verify that case status values map to the correct Odoo stage, that attorney assignments resolve to the right Odoo user, and that document attachments appear under the right case record. The diff report is the go/no-go checkpoint — if anything looks incorrect in the sample, we adjust the mapping configuration before the full migration runs.

  5. Execute full migration with delta-pickup window and one-click rollback availability

    The full migration runs against your production Odoo instance. We use Odoo's XML-RPC or JSON-RPC API with batch sizes of 500 records per call to avoid timeouts. After the initial load completes, a delta-pickup window of 24–48 hours captures any Case UI records modified or created during the cutover period — typically new time entries or case updates from attorneys still working in Case UI while the Odoo setup is finalized. All operations are logged to an audit table we create in your Odoo database. If reconciliation fails (record counts don't match, validation errors exceed threshold), one-click rollback reverts all migration-created records using the audit log. The rollback does not touch pre-existing Odoo data.

Platform deep dives

Context on both ends of the pair

Case UI logo

Case UI

Source

Strengths

  • Clear per-user pricing with no surprise fees or mandatory add-ons on the Cloud plan.
  • On-Premise perpetual option eliminates per-user billing for firms with many attorneys and staff.
  • Free trial lets firms validate fit before committing to a paid subscription.
  • Daily backups and segregated databases reduce data loss risk for solo practitioners.
  • Straightforward interface purpose-built for small law firm workflows.

Weaknesses

  • No publicly documented API limits third-party integrations and automated migration tooling.
  • Limited public documentation and no verified reviews make independent evaluation difficult.
  • Smaller feature set compared to enterprise legal platforms may not support complex or multi-practice operations.
  • On-Premise version requires firm IT staff to manage upgrades, security, and backups independently.
  • No transparent rate limits or SLA terms published on the website for Cloud customers.
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. 2 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 Case UI and Odoo CRM.

  • Object compatibility

    B

    2 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

    Case UI: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Case UI to Odoo CRM migrations complete within 48–72 hours of clock time for firms with fewer than 10,000 client and case records. The longest phase is the Odoo field-creation step — if Case UI has 20+ custom fields, pre-creating each in Odoo Studio before migration data arrives can add 1–3 business days. Firms with 50,000+ records or complex billing histories spanning multiple matter types extend to 5–10 business days. We include a sample migration with field-level diff before the full run, which typically takes 4–8 hours on a representative record slice.

Adjacent paths

Related migrations to explore

Ready when you are

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