CRM migration

Migrate from LegalServer to Twenty CRM

Field-level mapping, validation, and rollback between LegalServer and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.

LegalServer logo

LegalServer

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

93%

13 of 14

objects map 1:1 between LegalServer and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

LegalServer logo

LegalServer

What's pushing teams away

  • Users consistently describe the interface as visually outdated and clunky — reviewers on Capterra note heavy reliance on dropdown triangles, a dated calendar system, and a layout that does not feel like a modern program.
  • The contact creation workflow has a documented pitfall where using the wrong button to add contacts to a case creates a static contact record instead of a dynamic one, requiring manual cleanup and support intervention.
  • The v2 Core API caps results at 100 records per request with no cursor or offset pagination, which creates slow extraction cycles for organizations with large case histories and limits bulk migration efficiency.

Choosing

Twenty CRM logo

Twenty CRM

What's pulling them in

  • Top open-source CRM on GitHub with 40.6K stars, giving teams full source code access and infrastructure ownership without per-feature licensing surprises.
  • Free self-hosting under AGPL-3.0 means unlimited users and custom objects for the cost of cloud infrastructure alone, typically $20–100/month.
  • Pricing page explicitly mocks competitors for charging add-on fees for API access, webhooks, and workflows — transparency that resonates with RevOps teams burned by Salesforce.
  • Unlimited custom objects and fields with no price impact, letting teams shape the data model to their business rather than forcing business into rigid schemas.
  • Modern TypeScript/React/PostgreSQL stack means developer-led teams can extend, self-host, or integrate without fighting legacy architecture.

Object mapping

How LegalServer objects map to Twenty CRM

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

maps to

Twenty CRM

People

1:1
Fully supported

LegalServer 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

maps to

Twenty CRM

Company

1:1
Fully supported

LegalServer 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

maps to

Twenty CRM

Opportunity

1:1
Fully supported

LegalServer 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

maps to

Twenty CRM

Opportunity custom field

1:1
Fully supported

LegalServer'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

maps to

Twenty CRM

Custom Object: Grant

1:1
Fully supported

LegalServer 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

maps to

Twenty CRM

People + Custom Object: Contractor Panel

many:1
Fully supported

LegalServer 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

maps to

Twenty CRM

Task

1:1
Fully supported

LegalServer 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

maps to

Twenty CRM

Note

1:1
Fully supported

LegalServer 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

maps to

Twenty CRM

Note (with file reference)

1:1
Fully supported

LegalServer 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

maps to

Twenty CRM

Opportunity custom fields

1:1
Fully supported

LegalServer 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

maps to

Twenty CRM

Custom Object: Prescreen

1:1
Fully supported

LegalServer 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

maps to

Twenty CRM

Custom Object: Outreach Event

1:1
Mapping required

LegalServer 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

maps to

Twenty CRM

Custom fields on People + Grant object

1:1
Fully supported

LegalServer 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

maps to

Twenty CRM

Workspace Member

1:1
Fully supported

LegalServer 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.

Gotchas + challenges

What specifically takes care here

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 logo

LegalServer gotchas

High

Dynamic vs static contact record split

High

v2 API 100-record hard cap on all result sets

Medium

Custom fields on versioned subtables require exact path mapping

Medium

Grant billing types require pre-migration decision on deduction logic

Twenty CRM logo

Twenty CRM gotchas

High

Import order is enforced and critical

High

Export limited to 20,000 records and visible columns only

Medium

Soft-deleted records count toward uniqueness and trigger restores

Medium

API rate limits cap at 200 req/min on Organization tier

Low

No native email sequences — follow-up cadences require external tools

