CRM migration
Field-level mapping, validation, and rollback between LawPracticeZA and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
LawPracticeZA
Source
Twenty CRM
Destination
Compatibility
11 of 12
objects map 1:1 between LawPracticeZA and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
LawPracticeZA is a South African legal practice management platform built around clients, matters, fee earners, and trust accounting — with deep compliance controls for the Legal Practice Act. Twenty CRM is an open-source general-purpose CRM with standard objects for People, Companies, Opportunities, Tasks, and Notes, plus a custom-object model that your admin configures in Settings → Data Model. The two platforms share no native legal-matter or trust-accounting objects, which means the migration requires custom-field creation on Twenty's Opportunities object to hold matter references, trust-account balances, and client-specific billing data. FlitStack AI reads LawPracticeZA via its REST API (authenticated as a bookkeeper-level API user), extracts client records, matter records, fee-earner assignments, and trust-account transactions, then maps them into Twenty's People and Companies objects first, followed by Opportunities with a cascade of custom fields. Billing invoices and trust transfers are exported as structured CSV for re-import into Twenty as Note attachments or custom-object records — they do not map as native billing objects because Twenty has no invoice or trust-account entity. We sequence the migration so parent relationships resolve correctly: Companies → People → Opportunities. Owner resolution matches LawPracticeZA fee-earner email addresses to Twenty workspace member email addresses. A sample import runs before the full cutover, and a 24–48 hour delta window captures any LawPracticeZA records modified during the switchover.
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 Twenty 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
Twenty CRM
People
1:1LawPracticeZA clients map directly to Twenty People. The client name splits into firstName and lastName on the Twenty People record. If LawPracticeZA stores a company name instead of an individual name, the record maps to a Company in Twenty and a People record is created as the primary contact within that Company.
LawPracticeZA
Client
Twenty CRM
Company
1:manyWhen a LawPracticeZA client record represents a law firm or corporate entity rather than an individual, the name maps to Twenty Companies. The People record created from the same client row becomes the primary contact linked to that Company via the People.companyId relation. This split is resolved during the mapping phase using the client name format and presence of an email address.
LawPracticeZA
Matter
Twenty CRM
Opportunity
1:1LawPracticeZA matters have no direct Twenty equivalent. We map each matter to a Twenty Opportunity, capturing the matter name as Opportunity.name, the matter reference number as a custom field (Matter_Reference__c), and the matter status as a custom select field (Matter_Status__c). The Opportunity Stage in Twenty is set based on the LawPracticeZA matter phase — active matters map to an open stage, closed matters map to a Won or Lost stage depending on outcome.
LawPracticeZA
Matter Stage / Phase
Twenty CRM
Opportunity Stage
1:1LawPracticeZA matter phases (Intake, Instruction, Drafting, Negotiating, Settlement, Trial, Closed) map value-by-value to Twenty Opportunity stage values. We create a stage-mapping table during discovery. Firms can rename Twenty stages to match their matter phases before migration so the import lands with correct labels.
LawPracticeZA
Fee Earner
Twenty CRM
WorkspaceMember
1:1LawPracticeZA fee earners are attorneys and staff who bill time to matters. Twenty has no native fee-earner object — workspace members are regular Twenty users. We resolve each LawPracticeZA fee earner by matching their email address to a Twenty workspace member. If no match exists, the fee earner is flagged before migration and can be invited to Twenty first. Unmatched fee earners are assigned to a fallback Twenty user for time-tracking continuity.
LawPracticeZA
Trust Account
Twenty CRM
Custom Object (TrustAccount)
1:1LawPracticeZA trust accounts have no Twenty equivalent. We create a TrustAccount custom object in Twenty (available on Professional and Organization tiers, or self-hosted) with fields for account number, bank name, opening balance, and running balance. Trust transfers between clients are stored as TrustTransaction records linked to the TrustAccount and to the People record.
LawPracticeZA
Invoice
Twenty CRM
Note + Custom Object (Invoice)
1:1LawPracticeZA invoices are legal billing documents. Twenty has no invoice entity. We export invoice PDFs from LawPracticeZA, re-upload them as Files attached to the relevant Opportunity record in Twenty, and create an Invoice custom object capturing invoice number, date, amount, and status as read-only fields. The invoice PDF is linked as an attachment to the Invoice custom record.
LawPracticeZA
Time Entry / Fee Record
Twenty CRM
Note + Custom Object (FeeEntry)
1:1LawPracticeZA fee entries record billable time against matters. We export fee entries as a FeeEntry custom object in Twenty — capturing date, hours, rate, description, and linked Opportunity. The original fee entry text is preserved as a Note on the Opportunity. Fee entries are not recreated as billable records in Twenty since Twenty has no native billing engine.
LawPracticeZA
Document / File
Twenty CRM
File
1:1LawPracticeZA files attached to matters are downloaded and re-uploaded to Twenty's file storage, then linked to the corresponding Opportunity or People record. File names are preserved. Inline images embedded in documents are extracted and re-hosted as Twenty File attachments. The original document link URL from LawPracticeZA is stored in a custom text field on the Twenty record for traceability.
LawPracticeZA
Activity (Email, Call, Meeting)
Twenty CRM
Task + Event
1:1LawPracticeZA activity logs (recorded time entries, ad hoc notes) map to Twenty Tasks for calls and general activities, and to Twenty Events for meetings with a start/end time. The original timestamp, fee-earner owner, and linked matter are preserved as fields on the Twenty record. If LawPracticeZA stores email body text, it maps to a Note on the related People or Opportunity record.
LawPracticeZA
Branch / Department
Twenty CRM
Custom Field on People/Opportunity
1:1LawPracticeZA firms operating multiple branches store department assignments on staff and matters. Twenty has no native branch object — we create a Branch__c select field on People and Opportunity, populated from LawPracticeZA's department_id. Branch-level reporting is then achievable using Twenty's existing filter and grouping views on the custom field.
LawPracticeZA
Client Payment
Twenty CRM
Note on Opportunity
1:1LawPracticeZA records client payments against invoices. Twenty has no payment tracking entity. We export payment records as structured CSV and attach them as Notes on the related Opportunity, capturing payment date, amount, method, and reference number. Firms using dedicated accounting software (Xero, Sage) for payment tracking should continue that workflow post-migration — Twenty is not a legal accounting system.
| LawPracticeZA | Twenty CRM | Compatibility | |
|---|---|---|---|
| Client | People1:1 | Fully supported | |
| Client | Company1:many | Fully supported | |
| Matter | Opportunity1:1 | Fully supported | |
| Matter Stage / Phase | Opportunity Stage1:1 | Fully supported | |
| Fee Earner | WorkspaceMember1:1 | Fully supported | |
| Trust Account | Custom Object (TrustAccount)1:1 | Fully supported | |
| Invoice | Note + Custom Object (Invoice)1:1 | Fully supported | |
| Time Entry / Fee Record | Note + Custom Object (FeeEntry)1:1 | Fully supported | |
| Document / File | File1:1 | Fully supported | |
| Activity (Email, Call, Meeting) | Task + Event1:1 | Fully supported | |
| Branch / Department | Custom Field on People/Opportunity1:1 | Fully supported | |
| Client Payment | Note on Opportunity1: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
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Audit LawPracticeZA data and map to Twenty schema
FlitStack connects to LawPracticeZA using a bookkeeper-level API user (sufficient for all read and fee-posting operations) and exports a full data dump: all client records, matter records, fee-earner records, trust-account balances, trust transactions, invoice headers, and fee entries. We cross-reference this with the firm's stated record counts to confirm completeness. During this phase we also identify: clients with no email address, matters with no linked client, trust accounts with negative balances, and invoice records with missing line-item data. We produce a Data Assessment Report and a Field Mapping Document that names every source field and its Twenty destination — both standard and custom — before any data moves.
Configure Twenty workspace: custom objects, fields, and users
Before importing data, your Twenty admin (or our team) creates the schema the data will land into. We deliver a schema setup plan specifying: TrustAccount and TrustTransaction custom objects, custom fields on Opportunity (Matter_Reference__c, Matter_Status__c, Instruction_Date__c, Branch__c), a custom Invoice object with standard invoice fields, and a FeeEntry custom object. All Twenty workspace members who correspond to LawPracticeZA fee earners must be invited and have accepted their invitations before we attempt to resolve assigneeId on migrated Opportunities. We provide the exact email list to invite based on the fee-earner records extracted in Step 1.
Resolve owners and run ordered test import
Fee-earner email addresses from LawPracticeZA are matched to Twenty workspace member email addresses. Matched records set the Opportunity and FeeEntry assigneeId directly. Unmatched records are listed in a Pre-Migration Owner Report — your firm resolves these before the full migration runs. Once all owners are resolved, we run an ordered test import using a representative slice of data (typically 100–300 records covering clients, companies, matters, and a few trust transactions). The test import follows Twenty's required order: Companies first, then People with companyId populated, then Opportunities with peopleId and companyId populated, then custom objects last. We generate a field-level diff between the LawPracticeZA source values and the Twenty destination values so you can verify mapping accuracy before the full run commits.
Run full migration with delta-pickup window
The full data migration runs against your Twenty workspace. All client, company, matter, fee-entry, trust-account, and document records import in the correct dependency order. A delta-pickup window — typically 24 to 48 hours from the migration start time — captures any records created or modified in LawPracticeZA during the cutover period while your team continues working in the source system. FlitStack uses scoped read access on LawPracticeZA throughout this window; your team retains full read and write access to the source. At the end of the delta window, a final export captures in-flight changes and a reconciliation script compares record counts and key field values between source and destination. An audit log records every operation. One-click rollback reverts the Twenty workspace to its pre-migration state if reconciliation uncovers critical discrepancies.
Post-migration: document export and rebuild handoff
After migration, FlitStack delivers: (1) a migration summary report with record counts, any unmapped fields, and a list of custom-field values populated; (2) a JSON export of all field mappings for your records; (3) a CSV export of all LawPracticeZA invoice line-item detail for import into a dedicated billing tool if needed; (4) a rebuild reference for LawPracticeZA workflows — we document each automation rule's trigger, condition, and action so your Twenty admin can recreate equivalent logic in Twenty's workflow builder. Trust-accounting compliance logic (overdraft alerts, trust-to-business transfer approvals) is explicitly called out as a separate configuration project since it requires business-rule decisions, not just data migration.
Platform deep dives
LawPracticeZA
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 Twenty CRM.
Object compatibility
2 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 Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your LawPracticeZA to Twenty 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 Twenty 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.