CRM migration

Migrate from Copper to Twenty CRM

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

Copper logo

Copper

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

58%

7 of 12

objects map 1:1 between Copper and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Copper and Twenty CRM share a minimalist, relationship-centric data model that makes the core object mapping straightforward: People map to Persons, Companies to Companies, and Opportunities to Opportunities. The three migration gaps that require deliberate design are Copper's attachment storage in Google Drive (which must be re-linked in Twenty's file system), the absence of an automated incremental numbering system for Opportunities in Twenty (documented in the Twenty v2.0 changelog), and the manual nature of Lead-to-Opportunity conversion in Twenty, which differs from Copper's more fluid Lead-to-Contact model. We handle the API extraction from Copper at the 180 requests-per-minute ceiling with paginated reads, sequence the import into Twenty's REST API in dependency order, and flag any record counts that exceed Twenty Cloud Pro's storage ceiling. Workflows, bulk email sequences, and Zapier integrations do not migrate; we deliver a written inventory for your admin to rebuild in Twenty's automation layer or through its supported integrations.

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

Copper logo

Copper

What's pushing teams away

  • Workflow automation, bulk email, and advanced reporting are gated behind Professional and Business tiers, pushing growing teams toward unexpected cost increases as their seat count and feature needs both climb.
  • Teams report the platform feels underpowered for complex sales motions, with limited customisation compared to Salesforce or HubSpot once use cases move beyond simple pipeline tracking.
  • Some users report that the interface is intuitive for basic tasks but becomes less intuitive when navigating advanced configuration, custom fields, or pipeline customisation.
  • The AI-assisted features such as email rewriting are only available on higher tiers and reviewers note they feel underdeveloped compared to AI capabilities offered by competitors.

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

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

Copper

People

maps to

Twenty CRM

Person

1:1
Fully supported

Copper People records map to Twenty Persons. Name, email, phone, address, and social links transfer as standard fields. Copper's contact photo URL migrates to Twenty's avatar field if the URL is publicly accessible. Any Person with a status of Lead in Copper gets a custom tag migrated rather than a separate record type, since Twenty Persons serve as both lead and contact records.

Copper

Company

maps to

Twenty CRM

Company

1:1
Fully supported

Copper Companies map directly to Twenty Companies with domain, annual revenue, employee count, and industry preserved. The Copper People-to-Company linkage migrates as a Person-Company relationship in Twenty. We resolve the Company record before importing related People to satisfy the lookup dependency.

Copper

Opportunity

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Copper Opportunities map to Twenty Opportunities with name, amount, stage, expected close date, and probability. Pipeline Stage maps to Twenty's pipeline stage. Note: Twenty v2.0 has no automated incremental numbering system for Opportunity IDs, per the Twenty v2.0 changelog discussion on Reddit. We flag this gap during scoping and advise whether to assign sequential IDs before import or accept Twenty's UUID-based identifiers. Closed-Won and Closed-Lost outcomes from Copper migrate as stage values.

Copper

Lead

maps to

Twenty CRM

Person (tagged as lead)

1:many
Fully supported

Copper's separate Lead object does not have a direct Twenty equivalent. Twenty Persons serve as both leads and contacts. We migrate Copper Leads as Twenty Persons with a custom tag (e.g., source=copper_lead) and preserve the original Lead_Status as a custom field (copper_lead_status__c). The GitHub issue #10422 documents that Twenty's Lead-to-Opportunity conversion is manual rather than built-in, so we advise customers to plan the qualification workflow in Twenty post-migration.

Copper

Pipeline

maps to

Twenty CRM

Pipeline

lossy
Fully supported

Copper Pipelines (available on Basic and above) map to Twenty Pipelines. Stage names, stage order, and probability percentages transfer. If Copper has multiple pipelines, each maps to a separate Twenty Pipeline. We configure pipeline visibility and stage labels in Twenty before importing Opportunities.

Copper

Project

maps to

Twenty CRM

Workspace

1:many
Fully supported

Copper Projects are a lightweight project management object not natively replicated in Twenty's standard workspace. We migrate Projects as Twenty Workspaces and their associated Tasks as Twenty Tasks linked to the workspace. Customers who rely heavily on Copper Projects as a project management layer rather than a CRM feature should plan a parallel migration to a dedicated project tool or document the project-to-task mapping during scoping.

Copper

Task

maps to

Twenty CRM

Task

1:1
Fully supported

Copper Tasks map to Twenty Tasks with title, due date, assignee (resolved via User email match), status, and related record link preserved. Copper's task priority maps to Twenty's priority field. Tasks with no assignee are migrated with an unassigned flag for the customer to resolve.

Copper

Activity (calls, emails, meetings, notes)

maps to

Twenty CRM

Activity

1:1
Fully supported

