CRM migration

Migrate from Criminal Case Management to Odoo CRM

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

Criminal Case Management logo

Criminal Case Management

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

100%

11 of 11

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

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Criminal Case Management systems organize data around matters, parties, and court proceedings — a fundamentally different structure from Odoo CRM's opportunity-centric pipeline model. The source data model typically includes: Cases or Matters (case number, court name, filing date, case status, assigned judge, presiding authority), Parties (client name, opposing counsel, co-defendants, victim/witness records), Party Contacts (addresses, phone numbers, email addresses), Attorneys (assigned counsel, bar numbers, contact details), Documents (pleadings, evidence files, court orders), Notes and Activities (case notes, hearing summaries, attorney communications), and Billing (hourly rates, time entries, total case costs). Some platforms also store custom fields for case type classification, bond amounts, sentencing details, and probation information. Odoo CRM models its core CRM around crm.lead (for leads and opportunities), res.partner (for contacts and companies), crm.opportunity (for deal pipeline stages), and ir.attachment (for documents). Odoo stores custom fields on these models using Odoo Studio — fields use the x_ prefix in database column names. The platform has no native concept of case numbers, court names, or legal party roles. These must be migrated as custom fields on crm.lead, with party roles managed via partner tags or dedicated partner categories. Attorney-to-case relationships require resolving attorney contacts and linking them to the opportunity via a custom many2many field or a dedicated Team Member model. FlitStack AI sequences the migration by first extracting all case records and their associated parties, mapping case metadata to crm.lead custom fields, then resolving attorney contacts to Odoo user records by email match. Documents re-upload to Odoo's ir.attachment with original filenames preserved. We surface all custom fields, document templates, and court-e-filing integrations as items requiring post-migration manual rebuild — and we document them explicitly so nothing falls through the cutover gap.

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

Criminal Case Management logo

Criminal Case Management

What's pushing teams away

  • Firms growing beyond 10-15 users report that CaseFleet lacks the multi-office, multi-user permission controls and advanced reporting that comparable platforms provide.
  • Support response times frustrate users when critical deadlines approach, and the knowledge base does not cover edge-case workflows in depth.
  • Annual contract billing catches firms off guard when they attempt to cancel mid-year, with prorated refunds processed slowly or inconsistently.
  • Firms needing native accounting, trust accounting, or client billing features find CaseFleet requires third-party integrations that add cost and complexity.
  • Lawyers expecting API access for custom integrations discover CaseFleet exposes limited or undocumented endpoints, blocking automation workflows.

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

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

Criminal Case Management

Case / Matter

maps to

Odoo CRM

crm.lead (as Opportunity)

1:1
Fully supported

Case records map to crm.lead with type='opportunity'. Case title becomes the opportunity name, case status maps to Odoo stage_id via value mapping, and case number, court name, filing date, and judge name migrate as custom fields (x_case_number, x_court_name, x_filing_date, x_judge_name) on the crm.lead record.

Criminal Case Management

Client Party

maps to

Odoo CRM

res.partner

1:1
Fully supported

Client party records map directly to res.partner with partner_type='contact'. Client name maps to partner name fields. Address, phone, and email fields migrate directly. The party's role in the case (Plaintiff, Defendant, Victim) is preserved as a custom x_party_role field on the partner record or via res.partner.category assignment.

Criminal Case Management

Opposing Counsel / Co-Counsel

maps to

Odoo CRM

res.partner

1:1
Fully supported

Attorney and opposing counsel party records map to res.partner with x_bar_number stored as a custom field and x_counsel_role storing the role value (Opposing Counsel, Co-Counsel, Bonding Company). Where available, attorney email resolves to an Odoo user_id via email match so the attorney appears as a team member on the related opportunity.

Criminal Case Management

Witness / Victim Record

maps to

Odoo CRM

res.partner

1:1
Fully supported

Witness and victim party records map to res.partner with x_party_role set to 'Witness' or 'Victim'. Contact information (address, phone, email) migrates directly. Witness statements or special notes attached to the witness record migrate as notes on the partner or as custom fields if the source stores structured witness data.

Criminal Case Management

Attorney Assignment

maps to

Odoo CRM

crm.lead — Team Member / user_id

1:1
Fully supported

Attorney-to-case assignments map to the crm.lead record via a custom many2many field (x_attorney_ids) linking to res.partner records of attorney type. If the attorney has an Odoo user account, their user_id is also linked so their name appears in the opportunity's Salesperson field. Multi-attorney assignments require splitting to multiple linked records in the many2many field.

Criminal Case Management

Document / Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Case documents (pleadings, evidence files, court orders, correspondence) re-upload to Odoo ir.attachment with res_model='crm.lead' and res_id pointing to the migrated opportunity record. Original filenames and MIME types are preserved. File size limits from the source platform are handled by chunking large files during the migration run.

Criminal Case Management

