CRM migration

Migrate from Teamwork CRM to Twenty CRM

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

Teamwork CRM logo

Teamwork CRM

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

67%

8 of 12

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

Complexity

BStandard

Timeline

1-3 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Teamwork CRM to Twenty CRM is a transition from a bundled, per-user SaaS platform to a self-hosted, open-source CRM with a flexible custom data model. Teamwork CRM organizes pipeline data around Leads and Opportunities as separate objects with configurable stages and probability weights; Twenty consolidates these into People (the Contact analog), Companies (the Account analog), and Opportunities (the Deal analog) within a workspace that supports custom objects and fields from Settings. We sequence Companies before Contacts before Deals to satisfy foreign-key constraints in Twenty's relational model, preserve every Pipeline and Stage as a named configuration in Twenty's Data Model, and thread Owner IDs by matching Teamwork user emails to Twenty workspace members before importing any owned records. Teamwork's per-user pricing (Pro at $15/user/month, Enterprise with custom pricing) gives way to Twenty's one-time infrastructure cost. Workflows, automations, and saved custom filters do not migrate; Twenty's own documentation explicitly states these must be recreated manually post-import.

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

Teamwork CRM logo

Teamwork CRM

What's pushing teams away

  • Multiple Capterra and G2 reviews report that users cannot attach emails or documents directly to Contact records, forcing activity logging to happen outside the CRM.
  • The platform lacks native Office 365 integration, which creates friction for teams embedded in the Microsoft ecosystem who rely on calendar and email sync.
  • Teams outgrowing the feature set cite missing capabilities: advanced forecasting, multi-object automation, and granular role-based permissions available in HubSpot or Salesforce.
  • Larger organizations report that the per-user pricing model becomes costly as the sales team scales, prompting evaluation of flat-rate or tiered alternatives.

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

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

Teamwork CRM

Company

maps to

Twenty CRM

Company

1:1
Fully supported

Teamwork CRM Companies map directly to Twenty Companies. Each Company can have multiple associated People records. We extract Company records first in every migration run to satisfy the foreign-key constraint when People are imported, because Twenty's Company object is the parent of People in the relational model. We preserve the company domain as the website field and use it as a dedupe key during import to catch duplicates that exist in Teamwork's list-view export.

Teamwork CRM

Contact

maps to

Twenty CRM

People

1:1
Fully supported

Teamwork CRM Contacts map to Twenty People records. The primary Company association is resolved to the Twenty Company record inserted in the previous phase, and the foreign key is set at import time. Standard Contact fields (name, email, phone, address) migrate 1:1. Custom Contact fields of type short text, integer, and dropdown map directly to equivalent Twenty field types created in Settings → Data Model before import. Contacts without a valid Company reference are held in a reconciliation queue and imported after the Company mapping is confirmed.

Teamwork CRM

Lead

maps to

Twenty CRM

People

1:1
Fully supported

Teamwork CRM Leads (early-stage prospects before qualification) map to Twenty People records. Teamwork allows separate Leads and Opportunities pipelines running simultaneously; we treat Lead records as People with a stage tag or custom field that captures the original Lead pipeline and stage so that the customer's admin can triage qualification after migration. Lead status and lead score migrate as custom fields on the People record.

Teamwork CRM

Opportunity

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Teamwork CRM Opportunities map to Twenty Opportunities. The Opportunity value, probability, close date, and pipeline assignment transfer directly. Stage names and stage probability weights are recreated as named stage values in Twenty's Opportunity configuration before import. The primary Contact or Company reference resolves to the Twenty record inserted in earlier phases.

Teamwork CRM

Pipeline

maps to

Twenty CRM

Pipeline (configuration)

lossy
Fully supported

Each Teamwork CRM Pipeline becomes a named Pipeline in Twenty's Opportunity settings. We extract the pipeline ID, name, and stage definitions (stage label, sort order, probability percentage) from Teamwork's list-view export and recreate them as Twenty Pipeline records before any Opportunity data is imported. Auto-prioritization flags and deprecated stages are flagged to the customer for manual cleanup in Twenty's UI post-migration.

Teamwork CRM

Pipeline Stage

maps to

Twenty CRM

Opportunity Stage (configuration)

lossy
Fully supported

Teamwork CRM Stages are configurable per Pipeline and support custom names, sort order, and probability values. We map stage IDs and labels to Twenty's stage model, preserving the probability percentage as the stage weight. If Teamwork uses deprecated stages with zero probability, we flag them as inactive in Twenty and reassign any Opportunity records currently sitting in those stages.

Teamwork CRM

Activity: Call

maps to

Twenty CRM

Task

1:1
Fully supported

