CRM migration

Migrate from MyCase to Odoo CRM

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

MyCase logo

MyCase

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between MyCase and Odoo CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

MyCase is a legal practice management platform centered on Cases, Contacts, Companies, Time Entries, and integrated billing. Odoo CRM models leads and opportunities in crm.lead, contacts and companies in res.partner, and cross-references them through partner_id and partner_email fields. The fundamental structural difference is that MyCase treats a Case (matter) as the primary entity with Contacts nested inside it; Odoo CRM treats Opportunities (crm.lead) and Contacts (res.partner) as co-equal objects joined by relational fields. This migration carries MyCase records into Odoo by creating res.partner entries for every Contact and Company, then creating crm.lead records for every Case — storing the original MyCase case number, case type, practice area, and responsible attorney as custom fields on each crm.lead. Time entries migrate as mail.message records on the relevant crm.lead so activity history is preserved. Custom fields defined in MyCase are recreated as ir.model.field definitions in Odoo before data lands. Workflows, automations, and document templates do not transfer — FlitStack exports their definitions for your Odoo administrator to rebuild using Odoo Studio or server actions. The migration runs against Odoo's xmlrpc API, respecting Odoo's per-database connection limits and PostgreSQL-backed transaction integrity.

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

MyCase logo

MyCase

What's pushing teams away

  • QuickBooks integration syncs one direction only—deleting a transaction in MyCase does not remove it in QuickBooks, and the sync can get stuck, forcing manual reconciliation that solo practitioners find disruptive.
  • Users report missing billing features that mid-size firms require: inability to bulk-update rates on past time entries, limited flat-fee case management, and manual invoice adjustments across multiple sections.
  • UI changes between releases (especially around notifications and client message navigation) create friction for staff trained on earlier layouts, per Capterra and G2 reviews.
  • Advanced features including the open API are gated behind the $109/user/month Advanced tier, so growing firms hit feature ceilings on lower plans and face a pricing cliff.
  • Firms outgrowing the platform report that Clio's integration marketplace and enterprise features better support scaling case volume, which drives switchers toward larger legal CRMs.

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

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

MyCase

Contact

maps to

Odoo CRM

res.partner

1:1
Fully supported

MyCase contacts map 1:1 to Odoo res.partner records. The email field is used as the unique matching key for owner resolution. Contacts without an email receive a generated placeholder email and are flagged for manual review before the full migration commits.

MyCase

Company

maps to

Odoo CRM

res.partner (company_type = 'company')

1:1
Fully supported

MyCase companies map to Odoo res.partner with company_type set to 'company'. The primary address, phone, and website fields migrate directly. Parent-company relationships in MyCase map to res.partner parent_id — the parent company must be created before the child to resolve the foreign key.

MyCase

Case

maps to

Odoo CRM

crm.lead

1:1
Fully supported

MyCase cases become Odoo crm.lead records. The case number (e.g., '2024-CIV-001') is stored in a custom field x_mycase_case_number on crm.lead. Case type (litigation, transactional, estate) maps to a custom selection field x_practice_area on crm.lead. The crm.lead name field is populated with the case title for Odoo pipeline visibility.

MyCase

Case.assigned_attorney

maps to

Odoo CRM

crm.lead.user_id

1:1
Fully supported

The MyCase assigned attorney (user_id) resolves to an Odoo res.users record by email match. If the attorney does not have an Odoo user account, their MyCase ID is stored in x_mycase_former_owner for admin assignment after migration. Unresolved owners are reported before the migration run.

MyCase

Case.status / case_stage

maps to

Odoo CRM

crm.lead.stage_id

1:1
Fully supported

MyCase case status values (Active, Pending, Closed, Archived) map to corresponding Odoo CRM stage IDs. Stage names are mapped value-by-value. If MyCase has custom status labels, Odoo stage names are created to match them — the admin reviews stage colors and probability settings post-migration.

MyCase

Time Entry

maps to

Odoo CRM

mail.message ( subtype = 'mt_note' )

1:1
Fully supported

MyCase time entries become mail.message records attached to the parent crm.lead. Each message preserves the original description, hours, rate, and date as message body text. Billable vs non-billable flags are stored in a custom boolean field x_mycase_billable on the message record. This approach preserves activity history without creating Odoo account.analytic.line records.

MyCase

Invoice / Billing Record

maps to

Odoo CRM

account.move (custom field linkage)

1:1
Fully supported

MyCase invoices are not migrated as Odoo account.move records because Odoo invoicing requires chart-of-accounts and fiscal position configuration that is destination-side setup. Instead, MyCase invoice IDs, amounts, and statuses are stored in custom fields on the associated crm.lead as a billing reference record for your accountant to reconstruct in Odoo Accounting.

MyCase

Custom Field (Contact-level)

maps to

Odoo CRM

ir.model.field on res.partner