Case Note / Activity Log

maps to

Odoo CRM

crm.lead — Notes / mail.message

1:1
Fully supported

Case notes and hearing summaries map to crm.lead notes (mail.message with subtype 'comment'). Each note retains its original create_date and author information. If the source platform records note type (internal memo vs. court filing note), the type is preserved as a custom x_note_type field on the message record.

Criminal Case Management

Court Date / Calendar Event

maps to

Odoo CRM

calendar.event

1:1
Fully supported

Scheduled court dates map to calendar.event records linked to the crm.lead via x_case_id custom field. The event name uses the case number and hearing type. Start and stop times come from the source court date fields. If the source includes court room or virtual hearing link, those migrate as x_court_room and x_hearing_link custom fields on the event.

Criminal Case Management

Billing / Time Entry

maps to

Odoo CRM

crm.lead — Custom Financial Fields

1:1
Fully supported

Billable hours, hourly rates, and total case costs migrate as custom monetary fields (x_hourly_rate, x_total_hours, x_total_case_cost) on crm.lead. Odoo Invoicing handles actual billing post-migration. Trust account balances are not migrated — those require separate Odoo Accounting configuration. Time entries are preserved as a reference dataset for rebuilding in Odoo.

Criminal Case Management

Custom Case Type Field

maps to

Odoo CRM

crm.lead — x_case_type

1:1
Fully supported

Source-specific case type pick-list values (Felony, Misdemeanor, DUI, Drug, Violent Crime, etc.) map to corresponding values in a custom x_case_type pick-list on crm.lead. Values with no direct Odoo equivalent are preserved as-is and flagged for admin review — often used for filtering and reporting by case classification in Odoo views.

Criminal Case Management

Probation / Sentencing Data

maps to

Odoo CRM

crm.lead — Custom Fields

1:1
Fully supported

Probation start/end dates, sentencing details, and supervision level migrate as custom datetime and selection fields (x_probation_start, x_probation_end, x_supervision_level) on crm.lead. These require Odoo Studio setup before migration. Where the source stores compliance check dates, those map to scheduled activities on the opportunity record in Odoo.

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.

Criminal Case Management logo

Criminal Case Management gotchas

High

Limited export options for bulk data extraction

Medium

Annual subscription billing with prorated cancellation

Medium

Custom field schemas vary by account and plan

Medium

Document blob extraction may require manual intervention

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-to-party N:N relationships require custom field setup before migration

    Legal case management systems allow a single case to involve multiple parties — a defendant, multiple co-counsel, a bonding company, and several witnesses — with the party role stored as a structured field. Odoo CRM has no native many-to-many relationship between crm.lead and res.partner that preserves role context. FlitStack creates a custom x_attorney_ids many2many field on crm.lead to store attorney and party links with role values, but this requires Odoo Studio configuration before data loads. If custom fields are not pre-created, the migration skips those fields and they must be added post-load, creating a partial-data situation that requires a supplemental import run.

  • Case number formats vary widely and can break Odoo field validation

    Criminal case numbers follow jurisdiction-specific formats — e.g., '2024-CR-0042', 'State v. Smith 2023-D-001', or 'CF-2022-7821' — that include hyphens, slashes, spaces, and alphabetic prefixes. Odoo's standard char fields accept these formats, but downstream automation rules or stage-trigger conditions that parse case numbers as numeric identifiers will fail silently. FlitStack preserves case numbers exactly as exported from the source system and stores them in a dedicated x_case_number field with full string preservation. Teams should not build Odoo automation rules that assume numeric-only case number formats without explicit handling.

  • Court date formats from legal systems often fail date parsing validation

    Many criminal case management platforms store court hearing dates as text fields or in non-ISO formats (e.g., 'January 15, 2024', '01/15/24', 'Jan-15-2024') to avoid timezone and locale handling issues. When these dates migrate to Odoo's datetime fields without explicit format detection, they import as null values. FlitStack applies format detection across six common legal date patterns before loading into Odoo's calendar.event records. Any dates that fail parsing are written to an x_hearing_date_raw text field for manual resolution after migration.

  • Odoo stage pipelines default to a single sequence — case types need separate pipelines

    Odoo CRM creates a default stage pipeline for crm.lead when the CRM module is installed. Criminal Case Management systems typically track status per case type (e.g., Investigation → Arraignment → Pre-Trial → Trial → Sentencing for felony cases; different stages for DUI, domestic violence, etc.). Migrating all case types into a single Odoo pipeline flattens this structure. FlitStack advises creating separate crm.lead pipelines — or separate crm.team records with their own stage sequences — per case type before migration, so case status maps to the correct stage_id per pipeline without cross-contamination of stage values.

  • Trust accounting and billing data does not migrate — must be rebuilt in Odoo Accounting

    Criminal Case Management systems often include integrated trust account ledgers, client retainers, and court-reporting fee structures that are compliance-critical for bar association reporting. Odoo CRM has no native trust accounting — that functionality lives in the Odoo Accounting module, which is a separate implementation from the CRM migration. FlitStack preserves billable hours, hourly rates, and total case costs as custom fields on crm.lead for reference, but actual client trust balances, retainer accounts, and IOLTA compliance data require a dedicated Odoo Accounting setup post-migration. Clients using trust account data for bar compliance should consult an Odoo accountant before migration cutover.

