CRM migration

Migrate from Metis CRM to Twenty CRM

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

Metis CRM logo

Metis CRM

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

70%

7 of 10

objects map 1:1 between Metis CRM and Twenty CRM.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Metis CRM to Twenty CRM is a client-centric migration with an API-access constraint on the source side. Metis has no documented public REST API, so all extraction runs through its per-zone CSV exports (Clients, Opportunities, Jobs, People, Timesheets, Expenses). We extract these zones, resolve parent-child relationships across the import sequence, and write the records into Twenty through its GraphQL API or CSV import endpoints. Metis's Jobs map to Twenty Deals with a pipeline and stage design session before migration. People map to Contacts with their associated Company resolved from the Client lookup. Timesheet entries with an orphan Job association require pre-migration reconciliation because Twenty has no standalone time tracking object outside the Activity timeline. We do not migrate Metis Resourcing Reports because they are view exports, not transactional records. Receipt images and expense attachments travel as a parallel file transfer outside the primary data migration. Workflows, automations, and quote templates in Metis do not migrate; we deliver a written inventory for the customer's admin to rebuild in Twenty's settings.

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

Metis CRM logo

Metis CRM

What's pushing teams away

  • Teams outgrow the platform when they need deeper marketing automation, advanced multi-pipeline reporting, or CRM features beyond basic sales pipeline management.
  • Lack of a documented public API limits integration options, forcing teams to manual exports or workarounds that become unsustainable at scale.
  • Project-heavy teams report that job costing and resourcing features are functional but lack the depth of dedicated project management tools.
  • Small teams report that pricing for multiple users adds up, especially when the feature set overlaps with cheaper standalone tools for specific use cases like time tracking.

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

Each row shows how a Metis CRM 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.

Metis CRM

Client

maps to

Twenty CRM

Company

1:1
Fully supported

Metis Client records map directly to Twenty Company. The Client's name, address, contact email, and phone fields map to Twenty's Company standard fields. We use Client name as the dedupe key during import. Company is the first object inserted because People and Opportunities both carry a Client lookup that must be resolved before child record import.

Metis CRM

People

maps to

Twenty CRM

Contact

1:1
Fully supported

Metis People records map to Twenty Contact. We extract role, contact details (email, phone, address), and the linked Client to resolve the Twenty Company foreign key. The Person's name fields map to Contact's display name and email. Role information migrates to a custom Contact field or the job title standard field depending on the customer's scoping preference.

Metis CRM

Opportunity

maps to

Twenty CRM

Deal

1:1
Fully supported

Metis Opportunity records map to Twenty Deal. Stage, value, and close date transfer directly. The Opportunity's linked Client resolves to the Twenty Company that was created first in the import sequence. Pipeline in Metis maps to a Twenty pipeline that we configure during schema setup before migration begins.

Metis CRM

Job

maps to

Twenty CRM

Deal (project variant)

1:1
Fully supported

Metis Jobs are project records with job costing, status, and dates. They map to Twenty Deals with a custom field job_type__c set to 'project' to distinguish from Opportunities in the same pipeline. Job costing fields migrate to custom Deal fields. We run Jobs after Opportunities in the import sequence because both are child objects of Client but Jobs may carry richer cost data that the customer wants visible in Twenty reporting.

Metis CRM

Timesheet

maps to

Twenty CRM

Task + Event

1:many
Fully supported

Metis Timesheet entries map to Twenty Activity records. Billable time entries with a linked Job map to Task records with the Job's Deal as the WhatId. Non-billable entries map to Event records. Duration, date, and billable flag transfer to Task or Event fields. Timesheets without a linked Job (orphan entries) go to a reconciliation queue before migration; the customer chooses to assign them to a default placeholder Deal, skip them, or create placeholder Deals.

Metis CRM

People Expenses

maps to

Twenty CRM

Custom Expense Object

lossy
Mapping required

