CRM migration
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
Source
Twenty CRM
Destination
Compatibility
11 of 12
objects map 1:1 between Criminal Case Management and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
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.
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 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
Twenty CRM
People
1:1Criminal 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
Twenty CRM
People
1:1Attorneys 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
Twenty CRM
People
many:1Multiple 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
Twenty CRM
Company
1:1Law 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
Twenty CRM
Opportunity
1:1Cases 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
Twenty CRM
Case_Status__c (custom field on Opportunity)
1:1Criminal 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
Twenty CRM
Custom Object: Charges
1:1Criminal 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
Twenty CRM
Task / Event
1:1Court 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
Twenty CRM
Custom Object: Evidence
1:1Evidence 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
Twenty CRM
Note / Attachment on Opportunity
1:1Documents, 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
Twenty CRM
Custom Object: TimeEntry
1:1Time 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
Twenty CRM
Custom Fields on Opportunity
1:1Criminal 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.
| Criminal Case Management | Twenty CRM | Compatibility | |
|---|---|---|---|
| Client / Defendant | People1:1 | Fully supported | |
| Attorney / Public Defender | People1:1 | Fully supported | |
| Prosecutor / Investigator / Judge | Peoplemany:1 | Fully supported | |
| Law Firm / Agency / Court | Company1:1 | Fully supported | |
| Case / Matter | Opportunity1:1 | Fully supported | |
| Case Status | Case_Status__c (custom field on Opportunity)1:1 | Fully supported | |
| Charges / Counts | Custom Object: Charges1:1 | Fully supported | |
| Court Dates / Calendar Events | Task / Event1:1 | Fully supported | |
| Evidence / Exhibits | Custom Object: Evidence1:1 | Fully supported | |
| Documents / Filings | Note / Attachment on Opportunity1:1 | Fully supported | |
| Billing / Time Entries | Custom Object: TimeEntry1:1 | Fully supported | |
| Custom Case Fields | Custom Fields on Opportunity1: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.
Criminal Case Management gotchas
Limited export options for bulk data extraction
Annual subscription billing with prorated cancellation
Custom field schemas vary by account and plan
Document blob extraction may require manual intervention
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 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.
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.
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.
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.
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.
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
Criminal Case Management
Source
Strengths
Weaknesses
Twenty CRM
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 Criminal Case Management and Twenty CRM.
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
Criminal Case Management: Not publicly documented.
Data volume sensitivity
Criminal Case Management 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 Criminal Case Management to Twenty CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Criminal Case Management
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.