CRM migration

Migrate from Criminal Case Management to Twenty CRM

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

Criminal Case Management logo

Criminal Case Management

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

92%

11 of 12

objects map 1:1 between Criminal Case Management and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Criminal Case Management platforms — whether purpose-built tools like CaseFleet, PracticePanther, Clio, or custom in-house systems — store case data across a flat or loosely structured object model: Clients, Cases, Defendants, Documents, Tasks, Calendar Events, and custom fields for criminal-specific attributes like charges, statutes, case numbers, and court assignments. Twenty CRM uses a structured object graph built around People, Companies, Opportunities, Notes, Tasks, and Custom Objects, with no native case management entity. The migration therefore requires decomposing each criminal case record into its constituent parts and routing them to the appropriate Twenty object: defendant and attorney contacts land in People, law firm or agency accounts land in Companies, and the case itself — along with its status, priority, filing date, and disposition — becomes a Twenty Opportunity with a suite of custom fields capturing the criminal case schema. Where the source uses pick-list values for case status, severity, or charge classification, Twenty requires custom select fields created in the workspace before data lands. We handle the full migration via Twenty's REST and GraphQL APIs, using batch operations within rate limits, and we surface workflow and document management logic as exportable definitions for manual rebuild in Twenty's workflow builder. The process is scoped read-only on the source system throughout, with a delta-pickup window capturing any case updates during cutover. Custom objects, evidence records, and filing history that have no native Twenty equivalent are migrated as custom object records with explicit mapping notes so your team knows exactly what landed where.

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

Criminal Case Management logo

Criminal Case Management

What's pushing teams away

  • Firms growing beyond 10-15 users report that CaseFleet lacks the multi-office, multi-user permission controls and advanced reporting that comparable platforms provide.
  • Support response times frustrate users when critical deadlines approach, and the knowledge base does not cover edge-case workflows in depth.
  • Annual contract billing catches firms off guard when they attempt to cancel mid-year, with prorated refunds processed slowly or inconsistently.
  • Firms needing native accounting, trust accounting, or client billing features find CaseFleet requires third-party integrations that add cost and complexity.
  • Lawyers expecting API access for custom integrations discover CaseFleet exposes limited or undocumented endpoints, blocking automation workflows.

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 Criminal Case Management objects map to Twenty CRM

Each row shows how a Criminal Case Management 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.

Criminal Case Management

Client / Defendant

maps to

Twenty CRM

People

1:1
Fully supported

Criminal case management platforms store the case subject — defendant, respondent, or party — as a client contact. FlitStack maps this to Twenty's People object. Role metadata (Defendant, Respondent) is preserved as a custom Role__c pick-list field on the People record, since Twenty has no native role concept for person records.

Criminal Case Management

Attorney / Public Defender

maps to

Twenty CRM

People

1:1
Fully supported

Attorneys and public defenders assigned to a case are contacts in the source system. These map directly to Twenty People records. The bar number, law firm affiliation, and court jurisdiction are stored as custom text and select fields on the People record. Where the source stores attorney as a lookup to a firm object, we resolve it to a Twenty Company record first and link the attorney People record via companyId.

Criminal Case Management

Prosecutor / Investigator / Judge

maps to

Twenty CRM

People

many:1
Fully supported

Multiple role types from the source (prosecutor, investigator, judge, victim advocate, expert witness) are all people with distinct role labels. We merge all of these into the Twenty People object, using a custom Role__c pick-list field to distinguish each person's function per case. Each person may appear on multiple cases with different roles.

Criminal Case Management

Law Firm / Agency / Court

maps to

Twenty CRM

Company

1:1
Fully supported

Law firms, public defender offices, prosecutor offices, investigative agencies, and courts are stored as Company records in Twenty. The source system's agency or court name maps to Company.name. Domain and court jurisdiction are mapped to custom fields (Agency_Domain__c, Court_Jurisdiction__c) on the Company record.

Criminal Case Management