Metis People Expenses map to a Twenty custom object (expense__c) with fields for amount, date, category, and person reference. Receipt images do not embed in the CSV export and migrate via parallel file transfer. Each expense record in the migration log carries a image_reattachment note instructing the customer to re-link the receipt file in Twenty after migration. We do not use the Xero-friendly People Expenses export variant as a migration source; we extract the standard zone CSV and handle Xero mapping as a separate destination-side concern.

Metis CRM

Central Expenses

maps to

Twenty CRM

Custom Expense Object (agency-level)

lossy
Mapping required

Metis Central Expenses (agency-level overhead) map to the same Twenty expense__c custom object with an additional field expense_scope__c set to 'central' to differentiate from People Expenses. Receipt images handle identically to People Expenses — parallel file transfer with re-attachment notes in the migration log.

Metis CRM

Owner (Person-level)

maps to

Twenty CRM

User

1:1
Fully supported

Metis People records tagged as team members (not just clients) map to Twenty User accounts. We resolve by email match. If a matching Twenty User does not exist, the record is held in the Owner reconciliation queue and the customer provisions the User before record import resumes.

Metis CRM

Resourcing Report

maps to

Twenty CRM

Not migrated (view export)

1:1
Mapping required

Metis Resourcing Reports are filtered views combining People availability with Job assignments — not transactional records. The underlying data (People, Jobs, time allocations) migrates separately. Twenty has no native resourcing view; the community recommends pairing with Metabase or another BI tool for utilization reporting. We flag this gap in the migration inventory and describe the data sources available for rebuilding the report in a BI layer.

Metis CRM

Xero-friendly People Expenses

maps to

Twenty CRM

Not used as migration source

1:1
Not supported

The Xero-friendly export format is a destination-specific schema variant designed for direct Xero import. It is not a general migration source format. We extract the standard People Expenses zone CSV and handle any Xero mapping as a separate transformation step if the customer requires it.

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.

Metis CRM logo

Metis CRM gotchas

High

No public API forces CSV-only migration paths

Medium

Receipt images exported as separate files outside the main CSV

Medium

Orphan time entries without a linked Job

Low

Xero-friendly export is a destination format, not a source object

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

  • Metis has no public API — CSV zone exports only

    Metis CRM does not publish a REST API. All migration extraction runs through per-zone CSV exports from the help center (Clients, Opportunities, Jobs, People, Timesheets, Expenses). This constrains migration speed to export chunk sizes and prevents real-time sync jobs. We extract each zone independently, resolve foreign key lookups across the combined dataset, and write into Twenty via its GraphQL API. The customer should export all zones before migration kickoff to avoid data divergence during the migration window.

  • Receipt images and attachments travel outside the CSV

    Both People Expenses and Central Expenses in Metis store receipt images as linked files rather than embedded data. The CSV export captures the expense record but not the image binary. We run a parallel file transfer for receipt attachments and annotate every expense record in the migration log with an image_reattachment instruction. The customer must verify and re-link receipt images in Twenty manually after migration. We flag this gap in the pre-migration audit so the customer can decide whether to re-attach all receipts or accept a subset.

  • Orphan time entries require pre-migration reconciliation

    Metis Timesheet exports may contain entries logged against a person without a linked Job. These orphan entries cannot map to a Twenty Deal without manual assignment. We flag every unlinked time entry in the pre-migration audit and present three options: assign to a default placeholder Deal, skip the entry, or create placeholder Jobs for each orphaned assignment. This decision affects the timesheet migration row count and must be resolved before the Timesheet phase begins.

  • Twenty CSV imports exclude file attachments

    Per Twenty CRM documentation, file attachments are not included in CSV imports. We handle attachment transfer as a parallel file operation. The customer's admin re-attaches files to the correct records in Twenty post-migration using Twenty's file upload interface or the GraphQL API for bulk attachment. We provide a mapping manifest linking each attachment file to its parent record ID in both systems.

  • Resourcing reports are view exports with no transactional equivalent

    Metis Resourcing Reports combine People availability with Job assignments in a filtered view. Twenty has no native resourcing or resource management module. The underlying data (People, Jobs, time allocations) migrates, but the report itself does not. We recommend rebuilding utilization reporting in Metabase or a comparable BI tool using the migrated Job and timesheet data as sources. We include the recommended data schema in the migration handoff documentation.