Copper Activities (emails, calls, meetings, notes) linked to People, Companies, or Opportunities migrate to Twenty Activity records. Activity type, date, duration, body, and related record link transfer. We resolve the parent Person, Company, or Opportunity ID at migration time to maintain the activity timeline linkage. Note that if activities reference Google Drive-attached files, those attachments must be re-linked after the file migration step.

Copper

Custom Fields

maps to

Twenty CRM

Custom Fields

lossy
Mapping required

Copper Custom Fields on People, Companies, Opportunities, Leads, Projects, and Tasks are enumerated via the Copper Custom Field Definitions API before migration. We create equivalent custom fields in Twenty (field type matching where possible: text to text, number to number, date to date, checkbox to boolean). Multi-select fields map to Twenty multi-select picklists. Custom field ordering and section placement in Copper are noted for manual recreation in Twenty's field layout editor.

Copper

Tags

maps to

Twenty CRM

Tags

lossy
Mapping required

Copper Tags are flat labels applied to People, Companies, and Opportunities. We migrate all tags as-is and create them in Twenty's tag system. Tags used for segmentation or pipeline classification are noted separately for the customer to assess whether Twenty's pipeline stage or custom field better serves the original use case.

Copper

Attachment metadata

maps to

Twenty CRM

Attachment

1:1
Fully supported

Copper attachments live in Google Drive, not inside Copper's own storage. We extract attachment metadata (filename, URL, associated record) during scoping, then coordinate with the customer to migrate the underlying Google Drive files. Files can be re-uploaded to Twenty directly or re-linked via shared URLs if the customer maintains a Google Drive workspace. Without this step, attachment references in Twenty become broken links.

Copper

Owner

maps to

Twenty CRM

User

1:1
Fully supported

Copper Owners map to Twenty Users resolved by email address. We extract every distinct Owner referenced on People, Company, Opportunity, Task, and Activity records. Any Copper Owner without a matching Twenty User is held in a reconciliation queue for the customer's admin to provision the account before record import resumes, since OwnerId references are required on most record inserts.

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.

Copper logo

Copper gotchas

High

Contact limit enforcement varies by tier and can block imports

High

API rate limit of 180 requests per minute requires throttled extraction

Medium

Workflows, bulk email, and custom reports are tier-gated features

Medium