1:1
Fully supported

MyCase contact custom fields (e.g., bar_number, malpractice_carrier) are created as ir.model.field definitions on res.partner before the migration run. Field types map: text to char/text, picklists to selection, dates to date. The field x_mycase_record_id is created on every object to store the original MyCase ID for traceability.

MyCase

Document / Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

MyCase file attachments are downloaded and re-uploaded to Odoo ir.attachment records. Each attachment is linked to the target res.partner or crm.lead via res_model and res_id. File size limits follow Odoo's default. Inline images in MyCase notes are extracted and stored as binary attachments. Folder hierarchy is flattened — the original MyCase Drive folder path is preserved in the attachment's description field.

MyCase

Trust / IOLTA Account

maps to

Odoo CRM

account.journal (IOLTA configuration)

1:1
Fully supported

MyCase trust account balances and transaction history have no direct Odoo CRM equivalent. The trust account name, type, and last known balance are stored as a custom note on the relevant res.partner for reference. Rebuilding trust accounting requires Odoo Accounting app configuration with dedicated IOLTA journals — handled separately from the CRM migration.

MyCase

Workflow / Automation

maps to

Odoo CRM

ir.actions.server (Odoo Action Rules)

1:1
Fully supported

MyCase workflows and task-automation templates do not migrate. Their definitions are exported as a JSON schema document listing each workflow trigger, condition, and action. Your Odoo administrator uses this as a rebuild reference for Odoo Studio server actions and action rules — the logic models are fundamentally different between the two platforms.

MyCase

Client Portal Access

maps to

Odoo CRM

portal.group on res.partner

1:1
Fully supported

MyCase's client-facing portal access and permissions have no direct Odoo CRM equivalent. Portal access in Odoo is controlled by the portal group and requires the website module or a dedicated portal configuration. Client-facing access is not migrated — it must be re-established after Odoo is configured.

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.

MyCase logo

MyCase gotchas

High

QuickBooks sync is strictly one-directional

High

Advanced API access is tier-gated

Medium

Document migration requires offline file transfer

Medium

Bulk rate updates on historical time entries are not supported

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

  • MyCase case-type workflow logic has no Odoo CRM equivalent and must be rebuilt

    MyCase uses template-based case workflows that auto-generate tasks, calendared deadlines, and document assembly when a case enters a specific stage. Odoo CRM's automation engine (ir.actions.server) operates on write/create event triggers and has a fundamentally different condition model — it does not understand MyCase's case-type templates. FlitStack exports your MyCase workflow definitions as a JSON schema listing triggers, conditions, and actions. Your Odoo administrator rebuilds them using Odoo Studio server actions or custom Python server actions. This is always a manual step — no automated translation of MyCase automation logic to Odoo is possible.

  • Odoo ir.model.field definitions must be created before any data loads

    Odoo enforces a schema-first model: custom fields must exist as ir.model.field definitions before any data can be written to them. MyCase stores custom field values as flat key-value properties that export as normal CSV columns. When those columns arrive in Odoo, the fields must already exist or the import silently skips them. FlitStack handles this by scanning all MyCase custom field definitions during the discovery phase, creating the corresponding ir.model.field records via the Odoo API before the migration run, and validating that every column in the export has a target field in Odoo. If a MyCase custom field references a pick-list, the Odoo selection options must also be populated in the same step.

  • N:N contact-to-company associations collapse to a single parent_id

    MyCase allows a single contact to be associated with multiple law firm clients simultaneously — a paralegal working across three matters for three different clients keeps all three company associations on their contact record. Odoo res.partner uses a single parent_id field for company membership. A second many2many relationship requires the Odoo Account Contact Relations module (available in Odoo Enterprise) or a custom many2many field. FlitStack migrates the primary company association (most-recently-used in MyCase by default) as the parent_id and surfaces the additional company associations as a flagged list in the migration report for your admin to resolve using Odoo's Contact module configuration.

  • Odoo API access requires a paid plan — Community edition blocks external integrations

    MyCase API access requires the Advanced tier ($109/user/month). Odoo External API access via xmlrpc/jsonrpc requires the Odoo Custom Plan — the Community edition has no supported external API access for automated migration tools. If your Odoo instance is running Community without the Custom Plan upgrade, FlitStack uses Odoo's CSV import via the web interface, which is slower and has lower record-per-batch limits compared to API-based migration. This affects timeline estimates: Community-only imports extend cutover windows by 30–50% due to browser-session constraints.

  • IOLTA trust accounting and flat-fee billing have no CRM-level migration path

    MyCase's IOLTA trust account tracking, operating account balance management, and flat-fee billing rules are practice-management accounting constructs that live entirely outside Odoo CRM. Odoo does not model IOLTA accounts in its CRM module — those records require the Odoo Accounting app with dedicated journal configuration (IOLTA trust journal, operating journal, and appropriate fiscal positions). FlitStack migrates the trust account metadata and last-known balances as custom notes on the associated res.partner. Your Odoo accountant must configure the accounting journals before those records can become functional.

