CRM migration
Field-level mapping, validation, and rollback between Lexis Affinity and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Lexis Affinity
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Lexis Affinity and Odoo CRM.
Complexity
BStandard
Timeline
72–96 hours
Overview
Lexis Affinity organizes law firm data around clients, matters, trust accounts, and document folders — a structure built for legal practice management rather than general sales CRM. Odoo CRM uses a unified res.partner model for both contacts and organizations, with crm.lead holding opportunities, and its accounting module handling invoicing separately from the CRM layer. FlitStack AI reads Lexis Affinity data via its export API and maps every client into res.partner, every matter into crm.lead (tagged with the original matter number for reference), and billable time entries into crm.lead activities or project.task depending on your Odoo configuration. Trust account balances migrate as monetary custom fields on the partner record since Odoo's native accounting module does not replicate legal trust-account semantics without additional configuration. Documents export from Lexis Affinity as file packages and re-upload to Odoo's ir.attachment model linked to the corresponding partner or lead record. Workflow automations built in Lexis Affinity — including matter-stage triggers and billing automations — do not migrate and must be rebuilt in Odoo using its automation rules or Studio workflows. We sequence the migration so partner records resolve before lead records, foreign keys are maintained throughout, and a delta-pickup window captures any new matters entered during the cutover window.
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 Lexis Affinity 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.
Lexis Affinity
Client
Odoo CRM
res.partner
1:1Lexis Affinity client records map directly to Odoo res.partner. The partner record carries the original client ID as a custom field for traceability. Multiple contacts per client (attorney, billing contact) create separate res.partner records linked to the primary client partner.
Lexis Affinity
Matter
Odoo CRM
crm.lead
1:1Each Lexis Affinity matter becomes an Odoo crm.lead record. The original matter number is stored in Matter_Number__c (custom Char field) on the lead. Matter status (open, closed, pending) maps to Odoo lead stage values. Multiple matter types (litigation, corporate) may require separate field-mapping profiles per type.
Lexis Affinity
Matter Type
Odoo CRM
crm.lead / tag_ids
1:1Lexis Affinity matter type codes (e.g., LIT, CORP, REAL) map to Odoo tag records. Tags are applied to the crm.lead for filtering. If Odoo has fewer than 20 tags, the mapping is straightforward; larger type sets require a custom selection field.
Lexis Affinity
Time Entry
Odoo CRM
crm.lead activity / project.task
1:1Billable time entries migrate as crm.lead activities with type='log_note' when Odoo project module is inactive. When the project module is active, time entries become project.task work records linked to the matter-lead. Each entry preserves the original date, duration, narrative, and attorney attribution.
Lexis Affinity
Bill / Invoice
Odoo CRM
account.move
1:1Lexis Affinity bills map to Odoo account.move records (type='out_invoice') under the accounting module. Bill status (draft, sent, paid) maps to Odoo state values. If the accounting module is not active, bills migrate as custom fields on crm.lead for later conversion. Line items carry description and hours from the originating time entries.
Lexis Affinity
Trust Account Balance
Odoo CRM
res.partner custom field / account.move
1:1Lexis Affinity trust account balances have no direct Odoo equivalent since legal trust accounting requires a dedicated chart of accounts with trust-specific journal codes. We migrate the last-known balance as Trust_Balance__c (Decimal) on res.partner and flag the record for accounting-side reconciliation before go-live.
Lexis Affinity
Document / File
Odoo CRM
ir.attachment
1:1Lexis Affinity documents export as file packages (PDF, DOCX, MSG) and re-upload to Odoo as ir.attachment records linked to res.partner or crm.lead via res_model and res_id. Folder hierarchy is lost; we reconstruct folder names as tags on the attachment for navigation. Inline images in notes are downloaded and rehosted as attachment files.
Lexis Affinity
Calendar / Appointment
Odoo CRM
calendar.event
1:1Lexis Affinity calendar entries migrate as Odoo calendar.event records linked to the res.users owner. Start datetime, stop datetime, and description carry over. Attendees (client contacts) are added as calendar.event partners when email addresses resolve to existing res.partner records. When a matching partner record does not exist, the attendee is stored as a display name until the contact is created in Odoo.
Lexis Affinity
User / Staff
Odoo CRM
res.users
1:1Lexis Affinity staff records map to Odoo res.users by email match. Rate-per-hour migrates as Rate_Hourly__c (Decimal) on res.users. Users without matching email are flagged before migration; the firm either creates Odoo accounts first or assigns records to a fallback user.
Lexis Affinity
Custom Field (Matter)
Odoo CRM
crm.lead custom field
1:1Lexis Affinity custom matter fields (e.g., Court Name, Opposing Counsel, Case Value) require Odoo custom fields on crm.lead. We create Char, Date, or Selection fields based on the source field type. Multi-value selection fields map to Odoo tags or many2many relation fields depending on the cardinality.
Lexis Affinity
Workflow Automation
Odoo CRM
No equivalent
1:1Lexis Affinity workflow rules, matter-stage triggers, and billing automations are not extractable in a form Odoo can import. We export workflow definitions as a JSON spec so your Odoo admin can rebuild them using Odoo Studio or server actions. This export is delivered alongside the migration plan.
Lexis Affinity
Client Communication Log
Odoo CRM
mail.message / crm.lead activity
1:1Logged client emails and notes in Lexis Affinity migrate as Odoo mail.message records on the crm.lead (internal notes) or as crm.lead activities with type='log_note'. Original timestamps and author user are preserved. Email threading is not reconstructed — each entry lands as a standalone note.
| Lexis Affinity | Odoo CRM | Compatibility | |
|---|---|---|---|
| Client | res.partner1:1 | Fully supported | |
| Matter | crm.lead1:1 | Fully supported | |
| Matter Type | crm.lead / tag_ids1:1 | Fully supported | |
| Time Entry | crm.lead activity / project.task1:1 | Fully supported | |
| Bill / Invoice | account.move1:1 | Fully supported | |
| Trust Account Balance | res.partner custom field / account.move1:1 | Fully supported | |
| Document / File | ir.attachment1:1 | Fully supported | |
| Calendar / Appointment | calendar.event1:1 | Fully supported | |
| User / Staff | res.users1:1 | Fully supported | |
| Custom Field (Matter) | crm.lead custom field1:1 | Fully supported | |
| Workflow Automation | No equivalent1:1 | Fully supported | |
| Client Communication Log | mail.message / crm.lead activity1: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.
Lexis Affinity gotchas
Records and Safe Custody module creates migration lock-in
DataForm custom field schemas are per-firm and must be reverse-engineered
Trust account sub-account types map differently to destination ledgers
Workflow automations do not export and must be rebuilt manually
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 Lexis Affinity data via export API
FlitStack connects to the Lexis Affinity instance using the firm's API credentials and exports all standard objects: clients, matters, time entries, documents, calendar entries, bills, trust account balances, and user records. We pull custom matter fields as part of the schema discovery pass. If the firm's Lexis Affinity plan does not include API access, we work from the platform's CSV/XLSX export function and parse the exported files. The export runs read-only — your team continues working in Lexis Affinity throughout.
Map source schema to Odoo CRM data model
We build a field-level mapping plan that covers every exported object. Client records map to res.partner. Matters map to crm.lead with the original matter number stored in a custom Char field. Time entries map to lead activities or project.task records depending on whether the Odoo project module is active. Bills map to account.move when the accounting module is configured. We create any missing custom fields on Odoo before data lands, using the spec derived from Lexis Affinity's schema discovery. The mapping plan is reviewed with your Odoo admin before execution.
Resolve user and attorney references by email
Every Lexis Affinity staff record (attorney, paralegal, billing clerk) is matched to an Odoo res.users record by email address. Users that do not resolve to an existing Odoo account are flagged in a pre-flight report — the firm either creates Odoo user accounts for them before migration or designates a fallback owner for their records. No matter or time entry lands without a responsible Odoo user assigned.
Run sample migration with field-level diff
A representative sample — typically 100–500 records spanning clients, matters, time entries, and documents — migrates into the configured Odoo instance first. We generate a field-level diff comparing source values against the destination records so you can verify matter-number mapping, stage assignment, attorney resolution, and document linkage before the full run commits. Any mapping errors are corrected before the production migration starts.
Execute full migration with delta-pickup window
The full dataset migrates into Odoo with foreign keys resolved in the correct sequence: res.partner first, then crm.lead with partner_id lookups, then activities, documents, and accounting records. A delta-pickup window of 24–48 hours runs after the main load to capture any new matters or time entries entered in Lexis Affinity during the cutover. FlitStack produces an audit log of every record created or updated. If reconciliation reveals unexpected gaps, one-click rollback reverts the Odoo instance to its pre-migration state.
Deliver trust-account reconciliation plan and workflow export
After data lands in Odoo, we deliver a trust-account reconciliation checklist that maps each Lexis Affinity trust balance to the corresponding Odoo journal entry or custom field. We also deliver the workflow definition JSON export so your Odoo admin or integration partner can begin rebuilding automations in Odoo Studio. Post-migration support is available for 30 days to address field-mapping corrections identified during user acceptance testing.
Platform deep dives
Lexis Affinity
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Lexis Affinity and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Lexis Affinity and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Lexis Affinity and Odoo CRM.
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
Lexis Affinity: Not publicly documented for the practice management module; enterprise customers should confirm limits during onboarding.
Data volume sensitivity
Lexis Affinity 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 Lexis Affinity to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Lexis Affinity 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 Lexis Affinity
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.