CRM migration
Field-level mapping, validation, and rollback between Legl and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Legl
Source
Odoo CRM
Destination
Compatibility
11 of 11
objects map 1:1 between Legl and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Legl organizes data around legal-industry concepts: businesses with registration numbers, contacts tied to AML and KYC compliance, engage requests tracking client due diligence, risk assessments covering regulatory checks, and configurable multi-step workflows for onboarding. Odoo CRM uses crm.lead (which can represent a Lead or Opportunity depending on stage), res.partner (unified company-contact model), and crm.stage for pipeline states. No Odoo native object handles AML compliance records or risk assessments — those require custom fields on res.partner or dedicated models. We migrate Legl businesses to res.partner (company mode), Legl contacts to res.partner (individual mode), engage requests and risk assessments to custom fields on the partner record, payments as account.move lines attached to partners, and activities to Odoo mail.message and crm.activity. Legl workflows do not migrate — Odoo automation rules run at the object level and must be rebuilt in Odoo Studio. Our migration engine reads Legl via REST API (3,600 requests/hour sustained), transforms records into Odoo XML-RPC payloads, and batches uploads to stay within Odoo's per-user API throughput limits. A delta-pickup window captures records modified during cutover. We deliver a sample migration with field-level diff before committing the full run.
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 Legl 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.
Legl
Legl Business
Odoo CRM
res.partner (company mode)
1:1Legl business maps directly to Odoo res.partner with is_company=True. Company name maps to name, domain to website, and industry to industry_id. Registration number, VAT number, and registration date have no Odoo standard fields — these become x_registration_number, x_vat_number, and x_registration_date custom fields on res.partner. The Legl business ID is stored as x_legl_business_id for delta-run deduplication.
Legl
Legl Contact
Odoo CRM
res.partner (individual mode)
1:1Legl contact maps to Odoo res.partner with is_company=False. First name and last name combine into the Odoo name field; email maps to email, phone to phone, and mobile to mobile. Job title from Legl has no standard Odoo partner field — it becomes x_job_title custom field. The Legl contact ID is stored as x_legl_contact_id for traceability.
Legl
Legl Contact.primary_business_id
Odoo CRM
res.partner.parent_id
1:1Legl's primary_business_id link on a contact translates to res.partner.parent_id pointing to the corresponding Legl Business mapped as res.partner (company). This satisfies Odoo's requirement that individual contacts have a parent company. Legl contact-secondary-business associations are preserved as additional res.partner records linked via child_ids chain.
Legl
Legl Engage Request
Odoo CRM
res.partner custom fields
1:1Legl engage requests track AML/CDD workflow state per business. Odoo CRM has no native engage-request object. We create x_engage_status (selection: pending, in_review, approved, rejected), x_engage_completed_date (datetime), and x_engage_reviewer (char) on res.partner. The engage request ID is stored as x_legl_engage_id for reference. If your firm tracks multiple engage requests per business, a separate res.partner relation table is required.
Legl
Legl Risk Assessment
Odoo CRM
res.partner custom fields
1:1Legl risk assessments hold KYC check results with type, status, PDF URL, and completion timestamp. Odoo CRM has no native risk-assessment object. We create x_risk_type (selection: business, individual, enhanced_due_diligence), x_risk_status (selection: pending, passed, failed, requires_review), x_risk_completed_date (datetime), and x_risk_pdf_url (char) on res.partner. The risk assessment ID is stored as x_legl_risk_id.
Legl
Legl Payment
Odoo CRM
account.payment linked to res.partner
1:1Legl payments (for subscription billing or client invoicing) map to Odoo account.payment records linked to the res.partner representing the paying entity. Amount, currency, and payment_date map directly. Legl payment status (pending, completed, failed) maps to Odoo payment state. Payment ID stored as x_legl_payment_id. Requires Odoo Accounting app to be installed.
Legl
Legl Workflow
Odoo CRM
No equivalent — documentation for Odoo Studio rebuild
1:1Legl workflows are organization-level multi-step automation with configurable steps, assignee rules, and status transitions. Odoo automation rules operate per-object and cannot replicate Legl's cross-entity workflow model natively. We export Legl workflow definitions as a structured JSON document and deliver an Odoo Studio rebuild guide mapping each Legl step to Odoo server actions and automated actions on crm.lead or res.partner.
Legl
Legl Activity (calls, meetings, notes)
Odoo CRM
mail.message and crm.activity
1:1Legl activity records (call logs, meeting records, notes attached to a business or contact) migrate to Odoo mail.message entries on the corresponding res.partner. Original timestamps and author information are preserved. Call duration maps to mail.message.x_duration_seconds as a custom field. Meeting subject and location map to the body field.
Legl
Legl Business Owner
Odoo CRM
res.users linked by email match
1:1Legl stores owner_id on each business record. We resolve this to an Odoo res.users record by matching the owner email against Odoo user login. Unmatched owners are flagged before migration — your Odoo admin either creates the user first or assigns records to a fallback user. Owner ID stored as x_legl_owner_id for audit.
Legl
Legl Integration Connections
Odoo CRM
No equivalent — third-party connections must be rebuilt
1:1Legl integrates with Clio, Actionstep, DPS, P4W, Proclaim, ShareDo, and Quill. These third-party connections cannot migrate. Each integration must be rebuilt in Odoo via Odoo's app connector ecosystem, direct API webhook, or a middleware tool. We document the Legl integration endpoints active in your account as a rebuild reference.
Legl
Legl Organisation Settings
Odoo CRM
res.company configuration
1:1Legl organisation-level settings (company name, address, branding) map to Odoo res.company. Legl API organisation endpoint provides the source data. Odoo company currency, fiscal year, and letter format settings must be configured manually post-migration — we provide a configuration checklist as part of the handoff package.
| Legl | Odoo CRM | Compatibility | |
|---|---|---|---|
| Legl Business | res.partner (company mode)1:1 | Fully supported | |
| Legl Contact | res.partner (individual mode)1:1 | Fully supported | |
| Legl Contact.primary_business_id | res.partner.parent_id1:1 | Fully supported | |
| Legl Engage Request | res.partner custom fields1:1 | Fully supported | |
| Legl Risk Assessment | res.partner custom fields1:1 | Fully supported | |
| Legl Payment | account.payment linked to res.partner1:1 | Fully supported | |
| Legl Workflow | No equivalent — documentation for Odoo Studio rebuild1:1 | Fully supported | |
| Legl Activity (calls, meetings, notes) | mail.message and crm.activity1:1 | Fully supported | |
| Legl Business Owner | res.users linked by email match1:1 | Fully supported | |
| Legl Integration Connections | No equivalent — third-party connections must be rebuilt1:1 | Fully supported | |
| Legl Organisation Settings | res.company configuration1: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.
Legl gotchas
Beta API endpoints carry schema stability risk
Sandbox access requires direct support contact
Payment checkout URLs reference external Stripe sessions
AML audit dashboards require real-time data from connected PMS
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
Audit Legl data inventory and configure Odoo schema
We inventory all Legl objects accessible via the REST API — businesses, contacts, engage requests, risk assessments, payments, activities, and workflows — and record their record counts, field inventories, and association cardinalities. Simultaneously, we configure the Odoo CRM schema: we create all required custom fields on res.partner (engage status, risk type/status, Legl IDs), configure pipeline stages in crm.lead to match any Legl sales-process records, set up Odoo users matched to Legl owner emails, and install the Odoo Accounting app if payment migration is required. We deliver a schema setup checklist before data extraction begins.
Extract Legl data via REST API with rate-limit-aware pagination
Legl's REST API at api.legl.com/v1 exposes list and retrieve endpoints for all major objects. We paginate through each object type using Legl's cursor-based pagination, respecting the 3,600 requests/hour sustained limit. Engage requests and risk assessments are fetched per business using the /businesses/{id}/engage_requests and /businesses/{id}/risk_assessments sub-endpoints. All records are written to a local staging store with original timestamps, owner IDs, and Legl internal IDs preserved. We flag any records with missing required fields before the transform phase.
Transform records and resolve owner cross-references
Legl records are transformed into Odoo XML-RPC payloads. Legl businesses become res.partner (is_company=True) with custom compliance fields. Legl contacts become res.partner (is_company=False) with parent_id pointing to the primary business partner. Owner IDs from Legl are resolved against the Odoo user list by email match; unmatched owners are flagged with a fallback assignment rule (designated admin user or unassigned bucket). Engage requests and risk assessments are written as field values on the corresponding res.partner. Legl workflow definitions are serialized to JSON and stored as an attachment on the Odoo res.company record for rebuild reference.
Run sample migration with field-level diff and validate
A representative sample — typically 200–500 records covering businesses, contacts, engage requests, and risk assessments — is migrated first. We generate a field-level diff comparing source Legl values against the destination Odoo record values for every mapped field. Compliance custom fields, owner resolution, and partner hierarchy are verified manually against the source data. You review the diff and sign off before the full migration runs. Any field mapping errors are corrected in the transform layer before re-running the sample.
Execute full migration with delta-pickup window and post-migration audit
The full dataset is migrated in batches of 50 records per Odoo XML-RPC call, paced to avoid worker saturation. A delta-pickup window opens at migration start: any Legl records created or modified after the extraction snapshot are re-fetched at cutover and applied as a final delta pass. An audit log records every record written, every field mapped, and every owner resolved. We run a reconciliation count against Legl record totals. One-click rollback reverts all Odoo writes if reconciliation fails. We deliver the Odoo Studio rebuild guide for Legl workflows and a custom-field reference sheet for your Odoo admin.
Platform deep dives
Legl
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Legl and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Legl and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Legl 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
Legl: 3600 requests per hour sustained, burst rate of 120 requests per minute.
Data volume sensitivity
Legl 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 Legl to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Legl 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 Legl
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.