CRM migration

Migrate from The Attorney Case File to Odoo CRM

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

The Attorney Case File logo

The Attorney Case File

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

92%

11 of 12

objects map 1:1 between The Attorney Case File and Odoo CRM.

Complexity

BStandard

Timeline

3–6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

The Attorney Case File organizes legal work around Cases, Clients, Documents, and Time Entries — a case-centric data model where every record traces back to a single matter. Odoo CRM uses a lead/opportunity model (crm.lead) for pipeline management, res.partner for contacts and organizations, and ir.attachment for files, with custom fields and properties tracked via ir.model.data and custom field definitions. The migration carries all standard and custom fields from The Attorney Case File into their Odoo equivalents, re-uploads every document and attachment to Odoo's filestore, and preserves relational links between matters, contacts, and documents via Odoo's many2one and many2many field conventions. Workflows, template documents, and billing-rate schedules do not migrate — those must be rebuilt in Odoo using its automation rules and product-pricelist model. FlitStack sequences the load so res.partner records exist before crm.lead records reference them, preventing foreign-key orphans, and runs a delta-pickup window after cutover to capture any records modified during the transition.

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

The Attorney Case File logo

The Attorney Case File

What's pushing teams away

  • Users handling multi-party or high-complexity litigation report the system reaches its limits and lacks the structural depth required for matters with numerous interrelated parties and documents.
  • The document management component draws consistent criticism for being underpowered — attorneys working with large document volumes find it inadequate for their needs.
  • At least one review flags platform stability concerns and lack of clear development roadmap, leaving practitioners uncertain about long-term viability and feature evolution.

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 The Attorney Case File objects map to Odoo CRM

Each row shows how a The Attorney Case File 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.

The Attorney Case File

Case / Matter

maps to

Odoo CRM

crm.lead (type=opportunity)

1:1
Fully supported

Each The Attorney Case File matter becomes a crm.lead record with type='opportunity'. The crm.lead.name field holds the matter title, and stage is set based on the case-status mapping defined during discovery. Original case creation date is preserved as a custom datetime field since Odoo sets crm.lead.create_date at migration time.

The Attorney Case File

Client / Party

maps to

Odoo CRM

res.partner

1:1
Fully supported

Client records from The Attorney Case File map directly to res.partner. Individual attorneys and opposing counsel each become separate res.partner records. The client-type flag (e.g., plaintiff, defendant, opposing counsel) is stored as a custom selection field since Odoo's native partner category model is used for tagging rather than party role classification.

The Attorney Case File

Firm / Organization

maps to

Odoo CRM

res.partner (company_type=company)

1:1
Fully supported

When The Attorney Case File stores a firm or organization name as a separate entity from individual contacts, it maps to res.partner with company_type='company'. Individual contacts at the firm become child res.partner records with parent_id pointing to the firm, mirroring Odoo's standard company-contact structure.

The Attorney Case File

Document / File Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Every document linked to a case in The Attorney Case File re-uploads as an ir.attachment record with res_model='crm.lead' and res_id set to the migrated crm.lead ID. The original file name and MIME type are preserved; Odoo's ir_attachment.store_file field routes storage to PostgreSQL or the filestore directory per your Odoo configuration.

The Attorney Case File

Time Entry / Billing Record

maps to

Odoo CRM

account.analytic.line

1:1
Fully supported

Time entries linked to matters map to account.analytic.line records with product_id set to the migrated billing-rate product. Odoo requires the Timesheet app or a timesheet-enabled project to be active; if neither exists, time entries migrate as notes on the crm.lead with a custom description field carrying the original hours and narrative.

The Attorney Case File

Billing Rate / Fee Schedule

maps to

Odoo CRM

product.pricelist / product.template

1:1
Fully supported

Fixed billing rates and fee schedules stored in The Attorney Case File become product.template records in Odoo's Product app. Each rate becomes a product with a list_price set to the billing amount, and the rate name maps to product.name. Hourly rates use uom_id='Hour'; flat fees use uom_id='Unit'.

The Attorney Case File

Case Status / Stage

maps to

Odoo CRM

crm.stage

1:1
Fully supported

Each distinct case-status value in The Attorney Case File is mapped to a corresponding crm.stage record in Odoo. Stage names (e.g., 'Active Litigation', 'Discovery', 'Settlement Negotiations') are created as new stages in the default Odoo pipeline or a dedicated legal pipeline. Probability values are assigned per stage to support Odoo's forecast reporting.

The Attorney Case File

Calendar / Court Date

maps to

Odoo CRM

calendar.event

1:1
Fully supported

