CRM migration
Field-level mapping, validation, and rollback between CASEpeer and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
CASEpeer
Source
Odoo CRM
Destination
Compatibility
11 of 12
objects map 1:1 between CASEpeer and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
CASEpeer organizes personal injury case data around cases, parties (plaintiffs/defendants), medical records, case milestones, and attorney assignments. Odoo CRM structures the same domain around crm.lead (for case referrals and prospective matters), res.partner (for parties and contacts), and sale.order (for active representation agreements). We map CASEpeer case records to Odoo opportunities, CASEpeer parties to res.partner contacts with custom fields for plaintiff/defendant roles, and CASEpeer case-stage history to Odoo's lead.scoring.history or custom stage-tracking fields. CASEpeer custom fields — including insurance carrier, statute of limitations dates, and referral source — migrate to Odoo custom fields on crm.lead via the ir.model.fields API. CASEpeer's calendar rules and court-specific deadlines map to Odoo CRM activities with deadline and responsible_id. CASEpeer attachments (settlement demands, court filings, medical records) re-upload to Odoo attachments linked to the partner or opportunity record. CASEpeer does not expose a public REST API for bulk export; we extract data via CASEpeer's CSV export and JSON API, then transform and load into Odoo via xmlrpc/jsonrpc using Odoo's import wizard or direct model写入. Workflows, automation rules, and third-party integrations (LawPay, Dropbox folders, CalendarRules) do not migrate and must be rebuilt in Odoo or reconnected as separate integrations.
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 CASEpeer 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.
CASEpeer
Case
Odoo CRM
crm.lead
1:1CASEpeer case records map to Odoo crm.lead (opportunity). The CASEpeer case number becomes crm.lead.name or a custom field Case_Number__c. Case stage names from CASEpeer (Intake, Under Investigation, etc.) map to Odoo pipeline stage values via value_mapping, potentially requiring a custom pipeline in Odoo CRM to mirror CASEpeer's lifecycle stages.
CASEpeer
Party (Plaintiff/Defendant)
Odoo CRM
res.partner
many:1CASEpeer parties are separate records with a role field (Plaintiff, Defendant, Insurance Carrier). Odoo res.partner stores all parties in one model. We create one res.partner per party and use a custom pick-list field Party_Role__c to preserve whether the contact is a plaintiff, defendant, or medical provider. Multi-party cases link via opportunity_partner_rel or a custom junction table.
CASEpeer
Insurance Carrier Contact
Odoo CRM
res.partner
1:1CASEpeer insurance carrier contacts map to res.partner records with Carrier__c checked as a boolean custom field. These carrier partners link to the crm.lead via partner_id or a custom Insurance_Carrier_ID__c lookup field, enabling carriers to receive status updates through Odoo's mail gateway and activity assignments tied to coverage verification deadlines.
CASEpeer
Medical Provider Contact
Odoo CRM
res.partner
1:1Medical providers from CASEpeer migrate as res.partner records with Provider__c custom boolean flag set to true. Their contact information (name, phone, address, NPI number if available) copies directly into Odoo fields. Provider records link to the case opportunity via custom Provider_ID__c lookup field for reporting on medical record requests, treatment timelines, and provider communication logs.
CASEpeer
Case Note
Odoo CRM
mail.message / crm.lead description
1:1CASEpeer case notes are timestamped text entries per case. We import them as mail.message records linked to the crm.lead with message_type='comment'. Odoo's chatter displays these chronologically. If the note count is large, we batch them via mail.message create() calls through the xmlrpc API.
CASEpeer
Calendar Event / Deadline
Odoo CRM
mail.activity
1:1CASEpeer calendar rules (court-specific deadlines) and manually created events become Odoo mail.activity records with activity_type_id, date_deadline, and user_id. We preserve the original event title as activity display name and the description as note. Recurring calendar rules require Odoo automation rules to be rebuilt using Odoo's server actions.
CASEpeer
Document / Attachment
Odoo CRM
ir.attachment
1:1CASEpeer file attachments (settlement demands, court filings, medical records) are downloaded and re-uploaded as Odoo ir.attachment records. They link to the crm.lead via res_model='crm.lead' and res_id=lead_id. Odoo Enterprise stores attachments in its filestore; Community uses database attachment storage by default. File size limits differ — CASEpeer has no stated cap; Odoo Community caps at 128MB per file on direct upload.
CASEpeer
Custom Case Fields
Odoo CRM
x_CustomField on crm.lead
1:1CASEpeer custom intake fields (e.g., Statute_of_Limitations_Date, Referral_Source, Insurance_Policy_Number) map to Odoo custom fields created via ir.model.fields on the crm.lead model. Each custom field requires a separate field creation step before migration. We map text fields, date fields, pick-list fields, and boolean fields type-by-type.
CASEpeer
Custom Party Fields
Odoo CRM
x_CustomField on res.partner
1:1CASEpeer custom fields on party records (e.g., Bar_Number for attorney contacts, DOB for plaintiff records) map to Odoo custom fields on res.partner. Field types must match — date fields to date fields, pick-lists to selection fields — or Odoo's import validation rejects the values.
CASEpeer
User / Attorney
Odoo CRM
res.users
1:1CASEpeer attorney and staff users map to Odoo res.users by email address. CASEpeer owner_id on case records resolves to Odoo user ID via email match. Unmatched owners are flagged and assigned to a fallback Odoo user or an unassigned placeholder created in advance.
CASEpeer
Case Status / Outcome
Odoo CRM
crm.lead stage + custom field
1:1CASEpeer case outcomes (Settled, Won, Lost, Dismissed) map to Odoo pipeline stage values. We create a custom Odoo pipeline called 'Case Pipeline' with stages matching CASEpeer status names. Stage probability and forecast category are set per Odoo stage configuration. Historical outcome timestamps are preserved in custom datetime fields on the lead.
CASEpeer
Billable Hours / Fees
Odoo CRM
sale.order.line / account.move
1:1CASEpeer tracks case hours and fees within the case record. Odoo separates billing into sale.order (for time-and-material quotes) and account.move (for invoices). We preserve CASEpeer fee totals and hour counts as read-only custom fields on the crm.lead. Odoo billing workflows must be rebuilt in Odoo if trust accounting is required.
| CASEpeer | Odoo CRM | Compatibility | |
|---|---|---|---|
| Case | crm.lead1:1 | Fully supported | |
| Party (Plaintiff/Defendant) | res.partnermany:1 | Fully supported | |
| Insurance Carrier Contact | res.partner1:1 | Fully supported | |
| Medical Provider Contact | res.partner1:1 | Fully supported | |
| Case Note | mail.message / crm.lead description1:1 | Fully supported | |
| Calendar Event / Deadline | mail.activity1:1 | Fully supported | |
| Document / Attachment | ir.attachment1:1 | Fully supported | |
| Custom Case Fields | x_CustomField on crm.lead1:1 | Fully supported | |
| Custom Party Fields | x_CustomField on res.partner1:1 | Fully supported | |
| User / Attorney | res.users1:1 | Fully supported | |
| Case Status / Outcome | crm.lead stage + custom field1:1 | Fully supported | |
| Billable Hours / Fees | sale.order.line / account.move1: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.
CASEpeer gotchas
Dropbox custom folder creation fails silently for extended periods
Custom fields unavailable on the Client Intake Form
Data Sync is a daily batch export, not a live data feed
Mass texting and attachment-in-text unavailable across all tiers
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
Extract CASEpeer data via available export path
We assess whether the CASEpeer account has Advanced tier Data Sync (AWS S3 export) or uses Basic/Pro tier CSV exports. For S3 exports, we download the nightly JSON dumps from the configured S3 bucket and parse case, party, note, and attachment records. For CSV exports, we scrape the CSV via authenticated session, reconstruct parent-child relationships from foreign key columns, and validate party-to-case linkage before transformation begins. This step runs in parallel with Odoo schema setup.
Create Odoo custom fields and pipeline stages
Before data loads, we create all custom fields required for the migration on the crm.lead and res.partner models. For Odoo Enterprise, we use xmlrpc write calls to ir.model.fields. For Odoo Community, we generate a custom module Python file that declares x_ fields (e.g., x_Case_Type__c, x_Party_Role__c) and install it via the Odoo Apps interface. We also create the custom 'Case Pipeline' with stages matching CASEpeer status names. This step requires an Odoo admin account with write access to technical settings.
Run sample migration with field-level diff
A representative slice migrates first — typically 50–100 CASEpeer cases spanning different case types, stages, and party counts. We validate that case numbers map to crm.lead.name, case stages map to the correct stage_id, parties create as res.partner records with correct roles, and attachments link to the right opportunity. We generate a field-level diff report showing source field values versus Odoo field values for each migrated record. You review the diff; we adjust field mapping rules before the full run commits.
Execute full migration with delta-pickup window
The full CASEpeer dataset migrates in sequence: parties (res.partner) first for foreign key resolution, then cases (crm.lead) with party links, then case notes (mail.message) linked to leads, then calendar events (mail.activity), then attachments (ir.attachment) with res_model='crm.lead'. A delta-pickup window opens at migration start — any CASEpeer records modified or created during the migration window are captured in a second pass after the main load completes. We use xmlrpc/jsonrpc calls to Odoo's external API for each write operation, batching records in groups of 100 to stay within API rate limits.
Validate, audit log, and one-click rollback readiness
After migration completes, we run a reconciliation check comparing CASEpeer record counts against Odoo record counts per object. We verify that every migrated crm.lead has a non-null stage_id, every res.partner has a name, and every party linked to a case has the correct Party_Role__c value. We generate an audit log CSV listing every record created in Odoo with its source CASEpeer ID and the timestamp of the migration write. If reconciliation reveals discrepancies, we offer a one-click rollback that deletes the migrated Odoo records and restarts the full run.
Platform deep dives
CASEpeer
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 CASEpeer 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
CASEpeer: Not publicly documented — CASEpeer does not publish a general developer portal with limits. Partner integrations operate under contractually defined thresholds..
Data volume sensitivity
CASEpeer 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 CASEpeer to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your CASEpeer 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 CASEpeer
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.