CRM migration

Migrate from Aderant Milana to Twenty CRM

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

Aderant Milana logo

Aderant Milana

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between Aderant Milana and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Aderant Milana is a legal-industry docketing and calendar management platform built around matters, clients, court rules libraries, and deadline-tracking workflows. It stores contacts and companies in a matter-centric schema where every record is anchored to a legal matter and attorney assignments drive ownership. Twenty CRM is an open-source CRM built on PostgreSQL with a generic object model: People, Companies, Opportunities, Notes, and Tasks as standard objects, plus fully customizable custom objects and fields. The migration from Milana to Twenty is a domain-shift: it transforms a practice-management system into a sales-and-relationship CRM. We map Milana's Client records to Twenty Companies, Milana's Contact records to Twenty People, and Milana's Matters to Twenty Opportunities — reparenting each matter under its associated client in Twenty's object graph. Calendar events and deadline records migrate as Tasks with original due dates and assigned users preserved. Milana's custom fields and UDF-style properties become Twenty custom fields, created in the data model before CSV import. We do not migrate Milana's court rules, automated docketing workflows, or matter-specific legal configurations — those require manual rebuild in Twenty's workflow engine. The migration mechanism uses Milana's API and export utilities to extract records, FlitStack's ETL layer to transform and map, and Twenty's CSV import endpoint (with API fallback for large datasets) to land data. A delta-pickup window captures any changes made in Milana during the cutover window.

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

Aderant Milana logo

Aderant Milana

What's pushing teams away

  • The user interface is consistently described as unintuitive and difficult to navigate, creating a steep learning curve for attorneys and docketing staff.
  • Enterprise pricing with no public tier structure makes budget forecasting difficult and locks smaller practices out of the platform.
  • Customizations and integrations built in the on-premise CompuLaw era do not transfer cleanly to Milana's cloud environment, requiring costly reconfiguration.
  • Complex data transfer costs between legal tech integrations catch firms unprepared, adding unanticipated expenses during system migrations.
  • Support responsiveness and case resolution times frustrate users managing high-stakes deadline calendars with limited IT resources.

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 Aderant Milana objects map to Twenty CRM

Each row shows how a Aderant Milana 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.

Aderant Milana

Client

maps to

Twenty CRM

Company

1:1
Fully supported

Milana Client records map directly to Twenty Companies. Client name maps to Company.name, primary address maps to the company's address fields, and industry can be set as a custom select. Multi-office clients create one Company record with address as the primary; branch offices can be tracked via a custom field.

Aderant Milana

Contact

maps to

Twenty CRM

Person

1:1
Fully supported

Milana Contact records (attorneys, paralegals, opposing counsel, client representatives) map to Twenty People. Each person is linked to their associated Company via companyId. Role or relationship to a matter is preserved as a custom select field on the Person record.

Aderant Milana

Matter

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Milana Matter is the core record but Milana's matter model includes billable hours, court info, and legal status fields that don't exist in Twenty's Opportunity. We map Matter.name to Opportunity.name, Matter.client to the related Company, Matter.status to a custom Opportunity status field, and billable amounts to Opportunity.amount. Legal-specific fields (court, judge, opposing counsel) become custom fields on the Opportunity.

Aderant Milana

Matter Deadline / Calendar Event

maps to

Twenty CRM

Task

1:1
Fully supported

Milana deadline events and calendar entries map to Twenty Tasks. The task title captures the deadline description, dueDate maps to Task.dueDate, and the assigned user is resolved by email match against Twenty Workspace Members. Calendar type (court hearing, filing deadline, client meeting) becomes a Task.customField.

Aderant Milana

Document / File

maps to

Twenty CRM

Note

1:1
Fully supported

Milana document records and file attachments associated with matters become Twenty Notes. The Note body captures document metadata (title, date, type) and a link to the re-uploaded file. We re-upload files to the attachment storage linked from the Note record.

Aderant Milana

Attorney / User

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

Milana attorney and user records map to Twenty Workspace Members by email resolution. The Milana user email must match an invited Twenty workspace member to resolve correctly. Attorney role classifications such as partner, associate, paralegal, or contract attorney are preserved as a custom text field on the Workspace Member record for permissions and assignment context across matters and opportunities.

Aderant Milana

Bill / Invoice

maps to

Twenty CRM

Custom Object: Invoice

1:1
Fully supported

Milana's bill and invoice records have no direct Twenty CRM equivalent. We create a custom Invoice object in Twenty with fields: invoice number, amount, date, status, and a lookup to the related Opportunity (matter). Invoice line items become a second custom object linked to Invoice.

Aderant Milana