Case / Matter

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Cases are the core entity with no direct Twenty CRM equivalent. FlitStack maps each case to a Twenty Opportunity record: the case name becomes Opportunity.name, case number maps to a custom Case_Number__c field, and case status maps to a custom Case_Status__c pick-list with value-by-value alignment to the source status values. The People record representing the defendant links via the Opportunities contact roles where the source stores a defendant-to-case relationship.

Criminal Case Management

Case Status

maps to

Twenty CRM

Case_Status__c (custom field on Opportunity)

1:1
Fully supported

Criminal case statuses (Open, Under Investigation, Indicted, Arraigned, Trial, Plea, Sentenced, Closed, Dismissed, Acquitted) have no native Twenty equivalent. We create a custom pick-list field Case_Status__c on the Opportunity object and map each source status value to its Twenty equivalent. Stage-entered timestamps from the source are preserved as a custom field (Status_Changed_At__c) on the Opportunity.

Criminal Case Management

Charges / Counts

maps to

Twenty CRM

Custom Object: Charges

1:1
Fully supported

Criminal charges and counts attached to a case have no native Twenty object. We create a custom object named Charges with fields for charge_description (text), statute_code (text), charge_type (select: Felony, Misdemeanor, Infraction), severity (select: Class A through Class C, or state-specific tier), and disposition (select: Convicted, Acquitted, Dismissed, Amended). The Charges object links to the parent Opportunity (case) via a relation field.

Criminal Case Management

Court Dates / Calendar Events

maps to

Twenty CRM

Task / Event

1:1
Fully supported

Court hearing dates, filing deadlines, and statute-of-limitations deadlines in the source are event records. We map court dates to Twenty Events with the case Opportunity linked via opportunityId. Filing and motion deadlines map to Tasks with a custom Task_Type__c field (e.g., Filing Deadline, Motion Due, Discovery Deadline). Recurrence and court-calendar conflict detection do not carry over — these require manual setup in Twenty.

Criminal Case Management

Evidence / Exhibits

maps to

Twenty CRM

Custom Object: Evidence

1:1
Fully supported

Evidence records and exhibit lists stored in the source have no native Twenty equivalent. We create a custom Evidence object with fields for evidence_description (text), evidence_type (select: Physical, Digital, Documentary, Testimonial), exhibit_number (text), chain_of_custody notes (text), and a relation to the parent Opportunity (case). Attachments and files are re-uploaded and linked to the Evidence record.

Criminal Case Management

Documents / Filings

maps to

Twenty CRM

Note / Attachment on Opportunity

1:1
Fully supported

Documents, motions, briefs, and court filings attached to a case migrate as Twenty Notes on the Opportunity record. The source document type label (Motion, Brief, Discovery, Plea Agreement) is stored in a custom Type__c field on the Note. Original file names and timestamps are preserved in the Note's metadata and as custom fields.

Criminal Case Management

Billing / Time Entries

maps to

Twenty CRM

Custom Object: TimeEntry

1:1
Fully supported

Time entries and billing records linked to cases in the source have no native Twenty object. We create a custom TimeEntry object with fields for hours_worked (number), billing_rate (currency), total_amount (currency), date_performed (date), description (text), and a relation to the Opportunity (case) and the People record (attorney). Invoice and payment status may require a separate custom object if tracked.

Criminal Case Management

Custom Case Fields

maps to

Twenty CRM

Custom Fields on Opportunity

1:1
Fully supported

Criminal case management platforms frequently add custom fields for jurisdiction codes, duty counsel flags, public-record indicators, immigration-hold flags, or restitution amounts. Each unique custom field in the source is analyzed by type (text, number, date, select) and replicated as a custom field on the Opportunity object in Twenty before the migration run.

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.

Criminal Case Management logo

Criminal Case Management gotchas

High

Limited export options for bulk data extraction

Medium

Annual subscription billing with prorated cancellation

Medium

Custom field schemas vary by account and plan

Medium