Scheduled court dates and attorney calendar events from The Attorney Case File map to calendar.event records in Odoo, with the crm.lead linked via the res_id field. Start and stop datetime values are preserved; reminder settings are mapped to calendar.alarm records. If no calendar module is active in Odoo, events are stored as notes on the crm.lead.

The Attorney Case File

Custom Case Property

maps to

Odoo CRM

ir.model.fields (custom field on crm.lead)

1:1
Fully supported

Any custom properties defined on The Attorney Case File matters — such as statute of limitations dates, venue court names, insurance carrier references, or judicial assignment data — require new ir.model.fields entries on the crm.lead model before migration. FlitStack generates the field definition SQL and applies it during the schema-setup phase.

The Attorney Case File

Custom Client Property

maps to

Odoo CRM

ir.model.fields (custom field on res.partner)

1:1
Fully supported

Client-specific custom fields from The Attorney Case File (e.g., bar number, referral source, conflict-check status) are added to res.partner via ir.model.fields. Odoo restricts field name length to 50 characters and requires snake_case naming; source field names are normalized during the field creation phase.

The Attorney Case File

Opposing Counsel / Party Role

maps to

Odoo CRM

res.partner (with custom role field)

many:1
Fully supported

The Attorney Case File may store opposing counsel as a separate contact record. In Odoo, these contacts are merged into res.partner with the party role recorded in a custom selection field (Case_Party_Role__c) rather than as separate object types. This preserves the relationship without inflating contact counts.

The Attorney Case File

User / Attorney Owner

maps to

Odoo CRM

res.users

1:1
Fully supported

The Attorney Case File owner or responsible attorney on a matter is resolved by email match against res.users in Odoo. If no matching Odoo user exists, the crm.lead.owner_id is set to a fallback attorney designated by the firm, and the original owner name is preserved in a custom field for reconciliation.

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.

The Attorney Case File logo

The Attorney Case File gotchas

High

No public API — extraction requires vendor coordination

Medium

Export envelope is limited to workbook-level records

Medium

Trust accounting data is outside the export scope

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-centric data model requires flattening to Odoo's lead/opportunity structure

    The Attorney Case File stores every piece of data — client contacts, opposing counsel, court dates, documents, time entries — as direct children of a Case record. Odoo CRM models these as separate objects (res.partner, crm.lead, calendar.event, ir.attachment, account.analytic.line) with cross-references via foreign keys. Migration does not automatically create Odoo's many2one links; FlitStack sequences the load to ensure res.partner records exist before crm.lead records reference them and ir.attachment records are re-linked after crm.lead IDs are assigned. If documents are imported before their parent crm.lead, Odoo's ORM rejects the dangling res_id and the attachment must be re-attached manually.

  • Odoo Community edition lacks guided migration tooling for legal case structures

    Odoo does not ship a case-management-specific module in the Community edition — the standard CRM app treats every record as a lead or opportunity, not a legal matter. Firms migrating from The Attorney Case File must either adopt the CRM app as-is (mapping matters to crm.lead with custom fields for legal metadata) or install the OCA/的法律-case-management module from the Odoo Community Association GitHub. FlitStack generates the ir.model.fields definitions for all custom legal properties (statute of limitations, venue court, judicial assignment) and applies them before data lands, but OCA module installation and configuration is a firm-side decision that must be completed before migration validation.

  • Billing rates and time entries require product.pricelist setup before migration

    The Attorney Case File stores billing rates directly on the matter or as a global fee schedule. Odoo separates rate definition from rate application: billing rates must exist as product.template records with a list_price before account.analytic.line time entries can reference them via product_id. If no products exist at migration time, Odoo's ORM raises a validation error on the analytic line records. FlitStack creates placeholder product records for each unique billing rate found in The Attorney Case File during the schema-setup phase, mapping the source rate amount to product.list_price and assigning a uom_id of 'Hour' or 'Unit' as appropriate.

  • Odoo API rate limits on XML-RPC can throttle large document re-uploads

    Odoo's XML-RPC interface handles ir.attachment uploads sequentially, and self-hosted Odoo instances often have worker-process limits that cap concurrent requests. The Attorney Case File setups with large document archives (hundreds of files per case) can exceed Odoo's default batch-write throughput, causing timeouts or 504 errors mid-migration. FlitStack chunks document uploads into batches of 50, introduces exponential backoff between batches, and retries failed attachment writes up to three times. For archives exceeding 5,000 files, a direct PostgreSQL COPY approach for ir.attachment datas may be recommended to bypass ORM throttling.

  • Custom fields on res.partner require developer mode or module installation to create

    Odoo's standard UI does not allow creating new fields on core models without enabling developer mode or installing a custom module. The Attorney Case File's custom client properties (conflict-check status, referral source, bar number) cannot be added to res.partner through the standard Settings UI. FlitStack generates Python model patches and XML data files that define the new ir.model.fields records; these are deployed as a migration-specific Odoo module applied during the schema-setup step. Firms on Odoo.sh (SaaS) may need to request the module installation from Odoo support or their partner if they lack direct server access.