Pair-specific challenges

  • Grant billing types have no native Twenty equivalent

    LegalServer's Grant Management module tracks Flat Hourly Rate and Variable Hourly Rate billing types, deducting time slip costs from grant balances automatically. Twenty has no native grant management, billing type, or trust accounting module. We create a Grant custom object with available balance and billing type fields, but the automatic deduction logic that LegalServer performs on time slips must be rebuilt manually in Twenty's workflow builder or handled in a separate financial system. Organizations relying heavily on grant balance tracking should plan for additional configuration work after migration.

  • LegalServer custom case data fields require pre-migration setup in Twenty

    LegalServer sites store extensive site-specific custom fields under Case Data > Custom Matter (e.g., Court_Date__c, Judicial_Officer__c, Bond_Amount__c, Prior_Felony__c). Twenty does not have these fields by default. We must create each custom field in Twenty's Settings → Data Model before data loads, since the CSV import creates records only — it cannot create fields. The number of custom fields directly affects migration scope, and sites with 50+ custom case fields fall in the upper pricing tier. Your Twenty admin should review LegalServer's Admin > Custom Field Management export before migration begins.

  • Contractor panel relationships require a custom junction object

    LegalServer's Contractor module tracks panel attorneys assigned to cases with fee structures, subject matter expertise, and case-specific work orders. Twenty has no native contractor or panel management construct. Individual contractors become Twenty People records; organizational contractors become Companies. Case-to-contractor assignments — which LegalServer models as a linked entity — must be recreated in Twenty as a custom Contractor_Panel__c junction object linking the Opportunity (case) to the People (contractor) with fields for fee_structure and panel_status. This is a non-trivial schema extension that should be designed before migration.

  • LegalServer workflows and dynamic processes cannot be exported

    LegalServer's dynamic processes, rule-based logic trees, and intake form configurations are stored as platform-specific process definitions that are not accessible via the LegalServer API. They do not have an export format and cannot be transferred to Twenty's workflow builder or any other platform. Any automated intake routing, eligibility logic, or case assignment workflows configured in LegalServer must be redesigned from scratch in Twenty's workflow builder. We can provide a structured reference document listing each LegalServer workflow's trigger conditions and actions to support the rebuild effort.

  • LegalServer API rate limit of 100 results per request affects export sequencing

    LegalServer Core API v2 caps results at 100 records per request to prevent timeouts and standardize server load. For migrations involving thousands of case records, this means multiple paginated API calls per object type. We handle pagination automatically, but the LegalServer export phase takes longer on sites with large record volumes. Twenty's import API accepts up to 20,000 records per export but requires users to have the Import CSV permission. Both rate limits are factored into our timeline estimates before migration begins.

Migration approach

Six steps for a successful LegalServer to Twenty CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

Context on both ends of the pair

LegalServer logo

LegalServer

Source

Strengths

  • Built-in grant management tools with billing type deduction logic for funder compliance reporting
  • Highly configurable dynamic processes, forms, and profiles without requiring technical skills
  • Online client intake and prescreen forms with rules-based triage and poverty level assessment
  • Active community support via site administrator listserv and free weekly trainings
  • No licensing fees or third-party app dependencies — fully hosted SaaS model

Weaknesses

  • Interface described as visually outdated with a clunky dropdown-heavy navigation pattern
  • v2 API caps all multi-record results at 100 with no cursor pagination, slowing bulk extraction
  • Dynamic Contact records require a two-step add-to-case workflow that creates friction for intake staff
  • Document templates must be manually recreated on each environment transition (demo to live)
  • No public pricing page — subscription tiers and per-user costs are opaque without a sales conversation
Twenty CRM logo

Twenty CRM

Destination

Strengths

  • AGPL-3.0 open-source license with full source code on GitHub — no vendor lock-in, no sunset risk.
  • Unlimited users and unlimited custom objects on self-hosted, with no feature gating based on headcount.
  • REST and GraphQL APIs available on all paid tiers, not locked behind an enterprise add-on fee.
  • MCP server and webhooks shipped as standard features, not premium upgrades.
  • Modern PostgreSQL-backed data model that developer teams can query, extend, and self-host.

Weaknesses

  • Recent v1.0 release means limited production hardening compared to CRMs with multi-year operational track records.
  • No native email sequencing or sales engagement tools — follow-up cadences require a separate platform.
  • No native two-way email sync or inbox integration, requiring third-party connectors for full activity logging.
  • Self-hosting 'free' pricing hides real infrastructure and DevOps costs that stack up over time.
  • Workflow automation is functional but lacks the complexity needed for sophisticated multi-step sales motions.

Complexity grading

How hard is this migration?

Standard CRM migration. 3 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across LegalServer and Twenty CRM.

  • Object compatibility

    B

    3 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    LegalServer: Not publicly documented; v2 APIs enforce a 100-result hard cap per request regardless of page size.

  • Data volume sensitivity

    B

    LegalServer doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your LegalServer to Twenty CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about LegalServer to Twenty CRM data migrations

Answers to the questions buyers ask most during LegalServer to Twenty CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most LegalServer-to-Twenty migrations complete in 48–72 hours for sites with fewer than 10,000 total records across contacts, organizations, and cases. Sites with active custom modules (Grant Management, Contractor, Immigration Forms) or more than 10,000 records extend to 7–14 days. The longest planning step is creating Twenty custom objects and fields — we handle this before migration runs, but the scope definition phase can take 3–5 days depending on how many LegalServer custom fields your site uses.

Adjacent paths

Related migrations to explore

Ready when you are

Move from LegalServer.
Land in Twenty CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day