CRM migration

Migrate from Case.one to Twenty CRM

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 logo

Case.one

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

10 of 10

objects map 1:1 between Case.one and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Case.one logo

Case.one

What's pushing teams away

  • Workflow automation limitations frustrate firms with complex multi-step processes that require more flexibility than the native rules engine provides.
  • Performance degradation reported when managing large document repositories within individual matters.
  • Customer support response times are a common complaint in negative reviews, particularly for billing or technical issues.
  • Mobile application lacks feature parity with the desktop version, limiting remote access to full case details.
  • Integration ecosystem is narrower than competitors, making connectivity with niche legal tools and custom software challenging.

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 Case.one objects map to Twenty CRM

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

maps to

Twenty CRM

Opportunity

1:1
Fully supported

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

maps to

Twenty CRM

People

1:1
Fully supported

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

maps to

Twenty CRM

Company

1:1
Fully supported

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

maps to

Twenty CRM

Custom Object: Time_Entry__c

1:1
Fully supported

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

maps to

Twenty CRM

Custom Field on Opportunity

1:1
Fully supported

Case.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)

maps to

Twenty CRM

Custom Field

1:1
Fully supported

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

maps to

Twenty CRM

Task / Note

1:1
Fully supported

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

maps to

Twenty CRM

Custom Object: Billing_Record__c

1:1
Fully supported

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

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

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

maps to

Twenty CRM

No equivalent — export for rebuild

1:1
Fully supported

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

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.

Case.one logo

Case.one gotchas

High

Trust account balance migration requires financial reconciliation

Low

Per-active-case pricing means closed matters do not count toward billing

Medium

Custom field schemas are firm-specific and require enumeration

Medium

Large document repositories may require chunked export with integrity verification

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

  • Import sequencing is enforced — foreign keys must resolve in order

    Twenty's CSV import requires Companies to load before People (the People CSV references companyId), and Opportunities to load before Tasks and Notes (activity records attach to opportunityId). Time_Entry__c and Billing_Record__c custom objects must also load after their parent Opportunities. We sequence the migration into four import batches: Companies → People → Opportunities → Custom Objects. Skipping or reordering batches causes foreign-key reference errors that block the import.

  • Custom fields must exist before CSV import — the import does not create fields

    Twenty's CSV import creates records only; it does not create fields or custom objects. All custom fields referenced in the migration CSV — Case_Name__c, Matter_Number__c, Practice_Area__c, Time_Entry__c, Billing_Record__c, and every Case.one custom field — must be pre-created in Twenty's Settings → Data Model before the migration CSV is uploaded. Pick-list fields must also have their exact option values configured in Twenty, otherwise CSV rows with unmapped pick-list values will error on import.

  • Workflows, sequences, and document templates do not migrate and must be rebuilt

    Case.one's workflow automation rules, sequence triggers, and document-generation templates are platform-specific constructs with no equivalent in Twenty's data model. These must be rebuilt manually in Twenty's workflow builder post-migration. We export Case.one workflow definitions as a structured JSON reference document so your Twenty admin can recreate each rule. Budget 1–3 weeks of admin time for workflow rebuilding depending on the number of active rules.

  • Billing records and invoice PDFs are reference-only in Twenty

    Case.one's time-and-billing module generates invoices and tracks payments. Twenty CRM has no native billing or invoice-generation capability. Invoice data migrates as a Billing_Record__c custom object linked to the opportunity, preserving invoice numbers, amounts, and payment dates for historical reference. However, invoice PDFs stored in Case.one must be re-uploaded to Twenty's storage manually after migration. FlitStack cannot transfer proprietary document blobs between platforms.

  • API rate limits cap bulk-import throughput on Free and Pro tiers

    Twenty's API rate limits are 100 calls/minute on Free/Pro tiers and 200 calls/minute on Organization tier. For migrations exceeding 100,000 records across multiple object types, we recommend using Twenty's CSV import UI rather than the REST API, which bypasses per-call rate limits and supports up to 20,000 records per import batch. Organization-tier customers with 200 calls/minute API access can use the API for more complex transformations requiring pre-processing.

Migration approach

Six steps for a successful Case.one to Twenty CRM data migration

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

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

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

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

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

Context on both ends of the pair

Case.one logo

Case.one

Source

Strengths

  • Per-active-case pricing aligns cost with actual caseload rather than seat count.
  • Consolidated platform reduces switching between separate billing, document, and case tools.
  • Collaborative litigation workspace built natively into the case management flow.
  • Integrated trust accounting handles client fund tracking within the same system.
  • Free tier available for very small firms or evaluation purposes.

Weaknesses

  • Narrower third-party integration ecosystem compared to established legal CRM competitors.
  • Mobile application feature set lags behind the full desktop experience.
  • Workflow automation is less flexible than platforms with programmable rule engines.
  • Limited public documentation on API endpoints and capabilities.
  • Smaller market share means fewer third-party migration resources and community templates.
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 Case.one 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

    Case.one: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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 consultation

Most Case.one-to-Twenty migrations complete within 48–72 hours for under 50,000 records. The longest phase is schema setup — creating custom objects and all custom fields in Twenty's Settings → Data Model before import. Complex setups with 500,000+ records across Cases, Parties, Time Entries, and Billing Records extend to 5–7 days, particularly when Case.one has extensive custom field configurations per matter type.

Adjacent paths

Related migrations to explore

Ready when you are

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