Teamwork CRM call Activities map to Twenty Task records with call-type metadata preserved in custom fields. Call duration, call disposition, and any notes recorded in Teamwork transfer to Twenty's task body and custom fields. We preserve the original Teamwork timestamp as the task due date to maintain activity ordering in the timeline.

Teamwork CRM

Activity: Meeting

maps to

Twenty CRM

Task

1:1
Fully supported

Teamwork CRM meeting Activities map to Twenty Task records. Meeting title, description, start time, duration, and location transfer. Attendees from Teamwork's meeting record are stored as a custom multi-select field or note on the Twenty Task, because Twenty does not have a native EventAttendee model at migration time.

Teamwork CRM

Activity: Task

maps to

Twenty CRM

Task

1:1
Fully supported

Teamwork CRM task Activities map to Twenty Task records. Status (open/closed), priority, due date, and assignee transfer directly. The assignee resolves by matching the Teamwork owner email to the Twenty workspace member record provisioned during the Owner reconciliation phase.

Teamwork CRM

Custom Field

maps to

Twenty CRM

Custom Field

lossy
Fully supported

Teamwork CRM custom fields of type short text, integer, and dropdown migrate to Twenty custom fields of equivalent type created in Settings → Data Model before any data import. Multi-select, date, and boolean custom fields do not exist in Teamwork CRM natively (they require workarounds), so no direct migration path exists for those types. We document any workarounds the customer uses for unsupported field types and map them to the closest Twenty equivalent.

Teamwork CRM

User (Owner)

maps to

Twenty CRM

Workspace Member

1:1
Fully supported

Teamwork CRM Users who own records (Contacts, Companies, Opportunities) map to Twenty workspace members by email match. We extract all distinct owner IDs referenced on migrating records and reconcile them against the Twenty workspace members list. Any Teamwork owner without a matching Twenty member goes to a reconciliation queue; the customer's admin provisions the missing member before record import resumes. This is a prerequisite step because OwnerId references are required on standard Twenty objects.

Teamwork CRM

Tag

maps to

Twenty CRM

Tag

lossy
Fully supported

Teamwork CRM Tags (loose labeling on Contacts and Opportunities) transfer to Twenty Tags. If Twenty's workspace does not have an equivalent tag model, we map tags to a custom multi-select field on the target object. The customer selects the tag strategy during scoping. Tag names migrate 1:1; tag frequency and tag taxonomy are preserved.

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.

Teamwork CRM logo

Teamwork CRM gotchas

Medium

120 req/min API rate limit during extraction

Medium

CSV export only available in list view

Low

Known API bug with custom field value deletion

Low

Working hours absent for legacy user profiles

High

SSO unavailable on Pro tier

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 requires all fields created before CSV import

    Twenty's CSV import creates records, not fields. If a custom field does not exist in Settings → Data Model before import, the import silently ignores any column header that does not match an existing field name. Teamwork CRM exports include all active columns from the list view, which may contain custom fields. We always audit Twenty's Data Model configuration before import, create any missing custom fields, and verify field type compatibility (text to text, integer to number, dropdown to select) before running the production import. Skipping this step results in silent data loss for any unmapped column.

  • Workspace members must exist before owner references import

    Twenty's import requires that any user referenced as an owner or assignee on a record must exist as a workspace member before the import runs. Teamwork CRM extracts owner references as IDs (not email addresses) which we must resolve to email addresses via the Teamwork People API, then match against Twenty workspace members by email. If a Teamwork owner has no corresponding Twenty member, we hold those records and flag the email for the customer's admin to provision. Importing records with unresolved owner references will fail or create orphaned records in Twenty.

  • Twenty's workflow builder is in early development; automations must be rebuilt manually

    Teamwork CRM visual Workflows (property-triggered automation with delays and CRM actions) have no equivalent in Twenty's current workflow builder. A Reddit user evaluating Twenty for a sales cadence workflow noted the platform lacks native sequencing and that building simple manual-triggered flows requires workarounds or custom code. Twenty's own documentation explicitly states that Views, workflows, and permissions must be recreated manually after migration. We deliver a written inventory of every active Teamwork Workflow with its trigger, conditions, and actions. The customer's admin rebuilds them in Twenty's workflow builder or a third-party automation tool post-migration. This is a significant scope item for teams that rely heavily on Teamwork automation.

  • Teamwork CRM exports from list view only; board view data is not exportable

    Teamwork CRM's native export function only exposes data from list view. Board views and other layout modes do not support export. If a customer has customized their list columns or applied active filters, we capture that configuration before export to ensure field completeness. Teamwork's API lacks a formal bulk or batch import endpoint, so migration relies on CSV list-view exports with manual column selection. We always extract from list view and apply the customer's active column selection to match their intended scope.

  • File attachments on Contacts do not migrate; Teamwork does not support this natively

    Teamwork CRM does not support attaching files or email threads to Contact records — a documented gap that multiple G2 and Capterra reviewers cite as a friction point. Since Teamwork does not store these attachments as records in the first place, there is nothing to migrate. Files that the customer stores externally (Google Drive, SharePoint, email archives) must be re-associated with the migrated People records manually or through a separate document management integration post-migration.