Time Entry

maps to

Twenty CRM

Custom Object: TimeEntry

1:1
Fully supported

Milana time entries track billable hours per matter and attorney. We create a custom TimeEntry object with fields: hours, date, attorney (lookup to WorkspaceMember), matter (lookup to Opportunity), description, and billing status. TimeEntry links to both the attorney and the matter Opportunity.

Aderant Milana

Custom Field / UDF

maps to

Twenty CRM

Custom Field

1:1
Fully supported

Milana user-defined fields on any object map to Twenty custom fields on the corresponding object. Before import, FlitStack creates all custom fields in Twenty's data model so the CSV import can populate them. Field types are mapped: Milana text → Twenty text, Milana date → Twenty date, Milana picklist → Twenty select.

Aderant Milana

Court Rules Library

maps to

Twenty CRM

No Equivalent

1:1
Fully supported

Milana's court rules library is a legal-domain knowledge base with no CRM equivalent. We do not migrate it. Firms must use Milana or a dedicated legal rules provider for court rule lookups post-migration. The rules data can be exported as a reference document.

Aderant Milana

Docketing Workflow / Automation

maps to

Twenty CRM

No Equivalent

1:1
Fully supported

Milana's automated docketing rules (trigger-based calendar event creation from court rules) have no direct Twenty CRM equivalent. Twenty's workflow builder handles CRM-level automation but not court-rule-driven event generation. We export Milana workflow definitions as a rebuild reference for the firm's legal operations team.

Aderant Milana

Insurance / Trust Account

maps to

Twenty CRM

No Equivalent

1:1
Fully supported

Milana tracks client trust account balances and insurance requirements as part of matter records. These are financial/accounting constructs outside Twenty CRM's scope. We preserve them as custom fields on the Company or Opportunity for reference only; the accounting logic must live in a dedicated legal accounting system.

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.

Aderant Milana logo

Aderant Milana gotchas

High

CompuLaw legacy data requires pre-migration transformation

Medium

Court rules jurisdiction mapping must be validated per-matter

Medium

Document repositories require path remapping

Low

User and calendar ownership requires explicit re-assignment

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

  • Matter-to-Opportunity reparenting requires a strict import order

    Twenty's CSV import requires that the 'one' side of any relationship exists before the 'many' side can reference it. Milana matters reference clients, and Milana time entries and deadlines reference matters. If Companies are not imported first, then People, then Opportunities (matters), then Tasks and TimeEntries, every reference by companyId, companyId on Person, and opportunityId on Task will fail and produce orphaned records. FlitStack sequences the migration: Companies → People → Opportunities (Matters) → Tasks → TimeEntries → Invoices. Import order violations produce silent failures in the Twenty CSV importer that only surface as blank relationship fields in the UI.

  • Milana's matter-centric schema must be deliberately flattened for Twenty

    Milana stores contacts and activities in a matter-anchored way — a contact may have multiple matter associations, and an activity (call, email, note) is logged per matter. Twenty stores activities on the Person or Company record directly. Migrating Milana's matter-logged activities requires a decision: keep them linked to the Opportunity (Matter) as Tasks, or surface them on the Person record as Notes. We surface them on both by creating a Task linked to the Opportunity and a Note on the Person — this preserves the full activity trail without losing the matter context that the Milana schema encoded.

  • Twenty custom fields must be created before CSV import — they are not auto-created

    Twenty's CSV import creates records but not fields. If a migration plan includes 40 custom fields (court name, judge, matter type, insurance status, etc.), all 40 must be created in Twenty's data model (Settings → Data Model) before the CSV is uploaded. FlitStack delivers a custom field creation script as part of the migration plan. Failure to pre-create fields results in the import silently ignoring unmapped columns — the data exists in the CSV but never appears in Twenty because there is no target field to receive it.

  • Milana's court rules and docketing automations have no Twenty equivalent and must be rebuilt

    Milana's core value proposition — automated calendar event generation from court rules — is not a CRM feature. Twenty's workflow builder can create Tasks when certain conditions are met (e.g., when an Opportunity stage changes to 'Court Date Scheduled'), but it has no court rules engine. Firms must document their Milana docketing rule logic and rebuild it in Twenty using workflows or an external legal rules integration. FlitStack exports Milana workflow definitions as a reference document, but the rebuild is a manual legal-operations task.

  • Twenty's per-export record limit of 20,000 affects large Milana datasets

    Twenty's CSV export utility returns up to 20,000 records per export operation. Milana deployments for large firms commonly exceed this in a single object class (matters, time entries, contacts). FlitStack handles this by splitting large exports into paginated batches using Milana's API cursor-based pagination, then reassembling the batches into Twenty-compatible CSV chunks. Firms with more than 20,000 time entries or 20,000 contacts need to plan for multi-batch export coordination that adds to migration timeline.

