CRM migration
Field-level mapping, validation, and rollback between MerusCase and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
MerusCase
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between MerusCase and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
MerusCase structures its data around legal cases: parties, activities, ledgers, settlements, and up to 50 custom fields per case. Odoo CRM uses crm.lead for opportunities (cases land as opportunities) and res.partner for contacts and companies, with custom fields stored via Odoo's field-creation API. The migration carries all standard case data — case numbers, party names, damages, settlement amounts, case-type tabs, and case-specific custom fields — into Odoo CRM's opportunity model and partner contacts. Activities (calls, emails, notes) migrate as Odoo CRM activities linked to the opportunity. We map MerusCase party roles (plaintiff, defendant, opposing counsel, insurance carrier) to Odoo CRM partner tags and custom partner fields. Custom fields of all five MerusCase types (Date, Currency, Text, Numeric, Yes/No) create equivalent custom fields in Odoo. Workflows, automations, and document templates do not migrate — those must be rebuilt using Odoo Studio or the Automate menu. The migration uses Odoo's XML-RPC API with batch upsert to handle the relational integrity between opportunities and partners.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a MerusCase 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.
MerusCase
Case (CaseFile)
Odoo CRM
crm.lead (Opportunity)
1:1MerusCase cases map to Odoo CRM opportunities. The case number becomes opportunity name with the case type appended. Original create date and last-modified date preserve as custom datetime fields since Odoo sets CreateDate at migration time. Case status maps to Odoo CRM stage_id via value_mapping per case type.
MerusCase
Contact (Party)
Odoo CRM
res.partner
1:1MerusCase party contacts map to Odoo res.partner records. The party's role in the case (plaintiff, defendant, opposing counsel) migrates as partner tags and a custom selection field on the partner record. Primary contact email, phone, and address fields map directly to Odoo partner fields.
MerusCase
Company (Insurance Carrier)
Odoo CRM
res.partner (company_type=company)
1:1Insurance carriers and employer entities from MerusCase map to res.partner records with company_type set to 'company'. The carrier's claims address and contact name become Odoo partner address and contact fields. Carrier-specific claim limits or policy references store as custom fields on the partner.
MerusCase
Activity (Call/Email/Note)
Odoo CRM
crm.activity / mail.message
1:1MerusCase activities attached to a case migrate as Odoo CRM activities linked to the crm.lead. Call activities create crm.activity records with activity_type_id set to Phone Call. Emails create mail.message records threaded to the opportunity. Original timestamps and staff owner IDs preserve via custom datetime fields and user email matching.
MerusCase
Custom Field (Date, Currency, Text, Numeric, Yes/No)
Odoo CRM
ir.model.fields (custom x_ fields)
1:1MerusCase custom fields create equivalent custom fields in Odoo CRM via ir.model.fields. Date types use ttype=date, Currency uses ttype=monetary (linked to res.currency), Text uses ttype=text, Numeric uses ttype=float or integer, Yes/No uses ttype=boolean. The custom field is created on crm.lead before migration; field labels preserve the MerusCase field name.
MerusCase
CaseLedger (Time Entry, Expense, Damages)
Odoo CRM
account.move.line or Custom Fields on crm.lead
1:1MerusCase ledger entries with task_code, activity_code, and expense_code map to a combination of Odoo CRM custom fields on the opportunity and optionally account.move.line records if Odoo Accounting is active. Damages and settlement amounts store as monetary custom fields on the crm.lead for reporting continuity.
MerusCase
CaseType (Practice Area Tab)
Odoo CRM
crm.lead (via custom stage or tag per case type)
1:1MerusCase case types (Workers' Comp, Personal Injury, Criminal, Employment) map to Odoo CRM pipeline stages or custom tags on the opportunity. A firm running Workers' Comp cases and Personal Injury cases in separate pipelines gets separate Odoo CRM sales teams and stage sets per case type.
MerusCase
Attachment / Document
Odoo CRM
ir.attachment
1:1MerusCase documents attached to cases (PDFs, scanned filings, medical records) are re‑uploaded to Odoo CRM as ir.attachment records linked to the corresponding crm.lead using the original case number as the matching key. File size limits apply per Odoo configuration; for archives exceeding typical thresholds, FlitStack can leverage Odoo’s external storage options or split uploads into manageable chunks. Original document names and upload timestamps are preserved in the attachment metadata for auditability.
MerusCase
Staff / User
Odoo CRM
res.users
1:1MerusCase staff members (attorneys, paralegals, admins) resolve to Odoo res.users by matching the email address stored in MerusCase against existing Odoo user accounts. Any staff member without a matching email is flagged in a pre‑migration report, allowing your admin to either create the Odoo user, assign a designated fallback user, or place the staff records in a queue for later mapping. This ensures every case and activity in Odoo has a valid owner from the start.
MerusCase
Workflow (automation rules)
Odoo CRM
Not migrated
1:1MerusCase Workflows triggered by activity tags or description text do not transfer to Odoo. They must be rebuilt using Odoo CRM's Automate menu or Odoo Studio. FlitStack exports the workflow definitions as a JSON reference file for your Odoo admin to use during rebuild.
MerusCase
Special Handling / Settlement
Odoo CRM
Custom fields on crm.lead
1:1MerusCase special handling flags and settlement details map to custom fields on the Odoo opportunity. Settlement status (open, settled, closed) becomes a selection field; settlement amount and payment date store as monetary and date custom fields for reporting against the opportunity.
MerusCase
Billing Code / UTBMS Code
Odoo CRM
product.product or account.account
1:1MerusCase UTBMS L-Codes (task), A-Codes (activity), and E-Codes (expense) require mapping to Odoo products or accounts. If Odoo Timesheet or Expense module is active, we map task codes to analytic accounts; otherwise they store as custom selection fields on the opportunity for billing reference.
| MerusCase | Odoo CRM | Compatibility | |
|---|---|---|---|
| Case (CaseFile) | crm.lead (Opportunity)1:1 | Fully supported | |
| Contact (Party) | res.partner1:1 | Fully supported | |
| Company (Insurance Carrier) | res.partner (company_type=company)1:1 | Fully supported | |
| Activity (Call/Email/Note) | crm.activity / mail.message1:1 | Fully supported | |
| Custom Field (Date, Currency, Text, Numeric, Yes/No) | ir.model.fields (custom x_ fields)1:1 | Fully supported | |
| CaseLedger (Time Entry, Expense, Damages) | account.move.line or Custom Fields on crm.lead1:1 | Fully supported | |
| CaseType (Practice Area Tab) | crm.lead (via custom stage or tag per case type)1:1 | Fully supported | |
| Attachment / Document | ir.attachment1:1 | Fully supported | |
| Staff / User | res.users1:1 | Fully supported | |
| Workflow (automation rules) | Not migrated1:1 | Fully supported | |
| Special Handling / Settlement | Custom fields on crm.lead1:1 | Fully supported | |
| Billing Code / UTBMS Code | product.product or account.account1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
MerusCase gotchas
Annual subscription and data access tied together
Outbound migration is not supported by MerusCase
Document Archive exports are per-case, not bulk
Built-in CSV import tools are not easy to use
Custom Fields apply to Cases only and have a 50-field cap
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
Export MerusCase data via Document Archive and API
FlitStack pulls MerusCase data using a combination of the Document Archive download (for document packages and activity CSVs per case) and the MerusCase REST API endpoints (for cases, contacts, parties, ledgers, and custom field values). We use scoped read access — your team continues working in MerusCase throughout. The API exports run in batches to handle rate limits, and we flag any custom fields exceeding the 50-field limit before mapping begins.
Create Odoo custom fields and partner-tag structure
Before data moves, your Odoo admin (or our team) creates the custom fields on crm.lead and res.partner that are needed for MerusCase custom field values, party roles, and UTBMS codes. We deliver a custom-field creation checklist that maps each MerusCase field name to its Odoo field type, label, and target model. Partner tags for party roles (Plaintiff, Defendant, Insurance Carrier, etc.) are also created in Odoo CRM settings during this step.
Resolve MerusCase staff to Odoo res.users
MerusCase staff IDs resolve to Odoo res.users by matching the email address stored in MerusCase against Odoo user accounts. Any staff member without a corresponding Odoo user is flagged in a pre‑migration report, allowing your team to create the Odoo account or assign a designated fallback user before the data load. All cases and activities are linked to a valid user_id, ensuring that the owner field on the crm.lead is populated and that activity assignments appear correctly in Odoo’s pipeline view.
Run sample migration with field-level diff
A representative slice migrates first — typically 50–200 cases spanning each case type, with contacts, activities, and custom fields. We generate a field‑level diff between the MerusCase source values and the Odoo destination fields, highlighting any missing mappings, type mismatches, or truncated values. This diff lets you verify party‑role mapping, custom field values, ledger totals, and the correct assignment of staff owners before the full run commits. You can request adjustments to the mapping or field creation based on the diff output.
Execute full migration with delta-pickup window
Full migration runs against Odoo CRM using XML‑RPC batch upsert, processing records in configurable batch sizes to stay within API rate limits. A delta‑pickup window of 24–48 hours captures any cases, contacts, or activities created or modified in MerusCase after the initial load, ensuring Odoo reflects the most recent state at cut‑over. Every create and update operation is recorded in an audit log, and if reconciliation detects missing or inconsistent data, a one‑click rollback reverts the Odoo environment to the pre‑migration snapshot, allowing your team to correct the issue and re‑run without data loss.
Platform deep dives
MerusCase
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across MerusCase and Odoo CRM.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
MerusCase: Not publicly documented.
Data volume sensitivity
MerusCase doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during MerusCase to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your MerusCase to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave MerusCase
Other ways to arrive at Odoo CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.