Migration approach

Six steps for a successful Metis CRM to Twenty CRM data migration

  1. Source export and pre-migration audit

    We guide the customer through exporting all Metis zone CSVs: Clients, Opportunities, Jobs, People, Timesheets, People Expenses, Central Expenses, and the Resourcing Report underlying data. We audit the exports for orphan time entries (Timesheets without a Job link), missing receipt images, and Client-to-People relationship completeness. We produce a pre-migration audit report that lists record counts per zone, flags the orphan reconciliation decisions required, and estimates the attachment re-attachment scope. The customer resolves the orphan timesheet decisions before we begin the data import.

  2. Destination schema design and pipeline configuration

    We design the Twenty destination schema based on the customer's object requirements. This includes creating the expense__c custom object with the required fields (amount, date, category, person reference, scope flag), configuring the Deal pipeline with stages mapped from Metis Opportunity and Job statuses, and setting up any custom fields required for job costing and person role data. We also configure the Twenty pipeline structure (single or multiple pipelines based on the customer's Metis setup) before any data insert begins.

  3. Owner and user provisioning

    We extract every distinct team member (People records with team role) from the Metis export and match by email against the Twenty destination workspace's User list. Users without a match go to a reconciliation queue. The customer provisions any missing Twenty Users before record import resumes. Owner resolution is required before inserting Opportunities, Jobs, and Expenses because those records carry an owner reference in Twenty.

  4. Parent record migration in dependency order

    We run the migration in strict dependency order: Companies (from Clients) first, then Contacts (from People with CompanyId resolved), then Deals (from Opportunities with CompanyId and OwnerId resolved), then Job Deals (from Jobs with job_type__c set and costing fields migrated). Each phase emits a row-count reconciliation report before the next phase begins. This sequencing prevents foreign key failures on insert.

  5. Activity and expense migration with parallel file transfer

    Timesheets migrate as Task and Event records with the orphan reconciliation decision applied. Expenses migrate as expense__c custom object records. Receipt image files transfer in parallel via a separate file listing extracted from Metis, and we generate a re-attachment manifest mapping each file to its destination record ID in Twenty. The customer re-attaches files using the manifest after migration.

  6. Cutover, validation, and resourcing gap handoff

    We freeze Metis writes during cutover, run a delta migration for any records modified during the window, then hand off to the customer. We validate record counts, spot-check 20-30 records for field accuracy, and deliver the migration inventory including the resourcing gap note (no native resourcing view in Twenty), the attachment re-attachment manifest, and the orphan timesheet decisions applied. We do not rebuild Metis Resourcing Reports as part of the migration scope; we document the available data for a BI rebuild.

Platform deep dives

Context on both ends of the pair

Metis CRM logo

Metis CRM

Source

Strengths

  • Unified CRM, project management, and time tracking for professional services workflows
  • Per-zone CSV export capability gives clean data extraction points for migration
  • Client-centric data model with Opportunities, Jobs, People, and Timesheets as first-class objects
  • Resource management and resourcing reports for tracking team utilization across jobs
  • Affordable positioning for freelancers, agencies, and SMBs without enterprise overhead

Weaknesses

  • No documented public REST API — all migrations rely on CSV zone exports
  • No clear pricing page or published tier structure in available sources
  • Receipt images and attachments stored as separate files outside the primary data export
  • Resourcing reports are view exports, not transactional objects — underlying data must be reconstructed
  • Limited integrations compared to established CRM platforms
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 Metis CRM 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

    Metis CRM: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most migrations land between two and four weeks for accounts under 5,000 Clients, 2,000 People, and clean Job associations. Migrations with large timesheet histories, orphan time entry reconciliation requirements, multiple expense categories with receipt image re-attachment, or a resourcing report reconstruction request move to six to ten weeks. The primary timeline drivers are the Metis zone export preparation on the source side and the custom object schema setup on the Twenty side.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Metis CRM.
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