Migration approach

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

  1. Discovery and scoping

    We audit the Teamwork CRM account across pipelines, stage definitions, owner list, contact and company volume, opportunity count, activity history depth, custom field inventory, and active workflow count. We pair this with a Twenty workspace readiness check: confirming that all required custom fields are created in Settings → Data Model, that workspace members are provisioned, and that the customer has decided on tag strategy. The discovery output is a written migration scope document with a record-count estimate, a list of fields to create in Twenty before import, and a pipeline and stage mapping table.

  2. Schema preparation in Twenty

    We create all custom fields required by the mapping in Twenty's Settings → Data Model before any data import. This includes custom fields for lead status, probability weights, owner email aliases, and any tag-as-field mappings. Pipelines and stage definitions are configured in Twenty's Opportunity settings, matching the Teamwork pipeline names and stage probabilities. We verify field existence by running a test import against a staging Twenty workspace before production migration begins.

  3. Owner reconciliation and member provisioning

    We extract every distinct owner referenced on Teamwork CRM Contact, Company, and Opportunity records, resolve them to email addresses via the Teamwork People API, and match against Twenty workspace members by email. Owners without a matching Twenty member go to a reconciliation queue. The customer's admin provisions any missing members and confirms acceptance before we proceed to record import. Migration cannot advance past this step because OwnerId references must be resolvable for all owned records.

  4. Test migration to staging workspace

    We run a full migration into a Twenty staging workspace using production-like data volume. The customer's team reconciles record counts, spot-checks 20-30 random records against the Teamwork source, and verifies that pipeline assignments, stage labels, and owner references are correct. Any mapping corrections, field creation gaps, or stage definition mismatches surface here. We do not proceed to production until the staging sign-off is received.

  5. Production migration in dependency order

    We run production migration in record-dependency order: Companies first (the parent object), then People (Contacts and Leads with CompanyId resolved), then Opportunities (with CompanyId and OwnerId resolved), then Tasks (calls, meetings, tasks with assignee resolved via member lookup). Each phase emits a row-count reconciliation report before the next phase begins. Custom fields are imported in the same CSV as their parent object; field creation must precede this step.

  6. Cutover, validation, and workflow rebuild handoff

    We freeze writes in Teamwork CRM during cutover, run a final delta migration of any records modified during the migration window, then hand over the Twenty workspace as the system of record. We deliver the workflow inventory document listing every active Teamwork Workflow with trigger, conditions, and actions, and we note that Twenty's workflow builder requires manual rebuild. We support a 48-hour hypercare window for critical reconciliation issues. We do not rebuild Teamwork Workflows in Twenty; that is a separate configuration engagement.

Platform deep dives

Context on both ends of the pair

Teamwork CRM logo

Teamwork CRM

Source

Strengths

  • Clean, visual pipeline interface with board and list views that sales teams adopt without dedicated training.
  • Configurable pipelines and stages are available on the standard Pro tier without feature gating.
  • Custom fields (text, number, dropdown) are available without requiring an Enterprise plan.
  • Strong bundling with Teamwork Projects and Desk creates a unified work stack for agencies and client-service firms.
  • Gmail add-on and Zapier integration provide basic email and automation connectivity on both pricing tiers.

Weaknesses

  • No native support for file or email attachments on Contact records — a frequently cited gap in G2 and Capterra reviews.
  • No Office 365 integration, limiting adoption in Microsoft-dominant enterprise environments.
  • Custom field types are restricted to short text, integer, and dropdown — multi-select, date, and boolean custom fields require workarounds.
  • Single sign-on (SSO) is gated behind the Enterprise tier, creating a security friction point for larger teams evaluating the platform.
  • API lacks a formal bulk or batch import endpoint; data migration relies on CSV list-view exports with manual column selection.
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. 3 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 Teamwork CRM and Twenty CRM.

  • Object compatibility

    B

    3 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

    Teamwork CRM: 120 requests per minute per organization.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your Teamwork 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 one and three weeks for accounts under 5,000 Contacts and 2,000 Deals with a single pipeline and no custom objects. Migrations with multiple pipelines, large engagement histories (over 50,000 activity records), or complex custom field schemas move to three to six weeks because of the manual field creation, stage recreation, and owner reconciliation work that Twenty's CSV-only import process requires. Twenty's staging workspace validation step adds roughly three to five business days to any timeline.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Teamwork 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