CRM migration
Field-level mapping, validation, and rollback between LawPracticeZA and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
LawPracticeZA
Source
Odoo CRM
Destination
Compatibility
10 of 10
objects map 1:1 between LawPracticeZA and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
LawPracticeZA is a legal-practice management application built for South African and Botswana law firms, with integrated billing, matter tracking, and trust accounting. Its API exposes a subset of data — primarily invoices, trust transactions, and fee postings — which constrains what can be migrated programmatically. Odoo CRM stores contacts in res.partner and sales opportunities in crm.lead, with a modular ERP architecture that covers CRM, sales orders, accounting, and inventory. FlitStack AI sequences the migration so client records land in res.partner first, fee earners map to res.users by email match, and matters migrate to crm.lead with a custom field carrying the original LawPracticeZA matter reference. Trust-accounting balances, WIP records, and billing history require custom fields and Odoo Advanced Accounting or community modules since Odoo has no native South African trust-accounting engine. Workflows, automations, and billing templates do not carry over — those must be rebuilt in Odoo's automation framework. The migration runs via LawPracticeZA's XML-RPC API for the subset of data it exposes, supplemented by direct database exports where the API does not reach, and validated against Odoo's XML import tooling before cutover.
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 LawPracticeZA 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.
LawPracticeZA
Client
Odoo CRM
res.partner
1:1LawPracticeZA client records map directly to Odoo res.partner. The client name maps to partner name, email to email, phone to phone, and address fields to street/city/state/zip on the partner record. Clients without a matter history land as plain contacts; those with open matters land with a note referencing the Odoo crm.lead record.
LawPracticeZA
Matter
Odoo CRM
crm.lead
1:1LawPracticeZA matters carry client, fee earner, matter type, jurisdiction, and practice area. These map to Odoo crm.lead fields: partner_id (client), user_id (fee earner), stage_id (matter status), with practice_area__c and jurisdiction__c created as custom fields on crm.lead. Original matter reference number stored in x_lpza_matter_ref__c for traceability.
LawPracticeZA
Fee Earner
Odoo CRM
res.users
1:1LawPracticeZA fee earners resolve to Odoo res.users by email match. The fee earner's department maps to Odoo department_id; their zone/permissions map to Odoo group membership (Sales / Administration). If a fee earner has no Odoo user account, FlitStack flags them for admin provisioning before the migration run.
LawPracticeZA
Invoice
Odoo CRM
account.move
1:1LawPracticeZA invoices map to Odoo account.move records in the 'out_invoice' type. The client on the invoice maps to res.partner; line items map to invoice lines on the account.move. Invoice number, date, amount, and payment status are preserved. If LawPracticeZA uses multi-currency or trust-linked invoicing, those flags store as custom fields on the account.move record.
LawPracticeZA
Billable Time (WIP)
Odoo CRM
account.analytic.line
1:1Work-in-progress fee entries from LawPracticeZA map to Odoo account.analytic.line for time-tracking accuracy. Each line records the fee earner as user_id, the matter as account_id, hours, unit amount, and date. Odoo analytic lines can be linked to projects or to crm.lead for revenue recognition if the firm uses Odoo Sales.
LawPracticeZA
Trust Transaction
Odoo CRM
account.move (trust journal)
1:1LawPracticeZA trust deposits and withdrawals require Odoo Advanced Accounting or a custom trust-accounting journal in Community Edition. We create a dedicated trust journal in Odoo, map transactions to account.move records in that journal, and store the original trust balance as a custom field on the client res.partner record for client-side trust accountability reporting.
LawPracticeZA
Custom Fields on Matter
Odoo CRM
Custom fields on crm.lead
1:1LawPracticeZA custom fields capturing jurisdiction, bar council number, conflict-check result, or matter billing tier migrate as custom fields on Odoo crm.lead. FlitStack creates each custom field in Odoo Studio before the migration run and maps source values directly. Field types (pick-list, text, date) are preserved as equivalent Odoo field types.
LawPracticeZA
Client Custom Fields
Odoo CRM
Custom fields on res.partner
1:1Firm-specific client properties — such as SARS tax number, FICA document status, or preferred contact method — migrate as custom fields on Odoo res.partner. These fields are created in Odoo before data lands so the import tooling recognises them on first load.
LawPracticeZA
Document / File Attachment
Odoo CRM
ir.attachment
1:1LawPracticeZA attachments on matters or invoices download and re-upload to Odoo's ir.attachment model, linked to the corresponding res.partner or crm.lead record. Odoo's file storage (filestore) handles attachments natively. Inline images in notes are extracted and re-hosted in Odoo's attachment storage.
LawPracticeZA
User / Login Zone
Odoo CRM
res.groups
1:1LawPracticeZA zone permissions (Fee Earner, Bookkeeper, Administrator) map to Odoo res.groups by value. The 'General Access' zone maps to the base public group; fee earner zones map to the Sales / User group; administrative zones map to the Access Rights group. FlitStack generates the group mapping as part of the migration plan before user records load.
| LawPracticeZA | Odoo CRM | Compatibility | |
|---|---|---|---|
| Client | res.partner1:1 | Fully supported | |
| Matter | crm.lead1:1 | Fully supported | |
| Fee Earner | res.users1:1 | Fully supported | |
| Invoice | account.move1:1 | Fully supported | |
| Billable Time (WIP) | account.analytic.line1:1 | Fully supported | |
| Trust Transaction | account.move (trust journal)1:1 | Fully supported | |
| Custom Fields on Matter | Custom fields on crm.lead1:1 | Fully supported | |
| Client Custom Fields | Custom fields on res.partner1:1 | Fully supported | |
| Document / File Attachment | ir.attachment1:1 | Fully supported | |
| User / Login Zone | res.groups1: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.
LawPracticeZA gotchas
South African trust accounting compliance requirements
Zone-based permission model does not map directly to other systems
API authentication uses firm code prefix and requires bookkeeper access
Incomplete API reference requires support coordination
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 LawPracticeZA data via API and manual export
FlitStack connects to the LawPracticeZA XML-RPC API to pull invoices, trust transactions, and fee postings. For entity types not exposed by the API (matters, clients if partially covered), we extract via CSV from the LawPracticeZA UI. The audit report lists every object, record count, and custom field discovered, forming the basis of the migration scope document and Odoo field-creation plan.
Create Odoo schema — custom fields, groups, trust journal
Before any data loads, FlitStack creates the required custom fields on crm.lead (x_lpza_matter_ref__c, x_jurisdiction__c, x_practice_area__c, x_billing_rate__c) and on res.partner (x_company_reg_no__c, x_trust_balance__c) as identified during the audit. It also sets up a dedicated trust accounting journal in Odoo's accounting module and configures res.groups to replicate LawPracticeZA zone permissions. The Odoo administrator reviews and approves the schema, ensuring that all custom fields and groups are in place before the migration run begins.
Resolve fee earners and create Odoo users
LawPracticeZA fee earners are matched to Odoo res.users by email address. FlitStack generates a user‑match report that lists which fee earners already have Odoo accounts, which need new accounts created, and which have no matching email at all. Firms create any missing Odoo user accounts before the migration run, ensuring that every matter links to a valid user_id rather than remaining unassigned. This pre‑flight step prevents orphaned records and speeds up the subsequent data load.
Migrate clients to res.partner first
Client records are loaded into Odoo res.partner before any matters or invoices so that foreign‑key resolution works correctly. After the client load, FlitStack runs a validation pass to confirm that all emails are unique, no duplicate partners were created, and every custom partner field received a value. Any client that had no associated matter in LawPracticeZA migrates as a plain contact record, preserving its name, address, and contact details for future use.
Migrate matters to crm.lead with custom field enrichment
Matters are loaded into Odoo crm.lead with partner_id pointing to the resolved res.partner record and user_id pointing to the matched fee earner. The original matter reference, jurisdiction, and practice area are written into their respective custom fields on the lead. FlitStack then runs a field‑level diff that compares the source matter count, stage distribution, and date ranges against the Odoo crm.lead record count and field‑population rate, highlighting any gaps for manual review before final sign‑off.
Load invoices, WIP entries, and trust transactions
Invoice records are loaded into account.move using the partner_id resolved during the client migration, and WIP entries are loaded into account.analytic.line linked to the matter’s analytic account. Trust transactions are directed into the dedicated trust journal created earlier. FlitStack produces a reconciliation report that contrasts LawPracticeZA invoice totals and trust balances with Odoo account.move totals and partner trust balances, helping to spot any discrepancies before the delta‑pickup window opens.
Delta-pickup window and cutover validation
A delta‑pickup window of 24–48 hours after the full migration captures any records created or modified in LawPracticeZA during the cut‑over period. FlitStack generates a final reconciliation report that compares source and destination record counts, amounts, and stage distributions, while an audit log records every operation performed. If reconciliation identifies discrepancies that exceed the defined tolerance threshold, a one‑click rollback restores the Odoo environment to its pre‑migration state, minimizing risk and ensuring data integrity.
Platform deep dives
LawPracticeZA
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 LawPracticeZA 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
LawPracticeZA: Not publicly documented.
Data volume sensitivity
LawPracticeZA 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 LawPracticeZA to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your LawPracticeZA 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 LawPracticeZA
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.