Document blob extraction may require manual intervention

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

  • Twenty has no native Case or Matter object — criminal case schema must be rebuilt as custom fields on Opportunity

    Criminal case management systems model cases as first-class objects with specialized fields (case number, charges, statute codes, court, judge, disposition, sentencing). Twenty CRM's standard Opportunity object was designed for sales pipeline tracking, not legal case management. Every criminal case attribute — case status, charge classification, statute codes, court jurisdiction, disposition outcome — requires a custom field created in Twenty's metadata before data can land. FlitStack creates a schema setup plan listing every required custom field, pick-list value set, and custom object so your Twenty workspace is ready before migration runs. Teams that skip this step find records landing with null values in critical fields.

  • Evidence records, exhibits, and chain-of-custody data require a custom object with no native Twenty equivalent

    Criminal case evidence management — exhibit numbers, chain-of-custody logs, evidence type classification (physical, digital, documentary, testimonial), and file attachments — has no built-in Twenty object. FlitStack migrates evidence records as a custom object with a relation back to the parent Opportunity. Attachments are re-uploaded via Twenty's file storage. Chain-of-custody narrative and custody transfer events become text fields on the Evidence record. If your source system tracks digital hash verification or forensic metadata, those fields also require custom field creation. Your Twenty admin should pre-create the Evidence object during the schema setup phase.

  • Twenty lacks a built-in import UI — large-scale migrations depend on API batch operations within rate limits

    Twenty's CSV import function handles up to 20,000 records per operation and requires column mapping in the UI, but it lacks programmatic import scheduling and doesn't preserve all relationship structures across objects in a single pass. For criminal case migrations with complex contact-role hierarchies (defendant, attorney, investigator, judge all linked to one case), FlitStack uses Twenty's REST and GraphQL batch APIs with 100–200 calls per minute depending on the plan tier. We manage exponential backoff and retry logic to handle rate limit responses gracefully, and we sequence record creation to respect Twenty's import order requirement: Companies first, then People, then Opportunities, then custom objects with relations.

  • Court-date recurrence and statute-of-limitations tracking do not carry over — they require manual rebuild in Twenty workflows

    Criminal case management platforms track recurring court dates (next hearing scheduled automatically upon disposition of the current one), statute-of-limitations countdowns, and deadline escalation rules tied to filing events. Twenty's workflow builder can create time-based tasks and deadline reminders, but recurrence patterns and event-triggered automation logic from the source do not export as transferable rules. FlitStack exports your workflow definitions as JSON and pseudocode so your Twenty admin or developer can reference them when rebuilding court-date recurrence and SOL escalation in Twenty's workflow builder. This is a manual rebuild step — plan 1–2 weeks for workflow reconstruction after migration.

  • Multi-role contacts (one person with different roles per case) require opportunityContactRoles and custom Role__c field on People

    In criminal case management systems, the same individual often appears in different roles across different cases: an attorney might serve as defense counsel in one case and as a witness in another; a defendant on one case may be a victim on another. Twenty's opportunityContactRoles mechanism handles one role label per person per opportunity, but it does not natively support a person having multiple simultaneous role labels on a single opportunity. FlitStack resolves this by storing the per-case role as a custom Role__c pick-list on the People record and using opportunityContactRoles as the primary role label. If a person has two roles on one case, we create two separate opportunityContactRole entries — your Twenty admin decides whether to display both or collapse to the primary role.

Migration approach

