CRM migration
Field-level mapping, validation, and rollback between Case.one and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Case.one
Source
Twenty CRM
Destination
Compatibility
10 of 10
objects map 1:1 between Case.one and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Case.one is a legal-practice platform built around Cases, Parties, Time Entries, and billing records — a schema oriented toward law-firm workflows and client-matter hierarchies. Twenty CRM uses a standard CRM object model: People, Companies, Opportunities, Notes, Tasks, and Custom Objects with a configurable data model. The migration therefore requires several non-trivial translations. We map Case.one Cases to Twenty Opportunities with a custom Case_Name__c field to preserve the original matter title. Parties convert to People records linked to a Company. Time Entries and billing data migrate as a custom Time_Entry__c object linked back to the opportunity. Case.one custom fields become Twenty custom fields created before import. Automation, workflows, templates, and billing configurations do not migrate — we export Case.one workflow definitions as a rebuild reference for Twenty's workflow builder. The migration runs through Twenty's CSV import API, sequenced so that Companies load before People (via companyId), and Opportunities load before activity records. A 24–48-hour delta-pickup window captures any Case.one changes during cutover.
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 Case.one 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.
Case.one
Case
Twenty CRM
Opportunity
1:1Case.one Cases map directly to Twenty Opportunities. The case name maps to Opportunity.Name, and the case amount or billing total maps to Opportunity.Amount. A custom Case_Name__c field preserves the original matter title for reference in Twenty's UI.
Case.one
Party
Twenty CRM
People
1:1Case.one Parties (contacts linked to a case) map to Twenty People records. The party's full name splits into People.name fields. Each Party's link to a Case.one Company maps to a companyId relationship in Twenty, requiring a Company record to exist first.
Case.one
Company
Twenty CRM
Company
1:1Case.one Companies map 1:1 to Twenty Companies. The company name, domain, industry, and address fields map directly. Parent-child company hierarchies in Case.one use a parentId reference that must resolve to an existing Company record in Twenty.
Case.one
Time Entry
Twenty CRM
Custom Object: Time_Entry__c
1:1Case.one Time Entries have no native equivalent in Twenty. We create a Time_Entry__c custom object with fields for hours, rate, total amount, date, and description. Each Time Entry links to the related Opportunity via a custom Opportunity__c relation field set up in Twenty's Settings → Data Model before import.
Case.one
Document / Attachment
Twenty CRM
Custom Field on Opportunity
1:1Case.one documents attached to cases have no direct equivalent in Twenty's standard object model. We migrate document metadata (filename, file type, upload date) as custom text fields on the related Opportunity. Actual files require re-upload to Twenty's storage after migration.
Case.one
Custom Field (key-value pairs)
Twenty CRM
Custom Field
1:1Case.one stores flexible key-value pairs as custom fields on Cases, Parties, and Companies. Each key-value pair becomes a dedicated custom field in Twenty. Fields must be pre-created in Settings → Data Model before CSV import; pick-list fields must have matching values in Twenty.
Case.one
Activity / Note
Twenty CRM
Task / Note
1:1Case.one activities (calls, emails, meetings, notes) linked to a case map to Twenty Tasks. Emails and calls map to Task with Type set accordingly. Meeting notes map to Twenty Notes attached to the related Opportunity. Original timestamps and owner assignments are preserved.
Case.one
Billing / Invoice Record
Twenty CRM
Custom Object: Billing_Record__c
1:1Case.one invoices and payment records have no CRM equivalent in Twenty. We create a Billing_Record__c custom object linked to the opportunity. Fields include Invoice_Number__c, Amount__c, Status__c, and Payment_Date__c. Invoice PDFs require re-upload post-migration.
Case.one
User / Owner
Twenty CRM
WorkspaceMember
1:1Case.one users (attorneys, paralegals, billing admins) resolve against Twenty workspace members by email match. Unmatched owners are flagged before migration; their records either assign to a fallback owner or wait for the user to accept a Twenty invitation.
Case.one
Workflow / Automation Rule
Twenty CRM
No equivalent — export for rebuild
1:1Case.one workflow rules, sequence triggers, and document-generation templates do not map to any Twenty object. We export the full workflow definitions as a structured JSON reference so your Twenty admin can rebuild them in Twenty's workflow builder.
| Case.one | Twenty CRM | Compatibility | |
|---|---|---|---|
| Case | Opportunity1:1 | Fully supported | |
| Party | People1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Time Entry | Custom Object: Time_Entry__c1:1 | Fully supported | |
| Document / Attachment | Custom Field on Opportunity1:1 | Fully supported | |
| Custom Field (key-value pairs) | Custom Field1:1 | Fully supported | |
| Activity / Note | Task / Note1:1 | Fully supported | |
| Billing / Invoice Record | Custom Object: Billing_Record__c1:1 | Fully supported | |
| User / Owner | WorkspaceMember1:1 | Fully supported | |
| Workflow / Automation Rule | No equivalent — export for rebuild1: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.
Case.one gotchas
Trust account balance migration requires financial reconciliation
Per-active-case pricing means closed matters do not count toward billing
Custom field schemas are firm-specific and require enumeration
Large document repositories may require chunked export with integrity verification
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
Prepare Twenty's data model and invite workspace members
Before any data moves, we create all required custom objects and fields in Twenty's Settings → Data Model: Time_Entry__c, Billing_Record__c, and all custom fields referenced in the Case.one schema (Case_Name__c, Matter_Number__c, Practice_Area__c, Billing_Rate__c, etc.). We also configure pick-list option values to match Case.one's exact values. Simultaneously, we ensure all Case.one users have accepted Twenty workspace invitations so their email addresses are available for owner resolution during the migration.
Audit and export Case.one data in dependency order
We export Case.one data in a sequence that respects Twenty's foreign-key constraints: Companies and Cases first (the independent entities), then Parties and People (linked via companyId), then Time Entries and Activities (linked to cases). We capture all standard fields, custom fields, and metadata including original create dates, owner assignments, and case-to-party associations. Duplicate records, outdated contacts (no activity in 2+ years), and test entries are flagged for exclusion.
Transform data and load into Twenty in correct import order
We transform the exported CSV files to match Twenty's field names and data types. Companies load first via CSV import. People load second, with companyId referencing the Company records loaded in step one. Opportunities load third, capturing case name, stage, amount, and all custom case fields. Custom objects (Time_Entry__c, Billing_Record__c) load fourth, with Opportunity__c relation fields referencing the Opportunities loaded in step three. Activity records (Tasks, Notes) load last.
Run a sample migration with field-level verification
We run a representative slice of the migration — typically 100–500 records spanning cases, contacts, companies, activities, and time entries — and generate a field-level diff report. This report shows every mapped field's source value and destination value, flagging any transformation errors, missing pick-list matches, or foreign-key failures before the full run commits. You review the diff and approve before the final migration begins.
Execute full migration with delta-pickup and post-migration verification
The full migration loads all Case.one records into Twenty. During the cutover window, Case.one remains in read-only mode and FlitStack AI captures a delta of any new or modified records. A final verification step compares record counts and spot-checks field values between Case.one and Twenty. An audit log records every operation. One-click rollback is available if reconciliation finds discrepancies requiring a restart.
Platform deep dives
Case.one
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 Case.one 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
Case.one: Not publicly documented.
Data volume sensitivity
Case.one 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 Case.one to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Case.one 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 Case.one
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.