Migration approach

Six steps for a successful Aderant Milana to Twenty CRM data migration

  1. Extract Milana data via API and export utilities

    FlitStack connects to Milana using the Aderant API (authenticated via enterprise credentials) and Milana's built-in export utilities to pull all standard objects: Clients, Contacts, Matters, Time Entries, Invoices, Calendar Events, and Deadline records. User-defined field schemas are captured separately so the full field inventory is known before mapping begins. Milana's export is scoped read-only — your team continues working in Milana throughout. The extraction produces a structured data dump organized by object with foreign key references intact.

  2. Design Twenty data model and pre-create custom fields

    Before any data lands in Twenty, FlitStack delivers a data model design document that maps every Milana object and field to its Twenty equivalent. All custom fields (court, judge, matter type, billing status, etc.) are specified with field type and select options. Your Twenty admin (or our team) creates these fields in Settings → Data Model. This step is critical — Twenty's CSV import will silently ignore any column that has no corresponding field. The custom field creation must be complete before the import CSV files are generated.

  3. Map and transform data; generate migration CSV files

    FlitStack's ETL layer transforms Milana records into Twenty CSV format, applying all object and field mappings. Matter records are reparented under their associated Client/Company. Contact records are linked to Companies via companyId. Milana attorneys are resolved by email against Twenty Workspace Members. User-defined field values are translated to Twenty select options. Milana's matter-specific custom fields are mapped to the corresponding custom fields created in Step 2. The ETL layer also de-duplicates records using email and matter number as unique keys.

  4. Run sample migration with field-level diff

    A representative slice (typically 200–500 records spanning Companies, People, Opportunities, Tasks, and custom objects) is imported first. FlitStack generates a field-level diff comparing source Milana values against the imported Twenty values for every mapped field. You verify that matter status, assigned attorney, due dates, and custom fields all landed correctly. Any mapping errors are corrected in the ETL layer before the full migration run is triggered. This sample step prevents full-run surprises and gives your team confidence in the mapping logic.

  5. Execute full migration with delta-pickup window

    The full migration runs against Twenty using the corrected ETL pipeline. A delta-pickup window (typically 24–48 hours) runs concurrently, capturing any records created or modified in Milana during the cutover. FlitStack's audit log records every record created, updated, or skipped. If reconciliation reveals discrepancies, a one-click rollback reverts the Twenty workspace to its pre-migration state. After rollback verification, the full migration re-runs with the delta records included. Your team transitions to Twenty at go-live; Milana access is retained in read-only mode for a 30-day reference window.

Platform deep dives

Context on both ends of the pair

Aderant Milana logo

Aderant Milana

Source

Strengths

  • Industry-leading court rules library covering U.S. federal and state jurisdictions with automated rule updates.
  • Cloud-hosted docketing eliminates on-premise infrastructure and provides near-five-nines uptime.
  • Integration path with Aderant Expert Financials for unified financial and practice management.
  • E-filing connectivity through American LegalNet for direct court submission workflows.
  • Rules-driven event generation reduces manual calendar entry errors across large practice groups.

Weaknesses

  • Interface design lags behind modern SaaS standards, with a steep onboarding curve for new users.
  • Pricing is opaque enterprise-only with no public tier or per-seat model, complicating procurement for mid-size firms.
  • Legacy CompuLaw customizations require significant re-engineering to function in Milana's cloud environment.
  • Limited third-party integration ecosystem compared to modern legal practice management platforms.
  • Mobile access and offline capability are restricted, creating friction for attorneys working outside the office.
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. 1 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 Aderant Milana and Twenty CRM.

  • Object compatibility

    B

    1 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

    Aderant Milana: Not publicly documented — Aderant's API Terms reserve the right to enforce usage limits at their discretion, with no published numeric thresholds. Confirmed during vendor scoping..

  • Data volume sensitivity

    B

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

Estimator

Estimate your Aderant Milana 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 Aderant Milana to Twenty CRM data migrations

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

Can't find your answer?

Walk through your Aderant Milana to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Aderant Milana to Twenty CRM migrations complete within 1–2 weeks for setups under 50,000 records. Larger firms with 50,000–200,000 matters, time entries, and contacts extend to 3–4 weeks. The longest planning step is mapping Milana's user-defined fields to Twenty custom fields and pre-creating the data model. Milana's export coordination with Aderant support also adds 3–5 business days to the planning phase before extraction begins.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Aderant Milana.
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