Six steps for a successful Criminal Case Management to Twenty CRM data migration

  1. Audit source data model and extract record schemas

    FlitStack begins every migration with a structured audit of the source Criminal Case Management system: we enumerate every object (Cases, Contacts, Companies, Tasks, Notes, Custom Objects), catalog every custom field with its type and pick-list values, and document relationship structures between defendants, attorneys, investigators, and the cases they touch. We also assess the export mechanism — whether the platform offers a REST API, CSV bulk export, or requires field-level API extraction — and identify any fields that cannot be exported programmatically. This audit produces the migration scope document and drives the custom field creation plan for Twenty.

  2. Create Twenty workspace schema before data arrives

    Before any data moves, your Twenty admin (or our team) creates the custom fields, pick-list value sets, and custom objects needed to hold the criminal case schema. This includes the Case_Status__c pick-list, custom fields for statute codes, court names, filing and disposition dates, the custom Charges object with its relation to Opportunity, the custom Evidence object with type and exhibit fields, and the custom Role__c field on People. We deliver a detailed schema setup plan so this work is complete before validation runs.

  3. Resolve contacts and map roles to Twenty People records

    Contacts from the source — defendants, attorneys, prosecutors, judges, investigators, victims — are extracted and deduplicated by email and name. FlitStack resolves each contact to a Twenty People record, creates or links the corresponding Company record (law firm, agency, court), and assigns the Role__c pick-list value that indicates the person's function in each case. For contacts who appear in multiple roles across cases, we create multiple opportunityContactRole entries and use the Role__c field on the People record to surface the most common role.

  4. Migrate cases to Twenty Opportunities with full custom field mapping

    Cases are mapped to Twenty Opportunity records. The case name becomes Opportunity.name, the case number maps to Case_Number__c, case status maps to Case_Status__c via the value-mapping table, and court and judge details land in their respective custom fields. Filing and disposition dates populate the date custom fields. The defendant People record is linked via opportunityContactRoles. Charges are created as custom Charges object records linked to the parent Opportunity. Evidence and documents are migrated as their respective custom objects and Notes, with file attachments re-uploaded to Twenty's file storage.

  5. Run a sample migration with field-level diff and case-record validation

    A representative slice of records — typically 200–500, covering 10–20 cases, their associated contacts, evidence, and documents — migrates first. FlitStack generates a field-level diff showing every source field, its mapped Twenty destination, the value in the source, and the value written to Twenty. You verify that case status values, statute codes, filing dates, and defendant-contact links resolve correctly before the full run commits. Evidence chain-of-custody records and document type labels are spot-checked during this phase.

  6. Cut over with delta-pickup window and post-migration audit

    The full migration runs against Twenty's REST and GraphQL APIs within rate limits. During cutover, your team continues working in the source Criminal Case Management system — FlitStack holds scoped read access and captures any case updates, new filings, or status changes in a delta buffer. A 24–48 hour delta-pickup window after the main run applies those in-flight changes to Twenty so the destination reflects the source's final state at go-live. We generate a post-migration audit log listing every record created, updated, or skipped with a reason code. One-click rollback is available if reconciliation uncovers data integrity issues.

Platform deep dives

Context on both ends of the pair

Criminal Case Management logo

Criminal Case Management

Source

Strengths

  • Visual chronological timeline builder reconstructs case facts in a single view for litigation narrative planning.
  • Matter-centric architecture keeps all case data grouped under one container without manual cross-referencing.
  • Built-in evidence library with tagging keeps documents organized and linked to specific case events.
  • Time tracking integrated with case tasks captures billable activity without switching applications.
  • Task management with deadline calendars alerts attorneys to court dates and filing deadlines.

Weaknesses

  • API access is limited or undocumented, blocking custom integrations and automated data pipelines.
  • Annual contract billing with opaque cancellation terms creates friction for firms evaluating alternatives.
  • Multi-user permission controls are basic, making CaseFleet unsuitable for larger firms with role-based access requirements.
  • Reporting and analytics are limited compared to full-practice-management platforms.
  • Limited third-party integrations require firms to maintain separate accounting or communication tools.
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. 2 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 Criminal Case Management and Twenty CRM.

  • Object compatibility

    B

    2 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

    Criminal Case Management: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Criminal Case Management 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 Criminal Case Management to Twenty CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most criminal case management to Twenty CRM migrations complete in 48–72 hours of clock time for under 10,000 records covering cases, defendant contacts, attorneys, and evidence. Setups with 10,000–100,000 records or complex multi-role contact structures extend to 5–10 days. The longest single step is the schema setup phase — creating all custom fields, pick-list value sets, and custom objects in Twenty before data can land. FlitStack delivers the schema setup plan in the first 3–5 business days so that work runs in parallel with migration planning.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Criminal Case Management.
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