Attachment files live in Google Drive, not Copper's own storage

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 automated Opportunity numbering system

    Reddit discussions of the Twenty v2.0 release document that teams have stalled migrations after discovering Twenty assigns UUIDs to Opportunities rather than sequential human-readable IDs. Copper generates auto-incremented Opportunity IDs on record creation. Twenty does not yet generate sequential IDs natively. We flag this gap during scoping, advise whether to pre-assign sequential IDs via a migration script or accept UUID-based identifiers, and note that the customer may need to build a custom numbering solution if sequential IDs are a business requirement.

  • Lead-to-Opportunity conversion is manual in Twenty

    A documented Twenty GitHub issue (#10422) describes the absence of a built-in Lead conversion action. In Copper, Leads and People are separate objects that can be qualified and converted to Opportunities through the CRM's UI. Twenty requires manual data copying from a Person record to a new Opportunity record. We advise customers to define their qualification criteria before migration and to plan the post-migration workflow for converting Twenty Persons into Opportunities. We do not automate the conversion logic; we document the mapping and leave the process design to the customer's admin.

  • Google Drive attachments must be migrated separately

    Copper stores file attachments in the customer's associated Google Drive account, not inside Copper's database. Attachment metadata (filename, URL, associated record) migrates with the CRM records, but the underlying files must be moved from Google Drive to Twenty's file storage. We coordinate the Google Drive file transfer, verify read access via a service account, and re-link file references in Twenty after the CRM records are imported. Without this step, Twenty records show attachment placeholders with broken links that confuse users on day one.

  • Copper API rate limit of 180 requests per minute requires pagination

    Copper's API enforces a hard limit of 180 requests per minute. We implement paginated reads with exponential backoff to stay well within this ceiling during extraction. For migrations with large activity histories, extraction may require multiple sessions. We estimate extraction time based on total record volume during scoping and warn customers when the dataset size will extend the extraction window beyond a single working day.

  • Twenty's API and data model are actively evolving

    Twenty CRM launched in 2023 and is actively developed with frequent releases. Breaking changes to the API or data model may occur between major versions (e.g., v1 to v2). We pin to the stable API version at migration time and document the Twenty version used. Customers running self-hosted instances should coordinate with their infrastructure team to ensure the running version matches the version used during migration design. Cloud-hosted Twenty instances receive automatic updates; we advise against migrating immediately after a major version release until any early-adoption issues are resolved.

Migration approach

Six steps for a successful Copper to Twenty CRM data migration

  1. Discovery and scoping

    We audit Copper across all active objects: People, Companies, Opportunities, Leads, Projects, Tasks, Activities, Custom Field Definitions, Tags, and attachment metadata. We count records by object, identify any contact counts approaching the destination plan's ceiling, and document the pipeline and stage structure. We also enumerate active Copper workflows, Zapier integrations, and bulk email sequences during discovery so that their rebuild scope is clear before migration begins. The discovery output is a written migration scope, a data volume summary, and a Twenty edition recommendation (Cloud Pro or Organization) based on SSO and row-level security needs.

  2. Twenty workspace preparation

    We create the Twenty workspace schema before any data import. This includes provisioning custom fields (mapped from Copper's Custom Field Definitions API), configuring pipelines and stages (with probability percentages from Copper), creating tags (from Copper's tag list), and setting up user accounts (matched by email to Copper Owners). If the customer runs a self-hosted Twenty instance, we coordinate with their infrastructure team to confirm the database connection and storage capacity before the migration begins.

  3. Attachment preparation and Google Drive file migration

    We extract attachment metadata from Copper (filename, Google Drive URL, associated record ID) and prepare the Google Drive file migration. The customer's team or infrastructure admin grants read access to the relevant Drive folders via a service account. We re-upload files to Twenty or configure re-link references, then verify attachment accessibility before closing the attachment phase. This step runs in parallel with record migration planning to avoid post-import surprises.

  4. Sandbox migration and reconciliation

    We run a full migration into Twenty's sandbox environment (or a staging copy for self-hosted deployments) using production-like record volume. The customer's lead admin reviews 25-50 records per object against the Copper source, checks that People-to-Company links are intact, that activity timelines are correctly sequenced, and that custom field values are readable. We correct any mapping errors before production migration begins. This step typically takes one to three days depending on record volume.

  5. Production migration in dependency order

    We run production migration in record dependency order: Companies (first, as they have no dependencies), People (with CompanyId resolved), Leads (as Persons with copper_lead_status tag), Opportunities (with pipeline and stage resolved, and OwnerId matched to User), Tasks (with OwnerId and related record resolved), Activities (emails, calls, meetings, notes via paginated API calls), then Custom Fields and Tags. Each phase emits a row-count reconciliation report before the next phase begins. Attachment re-linking runs after record migration is complete. Owner reconciliation (matching Copper Owners to Twenty Users by email) happens at the start of the People phase.

  6. Cutover, validation, and automation handoff

    We freeze Copper writes during cutover, run a final delta migration of any records modified during the migration window, then set Twenty as the system of record. We validate record counts, spot-check linked records (People-Company, Opportunity-Company, Activities-Person), and confirm attachment links are accessible. We deliver a written inventory of Copper workflows, Zapier integrations, and bulk email sequences for the customer's admin to rebuild in Twenty or through its supported integration layer. We support a five-business-day hypercare window for reconciliation issues. We do not rebuild Copper workflows or Zapier automations as part of the migration scope.

Platform deep dives

Context on both ends of the pair

Copper logo

Copper

Source

Strengths

  • Tight, native Google Workspace integration that embeds CRM functionality inside Gmail and Google Drive without context switching.
  • Per-seat pricing model with clear tier escalation and up to 26% annual billing discount provides cost predictability for small teams.
  • Automatic activity capture from email threads reduces manual data entry and keeps engagement history current without user discipline.
  • Clean, minimal interface that new team members can navigate without formal training or dedicated onboarding resources.
  • Custom fields are available across all main objects on all plans, allowing some degree of record customisation from Starter tier upward.

Weaknesses

  • Feature gating is aggressive: workflow automation, bulk email, custom reporting, and multi-currency are reserved for Professional and Business tiers, making the effective entry price higher than the $9 Starter headline.
  • API rate limit of 180 requests per minute constrains bulk data extraction during migration; large record sets require careful pagination and throttling.
  • Teams with complex sales motions or non-Google productivity stacks (Microsoft 365, for example) report Copper feels limited compared to broader CRM platforms.
  • AI-assisted features are minimal and tier-gated, which newer buyers expecting built-in intelligence may find underwhelming.
  • Contact limits on lower tiers (1,000 on Starter, 2,500 on Basic) can force an unexpected tier upgrade mid-growth.
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. 4 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 Copper and Twenty CRM.

  • Object compatibility

    C

    4 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

    Copper: 180 requests per minute on a rolling window, returning HTTP 429 when exceeded. Bulk endpoints have a separate ceiling of 3 requests per second..

  • Data volume sensitivity

    A

    Copper exposes a bulk API — large-volume migrations stream efficiently.

Estimator

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

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

Can't find your answer?

Walk through your Copper 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 three and five weeks for accounts under 10,000 People, 2,000 Opportunities, and 200,000 activity records. Migrations with larger activity histories, multiple pipelines, complex custom field structures, or Google Drive attachment re-linking extend to eight to fourteen weeks. Twenty's self-hosted option adds one to two weeks for infrastructure team coordination and staging validation before production migration begins.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Copper.
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