CRM migration
Field-level mapping, validation, and rollback between LawPracticeZA and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
LawPracticeZA
Source
Freshsales
Destination
Compatibility
11 of 12
objects map 1:1 between LawPracticeZA and Freshsales.
Complexity
BStandard
Timeline
5–10 business days
Overview
LawPracticeZA is a web-based matter-management and billing platform with integrated trust accounting, designed for law firms operating in South Africa and Botswana. Its data model centres on clients, matters, fee earners, time entries, invoices, and trust-account transfers. Freshsales CRM uses a standard sales-force-automation model with Leads, Contacts, Accounts, Deals, Products, Tasks, and Notes — it has no native concept of legal matters, trust accounting, or time-entry structures. We export LawPracticeZA data via its REST API (authenticated as a bookkeeper-level API user) and load it into Freshsales via its CRM API. The migration carries client records as Freshsales Contacts, matters as Accounts with custom fields (Matter_Number__c, Practice_Area__c, Status__c), and fee earners as Freshsales Users. Trust-account balances and invoice histories are preserved as Products with custom fields and line items in Freshsales Products. Time entries migrate as Tasks linked to the relevant contact or account. What does not migrate: LawPracticeZA workflows, automation rules, and trust-account reconciliation logic must be rebuilt in Freshsales Workflows. Invoice templates and trust-transfer rules are destination-side configuration. We deliver a rebuild reference document for every automation and billing rule so your Freshsales admin can reconstruct the logic.
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 Freshsales, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
LawPracticeZA
Client
Freshsales
Contact
1:1LawPracticeZA clients map 1:1 to Freshsales Contacts. The client's full name splits into First Name and Last Name; physical address, email, and phone migrate directly. Client records without an email address receive a placeholder email flagged for admin review before go-live.
LawPracticeZA
Matter
Freshsales
Account
1:1LawPracticeZA matters have no direct Freshsales equivalent — Accounts serve as the closest container. Matter_Number__c, Practice_Area__c, Matter_Status__c, and Open_Date__c become custom fields on the Account. The matter's primary client becomes the Account's primary Contact link. Closed matters archive to a separate 'Archived Matters' Account for historical reporting.
LawPracticeZA
Matter
Freshsales
Deal
many:1When a matter has a billed or unbilled monetary value, we create a Freshsales Deal linked to the Account. Matter fee totals and disbursement values roll into the Deal Amount. Multiple billable matters under one client merge into a single Deal per pipeline stage to avoid record inflation in Freshsales.
LawPracticeZA
Fee Earner
Freshsales
User
1:1LawPracticeZA fee earners map to Freshsales Users. The API returns the fee earner's name, email, department, and hourly rate. We resolve by email match against Freshsales users; unmatched fee earners are flagged for Freshsales admin to invite or assign to a fallback user before the migration runs.
LawPracticeZA
Fee Entry (Time)
Freshsales
Task
1:1Billable time recorded against a matter in LawPracticeZA migrates as Freshsales Tasks. The Task Subject carries the matter reference and work description; the date fields preserve the original entry date. Duration converts to Task Reminder_Datetime__c custom field. Fee entries are not billing transactions — they are activity history preserved for reference.
LawPracticeZA
Invoice
Freshsales
Product
1:1LawPracticeZA invoices do not have a direct equivalent in Freshsales. We create a Product record per invoice — Invoice_Number__c, Invoice_Date__c, Total_Amount__c, VAT_Amount__c, and Status__c (Paid/Unpaid/Overdue) store the financial summary. Line items are not individually migrated; the total and tax amounts preserve the invoice value for reporting.
LawPracticeZA
Trust Account
Freshsales
Product (custom)
1:1Trust-account balances, receipts, and transfers have no Freshsales equivalent. We create a custom Product object called 'Trust Account' with fields for Trust_Account_Number__c, Client_Name__c, Current_Balance__c, and Last_Reconcile_Date__c. The trust-reconciliation workflow must be rebuilt as a Freshsales Workflow post-migration. Each client trust account is linked to the corresponding Freshsales Contact record for traceability and reporting purposes.
LawPracticeZA
Disbursement
Freshsales
Product Line Item
1:1LawPracticeZA disbursements (out-of-pocket expenses incurred on behalf of a client) map to Freshsales Product records linked to the relevant Account or Deal. Disbursement_Type__c, Amount__c, and Date__c store the expense record. Multiple disbursements per matter are grouped under a parent Product.
LawPracticeZA
Document / Attachment
Freshsales
File
1:1Documents attached to LawPracticeZA matters or clients are downloaded and re-uploaded to Freshsales Files, associated with the corresponding Contact or Account record. File size limits of Freshsales apply (25MB per file). Inline images in notes are extracted and re-hosted as standalone Files.
LawPracticeZA
Note / Communication Log
Freshsales
Note
1:1LawPracticeZA communication logs and matter notes migrate as Freshsales Notes. The original timestamp, author (resolved to Freshsales User by email), and linked client or matter (mapped to Contact or Account) are preserved. Rich-text formatting in LawPracticeZA notes is flattened to plain text during migration.
LawPracticeZA
Custom Field (Matter)
Freshsales
Custom Field (Account)
1:1LawPracticeZA allows firms to add custom fields to matters (e.g., Case_Manager__c, Court_Venue__c, Outcome__c). We create matching custom fields on the Freshsales Account object — appending __c in field naming — before data loads. Custom field type mapping: text to text, picklist to picklist, date to datetime.
LawPracticeZA
Custom Field (Client)
Freshsales
Custom Field (Contact)
1:1Client-level custom fields in LawPracticeZA (e.g., Client_Type__c, Referral_Source__c, Billing_Method__c) migrate as Freshsales Contact custom fields. We pre-create the fields in Freshsales admin before the migration batch runs. Type-aware mapping preserves pick-list values, numeric precision, and date formats. Any dependent pick-list configurations or conditional field logic from LawPracticeZA will be documented for manual recreation in Freshsales.
| LawPracticeZA | Freshsales | Compatibility | |
|---|---|---|---|
| Client | Contact1:1 | Fully supported | |
| Matter | Account1:1 | Fully supported | |
| Matter | Dealmany:1 | Fully supported | |
| Fee Earner | User1:1 | Fully supported | |
| Fee Entry (Time) | Task1:1 | Fully supported | |
| Invoice | Product1:1 | Fully supported | |
| Trust Account | Product (custom)1:1 | Fully supported | |
| Disbursement | Product Line Item1:1 | Fully supported | |
| Document / Attachment | File1:1 | Fully supported | |
| Note / Communication Log | Note1:1 | Fully supported | |
| Custom Field (Matter) | Custom Field (Account)1:1 | Fully supported | |
| Custom Field (Client) | Custom Field (Contact)1: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
Freshsales gotchas
Freddy AI is Pro-tier only despite heavy marketing
Post-migration emails and sequences are disabled
Bot session credits are a one-time 500-session allocation
Phone credits charged per minute with no cap
File storage limits scale with plan tier
Pair-specific challenges
Migration approach
Audit LawPracticeZA API access and export all entity types
We authenticate against the LawPracticeZA REST API using a dedicated bookkeeper-level API user (created per the API Guide at lawpracticeza.com/docs/api_guide.html). We enumerate all entity types available via API — clients, matters, fee earners, fee entries, invoices, disbursements, trust accounts, and attachments — and export them in full. Each entity type is paginated separately and written to a staging environment with an MD5 hash per record for change-detection in the delta-run phase. We also capture the full custom-field schema for matters and clients at this stage so the custom-field manifest is complete before Freshsales schema setup begins.
Create Freshsales custom fields, users, and territory structure
We deliver a custom-field manifest listing every LawPracticeZA field that has no direct Freshsales equivalent — Matter_Number__c, Practice_Area__c, Trust_Account_Number__c, Client_ID_Number__c, and so on — with data type, pick-list values, and the target Freshsales object. Your Freshsales admin creates these fields in the Admin > Custom Fields section before data loads. We also map fee-earner email addresses to Freshsales User invitations, creating Freshsales users and assigning them to the correct Department and Role. Territory assignments based on LawPracticeZA department codes are configured in Freshsales Admin > Territories.
Resolve foreign-key relationships and de-duplicate matter-to-account mappings
The LawPracticeZA data export produces entity-level CSV files — clients, matters, fee earners, invoices — but no foreign-key cross-references. We build a relationship map: matter.primary_client_id → client.id, matter.fee_earner_id → fee_earner.id, fee_entry.matter_id → matter.id. This map is applied during the Freshsales load to ensure Contacts link to the correct Accounts, Tasks link to the correct Account, and Products link to the correct Contact or Account. For clients with multiple active matters, we create one Contact and one Account per matter to avoid collapsing multiple matters into a single account and losing matter-level custom field data.
Run a sample migration with field-level diff against Freshsales sandbox
A representative slice — typically 100–500 records spanning clients, matters, fee entries, invoices, and trust accounts — migrates first into your Freshsales sandbox environment. We generate a field-level diff report comparing source LawPracticeZA values against destination Freshsales field values for every migrated record. You verify that matter numbers, trust balances, practice areas, and invoice statuses landed correctly before the full run commits. The diff also surfaces any Freshsales custom field that was missed during schema setup or any value that failed pick-list validation.
Execute full migration and delta-pickup with audit log and rollback
The full migration runs against your live Freshsales environment. A delta-pickup window (24–48 hours) captures any records created or modified in LawPracticeZA during the cutover period — new clients opened, invoices raised, matter status changes. Every operation is written to an audit log (record count, timestamp, source record ID, destination record ID, field mappings applied). If reconciliation fails — a field mapping error, a custom field that wasn't created, a Freshsales user who couldn't be matched — a one-click rollback reverts all migrated records so the team can re-run once the issue is resolved.
Platform deep dives
LawPracticeZA
Source
Strengths
Weaknesses
Freshsales
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 Freshsales.
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 Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your LawPracticeZA to Freshsales 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 Freshsales
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.