Migration approach

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

  1. Audit source data model and export case-party relationship graph

    FlitStack begins every Criminal Case Management migration with a structured data audit. We extract a full export of case records, party records, attorney assignments, document metadata, and activity logs from the source platform. For platforms with limited API access, we use the best available export method — direct database query, CSV export, or XML dump — and document the extraction approach. The audit report identifies custom fields, pick-list value sets, party-role taxonomies, and document attachment paths that will require Odoo-side configuration before the migration run.

  2. Design Odoo CRM schema — custom fields, stage pipelines, and partner categories

    Before any data moves, FlitStack delivers an Odoo configuration plan based on the source audit. This plan specifies every custom field to create via Odoo Studio (x_case_number, x_court_name, x_filing_date, x_judge_name, x_party_role, x_bar_number, x_case_type, x_bond_amount, x_probation_end, etc.), the stage pipeline structure per case type, and the res.partner.category entries for party-role taxonomy. Custom many2many fields for attorney-to-opportunity linking are also specified at this stage. Your Odoo admin (or FlitStack) creates these before the migration run.

  3. Resolve attorney contacts to Odoo users and map parties to res.partner

    Attorney records from the source are matched to Odoo users by email address — if an attorney has an Odoo user account, their user_id is linked to the migrated opportunity so they appear as the assigned salesperson. Unmatched attorneys are flagged in a pre-migration report; your team either creates their Odoo accounts before the run or assigns them to a fallback user. Party records (clients, witnesses, opposing counsel) are resolved to res.partner, with duplicate detection by email to prevent redundant contact creation.

  4. Run a sample migration with field-level diff for case records and party links

    A representative slice — typically 50–200 case records spanning multiple case types, party roles, and document attachment counts — migrates first. FlitStack generates a field-level diff showing every mapped value in the source versus what landed in Odoo: case number, court name, filing date, stage mapping, attorney links, party role assignments, and document filenames. You verify the diff before the full run commits. Any incorrect mappings are corrected in the migration plan before the bulk load begins.

  5. Execute full migration with delta-pickup window and audit log

    The full migration loads all case records, party contacts, attorney assignments, documents, and activities into Odoo CRM. A delta-pickup window (24–48 hours after the primary load) captures any records modified or created in the source system during cutover. Every migration operation is logged — source record ID, destination record ID, field mappings applied, and any records that failed validation. One-click rollback is available within the delta window if reconciliation uncovers unexpected data quality issues.

  6. Post-migration: rebuild workflows, automation rules, and Odoo Accounting configuration

    After data lands in Odoo CRM, FlitStack delivers a rebuild reference document listing every source workflow, automation rule, document template, and court-e-filing integration that requires manual reconstruction in Odoo. This includes: Odoo automation rules for case-stage reminders, document template mappings for standard pleadings, calendar event rules for court date notifications, and trust accounting setup guidance for Odoo Accounting. Your Odoo admin or FlitStack's post-migration team completes these items as a separate engagement.

Platform deep dives

Context on both ends of the pair

Criminal Case Management logo

Criminal Case Management

Source

Strengths

  • Visual chronological timeline builder reconstructs case facts in a single view for litigation narrative planning.
  • Matter-centric architecture keeps all case data grouped under one container without manual cross-referencing.
  • Built-in evidence library with tagging keeps documents organized and linked to specific case events.
  • Time tracking integrated with case tasks captures billable activity without switching applications.
  • Task management with deadline calendars alerts attorneys to court dates and filing deadlines.

Weaknesses

  • API access is limited or undocumented, blocking custom integrations and automated data pipelines.
  • Annual contract billing with opaque cancellation terms creates friction for firms evaluating alternatives.
  • Multi-user permission controls are basic, making CaseFleet unsuitable for larger firms with role-based access requirements.
  • Reporting and analytics are limited compared to full-practice-management platforms.
  • Limited third-party integrations require firms to maintain separate accounting or communication tools.
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 Criminal 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

    Criminal Case Management: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Criminal Case Management to Odoo CRM migrations complete within 48–72 hours for under 10,000 records. Setup time — creating custom fields for case numbers, court names, and party roles in Odoo Studio — typically adds 3–5 business days before the technical migration run begins. Complex setups with multiple case-type pipelines, heavy document attachment volumes, or source platforms with limited API access extend the timeline to 5–10 days. The delta-pickup window adds 24–48 hours at the end of the run.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Criminal 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