CRM migration
Field-level mapping, validation, and rollback between LegalServer and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
LegalServer
Source
Twenty CRM
Destination
Compatibility
13 of 14
objects map 1:1 between LegalServer and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
LegalServer is a purpose-built case management platform for civil legal aid, public defenders, and city/county law departments — it organizes work around Cases (Matters), Contacts, Organizations, and 25+ configurable modules including Grant Management, Timekeeping, Contractor Management, and Immigration Forms. Its data model is oriented around legal workflows: attorney assignment, case status by service type, financial eligibility (poverty percentage), and grant-funded billing types. Twenty CRM is an open-source modern CRM built on TypeScript, NestJS, React, and PostgreSQL, offering standard objects for People, Companies, Opportunities, Tasks, and Notes, plus unlimited custom objects. It ships REST and GraphQL APIs with webhooks on all tiers including self-hosted, which directly addresses LegalServer's premium-API limitation. The migration carries all standard LegalServer records (contacts, organizations, cases, timekeeping, tasks, notes) into Twenty's object model. Cases (Matters) become Opportunities in Twenty — case type, service area, billing type, and fund availability are preserved as custom fields. Cases with specialized LegalServer modules (e.g., contractor panels, grant balances) require a custom object in Twenty, which our team creates before migration runs. LegalServer's workflows, intake forms, document templates, and grant-billing logic do not migrate — they must be rebuilt in Twenty's workflow builder or configured manually. We use scoped read access on LegalServer's Core API (UUID-based, paginated at 100 records per request) for export, then import via Twenty's CSV import and REST API.
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 LegalServer 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.
LegalServer
Contact
Twenty CRM
People
1:1LegalServer Contact records map 1:1 to Twenty People. Names, emails, phone numbers, addresses, and contact type (Individual/Organization) transfer directly. The Person record must be created before linking to an Organization/Company record. During migration, each Contact's unique LegalServer identifier is preserved as a custom field for audit trails and future integrations. Duplicate detection runs automatically using email matching to prevent redundant People records in Twenty's workspace.
LegalServer
Organization
Twenty CRM
Company
1:1LegalServer Organization records map to Twenty Companies. Organization name, type, address, and domain fields transfer as Company.Name, Company.type, Company.address fields. Parent/child organization hierarchies use Twenty's CompanyRelations object. Each Organization's LegalServer ID is stored in a custom field for reference and data reconciliation. Organization hierarchies with multiple levels are flattened and linked via CompanyRelations records to maintain the relationship structure in Twenty.
LegalServer
Case / Matter
Twenty CRM
Opportunity
1:1LegalServer Case (Matter) records become Twenty Opportunities. The case number maps to a custom Opportunity field (LegalServer_Case_Number__c), case name becomes Opportunity.Name, and case status values are mapped to Twenty pipeline stage values. Case type, service area, and billing type migrate as custom select fields on the Opportunity.
LegalServer
Case Service Area / Area of Law
Twenty CRM
Opportunity custom field
1:1LegalServer's service area pick-list values (Immigration, Housing, Family Law, etc.) have no native equivalent in Twenty. We create a custom select field (Service_Area__c) on Opportunity and map each LegalServer value to the matching Twenty option. This field drives pipeline filtering in Twenty.
LegalServer
Grant Management
Twenty CRM
Custom Object: Grant
1:1LegalServer Grant Management tracks funding sources, available balance, and billing type (Flat Hourly Rate, Variable Hourly Rate). These have no native Twenty equivalent. We create a Grant custom object with fields for Grant_Name__c, Available_Balance__c, Billing_Type__c, and a link to the Opportunity representing the associated case.
LegalServer
Contractor Module
Twenty CRM
People + Custom Object: Contractor Panel
many:1LegalServer Contractor records (managed assigned counsel, panel attorneys) include organization/individual type, subject matter expertise, languages, and fee structures. Individual contractors map to Twenty People; organizational contractors map to Companies. Fee structures and case assignment links require a custom Contractor_Panel__c junction object.
LegalServer
Timekeeping
Twenty CRM
Task
1:1LegalServer Time Slips (staff time recorded against a case) become Twenty Tasks with Type='Billable'. Each Task links to the Opportunity representing the case and carries the staff member as the Task assignee. Hours, date, and billing description are stored as custom fields on the Task.
LegalServer
Communication Log
Twenty CRM
Note
1:1LegalServer Communication Logs on a case (emails, phone calls, letters) become Twenty Notes attached to the corresponding Opportunity. Original timestamp, communicating party, and log text are preserved in the Note body. Each Note links to the Opportunity representing the case.
LegalServer
Document / File Attachment
Twenty CRM
Note (with file reference)
1:1LegalServer documents attached to cases ( briefs, correspondence, court filings) are downloaded and re-uploaded as Notes with file attachments in Twenty. We preserve the original document name and upload date. File size limits per Twenty's storage configuration apply — large batches are split across import runs.
LegalServer
Custom Case Data Fields
Twenty CRM
Opportunity custom fields
1:1LegalServer site-specific custom fields on cases (e.g., Court_Date__c, Judicial_Officer__c, Referral_Source__c) are created as custom fields on the Opportunity object before migration. All custom field definitions are extracted from LegalServer's Admin > Custom Field Management and mapped field-by-field to Twenty's Settings → Data Model.
LegalServer
Prescreen / Intake
Twenty CRM
Custom Object: Prescreen
1:1LegalServer prescreen records (intake eligibility screening) do not map to any standard Twenty object. We create a Prescreen custom object capturing eligibility fields, income data, and screening outcome, linked to the resulting Case/Opportunity. Poverty percentage migrates as a custom number field.
LegalServer
Outreach
Twenty CRM
Custom Object: Outreach Event
1:1LegalServer Outreach records (community outreach events, clinic sign-ups) become a custom Outreach_Event__c object in Twenty with event date, outreach type, location, and attendees as custom fields. Attendance records link to People. Each outreach event preserves its original LegalServer ID and creation timestamp for audit purposes. The outreach type field uses a picklist that mirrors LegalServer's values, ensuring consistency in reporting and filtering across the workspace.
LegalServer
Financial Information
Twenty CRM
Custom fields on People + Grant object
1:1LegalServer Financial Information records (poverty percentage, income data) used for eligibility migrate as custom fields on the People record (Poverty_Percentage__c, Income_Level__c). These drive case acceptance decisions and grant eligibility tracking. Each Financial Information record's original LegalServer ID is preserved for reconciliation. The poverty percentage field uses number formatting matching LegalServer's precision, and income data is stored as currency values to maintain accuracy in financial reporting.
LegalServer
User / Staff Profile
Twenty CRM
Workspace Member
1:1LegalServer staff users map to Twenty Workspace Members. Owner resolution happens by email match — if a LegalServer staff email matches a Twenty workspace member email, records are assigned to that user. Unmatched owners are flagged for manual assignment before migration commits.
| LegalServer | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | People1:1 | Fully supported | |
| Organization | Company1:1 | Fully supported | |
| Case / Matter | Opportunity1:1 | Fully supported | |
| Case Service Area / Area of Law | Opportunity custom field1:1 | Fully supported | |
| Grant Management | Custom Object: Grant1:1 | Fully supported | |
| Contractor Module | People + Custom Object: Contractor Panelmany:1 | Fully supported | |
| Timekeeping | Task1:1 | Fully supported | |
| Communication Log | Note1:1 | Fully supported | |
| Document / File Attachment | Note (with file reference)1:1 | Fully supported | |
| Custom Case Data Fields | Opportunity custom fields1:1 | Fully supported | |
| Prescreen / Intake | Custom Object: Prescreen1:1 | Fully supported | |
| Outreach | Custom Object: Outreach Event1:1 | Mapping required | |
| Financial Information | Custom fields on People + Grant object1:1 | Fully supported | |
| User / Staff Profile | Workspace Member1: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.
LegalServer gotchas
Dynamic vs static contact record split
v2 API 100-record hard cap on all result sets
Custom fields on versioned subtables require exact path mapping
Grant billing types require pre-migration decision on deduction logic
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 LegalServer data model and extract custom field definitions
We connect to your LegalServer site via the Core API using scoped read access. We extract all object schemas — Contacts, Organizations, Cases, Timekeeping, Communication Logs, and any active custom modules (Outreach, Prescreen, Contractor). We also pull the full list of custom field definitions from Admin > Custom Field Management so we know exactly which fields need Twenty custom field creation. This audit produces the field mapping document that governs the entire migration.
Create Twenty workspace schema before data arrives
Before any data moves, we create all required custom fields and custom objects in your Twenty workspace based on the mapping document. This includes the Grant custom object, Contractor_Panel__c junction object, Service_Area__c and Billing_Type__c select fields on Opportunity, and any site-specific case data fields. Twenty requires fields to exist before import — we handle this setup so the CSV import step runs without schema errors. We also invite all LegalServer staff to Twenty as Workspace Members at this stage.
Match LegalServer staff to Twenty Workspace Members by email
We resolve LegalServer owner and attorney assignments against Twenty Workspace Members by email. Any LegalServer staff record with an email that matches a Twenty user gets assigned to that user in the migrated records. Staff without a Twenty account are flagged with a fallback owner assignment — your team can either invite them to Twenty first or reassign records manually after migration. No record lands in Twenty without an assigned owner.
Run sample migration with field-level diff before full commit
A representative slice of 100–500 records migrates first — spanning contacts, organizations, cases, and timekeeping entries across multiple service areas. We generate a field-level diff comparing source values in LegalServer against migrated values in Twenty so you can verify that case numbers, service areas, billing types, and attorney assignments are correct. You approve the sample before we commit the full run. This is the checkpoint where data-model issues surface before they affect your entire dataset.
Execute full migration with delta-pickup and audit log
The full dataset migrates using LegalServer's Core API export (paginated at 100 records per request) and Twenty's CSV import plus API upserts. A delta-pickup window of 24–48 hours captures any records created or modified in LegalServer during the cutover window. Every operation is logged to an audit trail, and one-click rollback is available if reconciliation fails. After go-live, we verify record counts against LegalServer's export totals and surface any records that failed validation with reasons.
Platform deep dives
LegalServer
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 3 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 LegalServer and Twenty CRM.
Object compatibility
3 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
LegalServer: Not publicly documented; v2 APIs enforce a 100-result hard cap per request regardless of page size.
Data volume sensitivity
LegalServer 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 LegalServer to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your LegalServer 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 LegalServer
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.