CRM migration
Field-level mapping, validation, and rollback between LegalE and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
LegalE
Source
Odoo CRM
Destination
Compatibility
10 of 10
objects map 1:1 between LegalE and Odoo CRM.
Complexity
CModerate
Timeline
48–72 hours
Overview
Teams migrate from Legale to Odoo CRM to escape fragmented toolchains — Odoo covers CRM, accounting, inventory, and projects in one modular suite with a shared PostgreSQL backend. The migration carries Legale's contact, company, deal, activity, and custom property data into Odoo's res.partner and crm.lead records, with stage categories mapped to Odoo's crm.stage per team. FlitStack AI reads Legale via its REST API, resolves owners by email against Odoo res.users, and writes via Odoo's XML-RPC API using partner_id lookups. Workflows, document templates, and automations in Legale do not migrate — they must be rebuilt in Odoo's studio and automation tools. We run a test migration first, generate a field-level diff, then execute the full load with a 24–48-hour delta window to capture any Legale records modified during cutover. The test run validates field mapping accuracy, owner resolution rates, and attachment linkage before the production migration commits.
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 LegalE 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.
LegalE
Contact
Odoo CRM
res.partner
1:1Legale contacts map to Odoo res.partner records with type='contact'. The partner_id on Odoo opportunities references these records. Legale contacts without a company association get a standalone partner record; those linked to a Legale company use the mapped company partner as parent_id.
LegalE
Company
Odoo CRM
res.partner
1:1Legale companies map to Odoo res.partner records with type='company'. The parent_id relationship is set for child companies. Odoo distinguishes companies from contacts via the type field alone — Legale's separate Company object collapses into the same partner table with a different type value.
LegalE
Deal
Odoo CRM
crm.lead
1:1Legale deals map to Odoo crm.lead records where type='opportunity'. The name field maps to opportunity name, amount to expected_revenue, and close_date to date_deadline. The Legale stage value maps to a specific Odoo crm.stage via the stage_id lookup scoped to the target sales team.
LegalE
Pipeline Stage
Odoo CRM
crm.stage
1:1Each Legale deal stage is mapped value-by-value to an Odoo crm.stage record within the target crm.team. Odoo stages carry a sequence integer and probability percentage that are applied from the Legale stage definition. Teams with multiple Legale pipelines map to multiple Odoo crm.team records, each with its own stage sequence.
LegalE
User / Owner
Odoo CRM
res.users
1:1Legale owner IDs are resolved by email match against Odoo res.users records. The crm.lead owner_id field references the matched res.users id. Legale owners without a corresponding Odoo user are flagged before migration — your admin either creates the Odoo user first or assigns those records to a fallback owner.
LegalE
Activity (call/email/meeting/note)
Odoo CRM
mail.message + mail.activity
1:1Legale logged calls and emails map to Odoo mail.message records with model='crm.lead' and res_id pointing to the opportunity. Meetings map to calendar.event records with linked crm.lead. Notes map to mail.message with subtype='comment'. All records preserve the original Legale timestamp, body content, and author user.
LegalE
Custom Property
Odoo CRM
ir.model.fields
1:1Legale custom properties are exported as field definitions and recreated as custom fields on the target Odoo model (res.partner for contact properties, crm.lead for deal properties). Pick-list properties in Legale require matching selection fields in Odoo with value-by-value mapping. The field definitions are loaded via Odoo's CSV import or XML data file.
LegalE
Attachment
Odoo CRM
ir.attachment
1:1Legale file attachments are re-uploaded as Odoo ir.attachment records with name, db_datas (base64 binary), res_model set to the parent model (res.partner or crm.lead), and res_id pointing to the migrated record ID. Odoo's filestore path is reconstructed on write. Files over 115MB require chunked handling.
LegalE
Tag / Label
Odoo CRM
crm.tag
1:1Legale deal tags and contact labels map to Odoo crm.tag records via a direct transformation. Tags are created first as crm.tag records in Odoo, then linked to crm.lead records via the tag_ids many2many relationship field. Legale tags with no existing Odoo equivalent are created on the fly during migration using the tag name and stored in the crm.tag model. The migration preserves tag color metadata when available.
LegalE
Workflow / Automation
Odoo CRM
ir.actions.server + base.automation
1:1Legale workflows, sequences, and email templates have no Odoo equivalent in the migration data — they must be rebuilt manually in Odoo Studio or via the automation framework. FlitStack AI exports Legale workflow definitions as JSON for reference so your Odoo admin can reconstruct them in the correct sequence.
| LegalE | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Company | res.partner1:1 | Fully supported | |
| Deal | crm.lead1:1 | Fully supported | |
| Pipeline Stage | crm.stage1:1 | Fully supported | |
| User / Owner | res.users1:1 | Fully supported | |
| Activity (call/email/meeting/note) | mail.message + mail.activity1:1 | Fully supported | |
| Custom Property | ir.model.fields1:1 | Fully supported | |
| Attachment | ir.attachment1:1 | Fully supported | |
| Tag / Label | crm.tag1:1 | Fully supported | |
| Workflow / Automation | ir.actions.server + base.automation1: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.
LegalE gotchas
Public technical documentation is sparse
Per-matter pricing makes historical-data scope matter
Document attachments require a separate retrieval path
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
Inventory Legale objects and export schema
FlitStack AI authenticates against Legale's REST API using your credentials, then enumerates all object types (contacts, companies, deals, activities, attachments) and their field definitions — including custom properties. We compute record counts per object, identify pick-list fields, and pull a representative sample of records to validate field content before mapping decisions are made. This inventory produces the field map, custom field manifest, and migration plan that your team reviews before any data moves.
Create Odoo custom fields and team-stage structure
Before loading data, your Odoo admin creates the custom fields identified in the manifest — using Odoo Studio or CSV import on ir.model.fields — and sets up crm.team records with stage sequences matching your target pipeline structure. FlitStack AI delivers a setup checklist that names each required field, its Odoo type, and any pick-list values to configure. This step runs in parallel with the Legale data export so both sides are ready simultaneously.
Resolve owners and export Legale data
FlitStack AI resolves Legale owner email addresses against Odoo res.users records by matching the email field. Owners without an Odoo user are flagged with a recommendation to either create the Odoo user first or assign their records to a fallback owner. Once owner resolution is confirmed, FlitStack exports all Legale data in dependency order — companies (res.partner type=company), then contacts (res.partner type=contact), then opportunities (crm.lead), then activities (mail.message), then attachments (ir.attachment) — ensuring foreign-key lookups resolve correctly on write.
Run test migration with field-level diff
A representative slice of records — typically 100–500 covering a range of deal stages, contact types, and custom property values — is migrated to a staging Odoo environment. FlitStack AI generates a field-level diff comparing each source field value against the Odoo destination value for every migrated record. Your team reviews the diff to confirm stage mapping, owner resolution, custom field population, and attachment linkage before the full run is approved.
Execute full migration and delta-pickup window
The full Legale dataset loads into Odoo via XML-RPC batched calls against the /xmlrpc/2/object endpoint, with each batch validated before committing. A delta-pickup window of 24–48 hours opens after the main load completes, capturing any Legale records modified or created during the cutover window. FlitStack AI's audit log records every operation, and one-click rollback reverts the Odoo environment to its pre-migration state if reconciliation finds unexpected discrepancies.
Platform deep dives
LegalE
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 1 of 8 objects need a manual workaround.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across LegalE and Odoo CRM.
Object compatibility
1 of 8 objects need a manual workaround.
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
LegalE: Not publicly documented..
Data volume sensitivity
LegalE 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 LegalE to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your LegalE 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 LegalE
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.