Migration approach

Six steps for a successful The Attorney Case File to Odoo CRM data migration

  1. Discover The Attorney Case File data model and custom properties

    FlitStack extracts the complete schema from The Attorney Case File — all standard and custom case fields, client fields, document records, time entries, and billing-rate definitions. We catalog every unique case-status value, practice-area label, and custom property name. This discovery output drives the Odoo field-creation plan: which ir.model.fields entries are needed on crm.lead and res.partner before any data loads. We also identify the owner/attorney fields to map to Odoo res.users via email resolution.

  2. Deploy Odoo schema setup module with custom fields and stages

    FlitStack generates and installs a migration-specific Odoo module that defines all custom fields (x_case_number, x_practice_area, x_date_filed, x_statute_of_limitations, x_insurance_carrier, x_bar_number, and others identified during discovery) on the crm.lead and res.partner models. We also create crm.stage records matching The Attorney Case File case-status values and assign probability weights for Odoo's forecast reporting. The module is applied to your Odoo instance before the data load begins.

  3. Load contacts and organizations before case records

    Odoo's ORM enforces referential integrity: crm.lead records must have a valid partner_id (res.partner) before they can be saved if the partner_id field is marked as required. FlitStack sequences the migration so res.partner records load first — all clients, opposing counsel, and firm organizations — with their custom fields populated. Case records (crm.lead) load second, referencing the newly created partner IDs. This ordering prevents the foreign-key constraint violations that occur when document attachments or time entries reference orphaned case IDs.

  4. Run a sample migration on a representative case slice

    A sample migration executes against 50–200 representative records spanning multiple case types, practice areas, and document counts. FlitStack generates a field-level diff comparing source values to Odoo destination values for every mapped field. You verify that practice-area values land in x_practice_area, statute-of-limitations dates appear correctly, and documents attach to the right crm.lead. The sample run surfaces any value-mapping gaps, custom-field name conflicts, or stage-probability mismatches before the full load commits.

  5. Execute full migration with delta-pickup window

    The full data load runs against your Odoo instance using the Odoo XML-RPC API (xmlrpc/2/object) for record writes and direct file upload for ir.attachment binaries. A delta-pickup window of 24–48 hours opens at cutover, during which your team continues working in The Attorney Case File. Any new cases, contacts, or documents created during this window are pulled in the final delta pass. FlitStack produces an audit log of every record written and supports one-click rollback to the pre-migration Odoo database state if reconciliation fails.

  6. Validate and reconcile with post-migration audit report

    After the migration and delta-pickup complete, FlitStack generates a reconciliation report comparing record counts and field totals between The Attorney Case File and Odoo for every object type. Document counts, total billing-hours migrated, and case-status distribution are verified against source totals. Unmatched or skipped records are flagged with reason codes. The report is delivered alongside a rebuild reference document for workflows, billing-rate schedules, and matter-status automation rules that must be recreated in Odoo.

Platform deep dives

Context on both ends of the pair

The Attorney Case File logo

The Attorney Case File

Source

Strengths

  • One-time pricing with no per-user per-month recurring cost for solo practitioners
  • Intuitive interface requiring minimal training for basic case management tasks
  • Responsive customer support cited across multiple user reviews
  • Customizable workbook structure adaptable to different practice areas
  • Designed specifically for attorneys rather than repurposed from a generic CRM

Weaknesses

  • No publicly documented API for programmatic data export or integration
  • Limited document management capabilities不适合 handling large case document volumes
  • Reported instability or lack of clear development roadmap in at least one review
  • May not scale for multi-party or highly complex litigation matters
  • No dedicated trust accounting or full practice accounting module
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 The Attorney Case File 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

    The Attorney Case File: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most The Attorney Case File to Odoo CRM migrations complete in 3–6 weeks for firms with fewer than 5,000 matters and fewer than 30 custom properties. Setups exceeding 20,000 records, heavy document archives, or multi-party cases that require res.partner junction records extend to 8–12 weeks. The longest phase is typically schema setup — creating custom fields on crm.lead and res.partner and mapping case-status values to Odoo crm.stage records — followed by document re-upload, which scales with file count and Odoo worker capacity.

Adjacent paths

Related migrations to explore

Ready when you are

Move from The Attorney Case File.
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