CRM migration
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
Source
Twenty CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Teamwork CRM and Twenty CRM.
Complexity
BStandard
Timeline
1-3 weeks
Overview
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.
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 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
Twenty CRM
Company
1:1Teamwork 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
Twenty CRM
People
1:1Teamwork 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
Twenty CRM
People
1:1Teamwork 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
Twenty CRM
Opportunity
1:1Teamwork 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
Twenty CRM
Pipeline (configuration)
lossyEach 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
Twenty CRM
Opportunity Stage (configuration)
lossyTeamwork 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
Twenty CRM
Task
1:1Teamwork 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
Twenty CRM
Task
1:1Teamwork 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
Twenty CRM
Task
1:1Teamwork 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
Twenty CRM
Custom Field
lossyTeamwork 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)
Twenty CRM
Workspace Member
1:1Teamwork 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
Twenty CRM
Tag
lossyTeamwork 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.
| Teamwork CRM | Twenty CRM | Compatibility | |
|---|---|---|---|
| Company | Company1:1 | Fully supported | |
| Contact | People1:1 | Fully supported | |
| Lead | People1:1 | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| Pipeline | Pipeline (configuration)lossy | Fully supported | |
| Pipeline Stage | Opportunity Stage (configuration)lossy | Fully supported | |
| Activity: Call | Task1:1 | Fully supported | |
| Activity: Meeting | Task1:1 | Fully supported | |
| Activity: Task | Task1:1 | Fully supported | |
| Custom Field | Custom Fieldlossy | Fully supported | |
| User (Owner) | Workspace Member1:1 | Fully supported | |
| Tag | Taglossy | 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.
Teamwork CRM gotchas
120 req/min API rate limit during extraction
CSV export only available in list view
Known API bug with custom field value deletion
Working hours absent for legacy user profiles
SSO unavailable on Pro tier
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
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.
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.
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.
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.
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.
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
Teamwork CRM
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 3 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 Teamwork CRM and Twenty CRM.
Object compatibility
3 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
Teamwork CRM: 120 requests per minute per organization.
Data volume sensitivity
Teamwork CRM 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 Teamwork CRM to Twenty CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Teamwork CRM
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.