Migration approach

Six steps for a successful MyCase to Odoo CRM data migration

  1. Discover MyCase data model and Odoo schema requirements

    FlitStack reads MyCase export data via its API (Advanced tier) or Full Data Backup tool, cataloging every object type, custom field definition, and relationship. Simultaneously, we inspect the target Odoo database to identify installed apps, existing custom fields, and stage configuration. This discovery output is a data map document listing every MyCase field, its Odoo target (res.partner, crm.lead, mail.message, ir.attachment), the mapping type, and any pre-requisite Odoo field creation required. This document is the shared planning artifact between FlitStack and your Odoo administrator before any data moves.

  2. Create Odoo custom fields and stage configuration

    Before any data loads, FlitStack creates all required ir.model.field definitions in Odoo via the xmlrpc API — custom fields on res.partner and crm.lead, custom selection values for case type and practice area, and the x_mycase_record_id traceability field on every object. Simultaneously, we map MyCase case statuses to Odoo stage_id values, creating new CRM stages if the MyCase status labels have no Odoo equivalent. If Odoo Community edition is detected (no API access), this step switches to a manual field-creation guide delivered to your admin with exact field names, types, and selection options to create in Odoo Studio.

  3. Resolve owners and users by email match

    MyCase user and attorney IDs are matched to Odoo res.users records by email address. FlitStack generates a pre-migration owner resolution report listing matched users, unmatched users, and suggested fallback assignments. Your team either creates missing Odoo user accounts or designates a fallback owner before the migration run. No record lands in Odoo without a resolved user_id — records with unresolved owners are held in a staging crm.lead tagged with x_mycase_former_owner for post-migration manual assignment.

  4. Run a sample migration with field-level diff

    A representative slice migrates first — typically 200–500 records covering contacts, companies, cases, time entries, and documents across multiple case types. FlitStack generates a field-level diff comparing source values in MyCase against the destination values in Odoo for every mapped field. You review the diff to verify case number mapping, practice area translation, time entry formatting, and document attachment links before the full run commits. This is the validation gate: if any field-level check fails the acceptance criteria, the mapping is adjusted and the sample re-runs before cutover.

  5. Execute full migration with delta-pickup window

    The full migration runs in dependency order: companies (res.partner, company_type = 'company') first, then contacts, then cases (crm.lead) with foreign keys resolving correctly. Documents and attachments migrate after their parent records are confirmed in Odoo. A delta-pickup window of 24–48 hours runs concurrently with your team's final MyCase data entry, capturing any cases created or modified during the cutover period. FlitStack's audit log records every record operation — insert, update, skip, or error — and one-click rollback is available if reconciliation reveals systematic data issues. After rollback window closes, the audit log is delivered as a CSV for your compliance record.

  6. Deliver workflow export and post-migration rebuild reference

    FlitStack exports your MyCase workflow definitions as a structured JSON document covering every automated task template, case-stage trigger, and document assembly rule. This document is handed to your Odoo administrator as a rebuild specification for Odoo Studio server actions. We do not migrate automations automatically — the logic models are incompatible between platforms. The workflow export includes the exact MyCase UI labels and condition logic so your admin can replicate the business rules in Odoo's action-rule framework without reverse-engineering the original intent from scratch.

Platform deep dives

Context on both ends of the pair

MyCase logo

MyCase

Source

Strengths

  • All-in-one practice management combines case files, client comms, billing, and docs in a single platform.
  • Client portal with secure document sharing reduces reliance on third-party file-sharing tools.
  • Built-in texting and e-signature are included at all tiers, avoiding per-transaction fees.
  • Workflow automation auto-generates tasks and calendared deadlines on new case creation.
  • AffiniPay parentage ties payments tightly to practice management through LawPay integration.

Weaknesses

  • Open API and advanced document management require the Advanced tier at $109/user/month.
  • One-way QuickBooks sync means billing deletions in MyCase must be manually voided in QuickBooks.
  • Cannot bulk-update rates on past time entries—each record requires individual editing.
  • UI changes between releases have caused navigation friction, especially around notifications.
  • Document automation templates are tied to the original creator's machine and cannot be exported.
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 MyCase 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

    MyCase: 25 requests per second per client.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most MyCase-to-Odoo CRM migrations complete in 48–72 hours of clock time for setups under 10,000 records. Larger firms with 50,000+ records, extensive document archives, or multi-firm MyCase configurations extend to 5–10 days. The longest planning step is creating Odoo custom field definitions and matching MyCase case statuses to Odoo stage_id values — that schema preparation typically takes 2–3 days before the first data record moves.

Adjacent paths

Related migrations to explore

Ready when you are

Move from MyCase.
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