CRM migration
Field-level mapping, validation, and rollback between TeamWave and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
TeamWave
Source
Twenty CRM
Destination
Compatibility
6 of 11
objects map 1:1 between TeamWave and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from TeamWave to Twenty CRM is a structured extraction-and-reload migration because TeamWave has no documented public API. We pull data via CSV exports from the TeamWave web interface, reconstruct the relationship graph between People, Companies, and Opportunities using embedded foreign keys, and load records into Twenty through its CSV import interface in dependency order. Twenty's People object carries name, email, job title, phone, and address fields; Company holds organization name, domain, and industry; Opportunity tracks deal name, amount, stage, close date, and owner. The TeamWave HR module (employee profiles, departments, org structure) migrates as People records with custom fields because Twenty has no native HR object. Workflows, Project tasks, and Calendar Events do not migrate as automation code; we deliver a written handoff inventory for the customer's admin to rebuild in Twenty's workspace configuration.
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 TeamWave 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.
TeamWave
Contact
Twenty CRM
People
1:1TeamWave Contact records map to Twenty People. The mapping preserves name, email, phone, job title, and lifecycle stage as standard Twenty fields. Any TeamWave custom fields on Contact migrate as Twenty custom fields created under Settings → Data Model before import. We extract the contact's linked company_id from the TeamWave CSV and use it to resolve the Company-to-People relationship during the Twenty import phase.
TeamWave
Company
Twenty CRM
Company
1:1TeamWave Company records map directly to Twenty Company. The company domain, address, and industry fields transfer as standard Twenty fields. Company records import before People records because the People CSV references a companyId foreign key. We cross-reference the TeamWave company_id to build the correct Twenty Company ID mapping for the People import.
TeamWave
Deal
Twenty CRM
Opportunity
1:1TeamWave Deal records map to Twenty Opportunity. We transfer deal name, amount, stage, expected close date, owner, and deal value. The TeamWave dealstage maps to Twenty's opportunityStage field. If the customer has configured custom deal stages in TeamWave, we create matching stage values in Twenty Settings → Data Model before migration. Closed-won and closed-lost values transfer as-is; any custom deal fields become Twenty custom fields.
TeamWave
Deal Stage
Twenty CRM
Opportunity Stage
lossyEach distinct stage value from TeamWave's deal pipeline must exist in Twenty's opportunityStage picklist before the Opportunity CSV is imported. We read the stage set from the Deal export, create the corresponding picklist values in Twenty, and configure probabilities per stage. TeamWave pipeline names do not have a direct Twenty equivalent; we map them to Twenty's Opportunity stage labels and document the pipeline-to-stage correspondence in the mapping spec.
TeamWave
Project
Twenty CRM
Custom Object (Project)
1:1TeamWave Project records carry name, description, status, client association, and start/end dates. Since Twenty has no native Project object, we create a custom object named Project in Settings → Data Model with fields for name, description, status, client (linked to Company), startDate, and endDate. Projects are imported after Companies and before Tasks to satisfy the client lookup.
TeamWave
Task
Twenty CRM
Task
1:1TeamWave Tasks linked to Projects or Contacts map to Twenty Task records. We flatten the project-task hierarchy by creating Twenty Task records with the projectId resolved to the custom Project object created in Twenty. Task fields mapping: assignee maps to Twenty Task assignee (resolved via User lookup), dueDate maps to dueDate, status maps to status, and priority maps to priority. Standalone Tasks without a project link import with no WhatId.
TeamWave
User / Team Member
Twenty CRM
Member
1:1TeamWave Users map to Twenty Members. We extract name, email, role, and department from the TeamWave Users export. Members must exist in Twenty before importing Opportunities and Tasks because ownerId and assignee references require a valid Twenty Member record. We run the Members import as a validation step before proceeding to record imports that carry ownership.
TeamWave
Calendar Event
Twenty CRM
Task (with date)
1:manyTeamWave Calendar Events carry event title, date/time, linked entity type (Deal, Project, or Contact), and attendees. Twenty has no native Event object, so we convert Calendar Events to Twenty Tasks with the activity date set to the original event start time and the title preserved. Attendee information is noted as a text custom field on the migrated Task record because Twenty's Task object does not support multi-contact attendee lists.
TeamWave
HR Record / Employee
Twenty CRM
People (custom fields)
1:manyTeamWave HR module employee profiles (name, role, department, employee_id, hire_date) have no native Twenty equivalent. We map them to Twenty People records with custom fields added for department, role, and employee_id. If the customer uses TeamWave's org structure, we create a custom Department field and populate it from the HR export. Employee records are imported alongside customer People records; a boolean custom field employee_flag__c distinguishes employee records from customer contact records.
TeamWave
Custom Fields
Twenty CRM
Custom Fields
lossyTeamWave custom fields on Contacts, Deals, Projects, and Tasks are exported with their data types and values. We create matching custom fields in Twenty under Settings → Data Model before importing each object type. Text fields map to Twenty text, date fields to date, numeric fields to number, and select fields to select. Custom field creation must complete before the associated object CSV is imported because Twenty's CSV import creates records, not fields.
TeamWave
Attachment metadata
Twenty CRM
Attachment manifest (re-upload required)
lossyTeamWave provides no bulk attachment download mechanism. We snapshot attachment metadata (filename, size, linked object type, and TeamWave record ID) into a manifest CSV. The customer uses the manifest to manually re-upload attachments to the correct Twenty record after migration. Binary attachments themselves do not transfer through the migration pipeline.
| TeamWave | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | People1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Deal Stage | Opportunity Stagelossy | Fully supported | |
| Project | Custom Object (Project)1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| User / Team Member | Member1:1 | Fully supported | |
| Calendar Event | Task (with date)1:many | Fully supported | |
| HR Record / Employee | People (custom fields)1:many | Fully supported | |
| Custom Fields | Custom Fieldslossy | Mapping required | |
| Attachment metadata | Attachment manifest (re-upload required)lossy | 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.
TeamWave gotchas
No publicly documented API endpoint surface
Attachment export requires manual re-upload
Free tier enforces feature caps that affect migration scope
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
Scoping and data audit
We audit the TeamWave workspace for record counts across People (Contacts), Companies, Opportunities (Deals), Tasks, Projects, Calendar Events, HR records, and any custom fields. We identify the export paths available in the web UI, flag any TeamWave Basic tier export caps, and confirm the customer's TeamWave plan. The scoping output is a written migration scope document listing record counts per object, custom field inventory, and any known data quality issues (duplicate contacts, stale records, missing fields) to address before export.
Twenty workspace preparation
Before exporting from TeamWave, we set up the Twenty destination workspace. This includes creating custom objects (Projects, if used), adding custom fields to People, Company, and Opportunity objects under Settings → Data Model, and inviting all team Members so that ownership lookups resolve during import. We configure the opportunityStage picklist values to match the stage names from the TeamWave Deal export. This step must complete before any CSV import begins.
TeamWave CSV extraction
We export data from TeamWave via the web interface in dependency order: Companies first, then People, then Opportunities, then Tasks, Projects, Calendar Events, and HR records. Each export is saved as a separate CSV file. For customers with large datasets, we script repeated UI exports to work around batch limits and merge the results. We preserve foreign key IDs from TeamWave exports to reconstruct the Company-to-People and Opportunity-to-People relationships during the transform phase.
Data transformation and relationship resolution
We transform each TeamWave CSV into Twenty-compatible import format. The critical step is resolving TeamWave company_id and owner_id references to the corresponding Twenty Company IDs and Member IDs generated during import. We build a cross-reference table mapping TeamWave record IDs to their new Twenty IDs as each object type imports, and apply this table to subsequent imports. Custom field values are type-checked and reformatted (phone numbers, dates) to match Twenty's validation rules.
Twenty CSV import in dependency order
We import into Twenty in the sequence that satisfies foreign-key constraints: Companies first (no dependencies), Members next (for owner resolution), People (with companyId resolved), Opportunities (with ownerId and companyId resolved), Tasks (with assignee and projectId resolved), Calendar Events converted to Tasks, and HR records as People with employee_flag__c set. Each phase emits a row-count reconciliation report. We re-import in full rather than delta-loading to avoid partial record states.
Cutover, validation, and automation handoff
We freeze writes in TeamWave during cutover, run a final delta export for any records modified during the migration window, apply the delta to Twenty, then confirm the system of record switches to Twenty. We deliver a written inventory of TeamWave Workflows, Project configurations, and HR module settings requiring manual rebuild in Twenty. We support a five-business-day post-cutover window for reconciliation issues. Workflow rebuild and any post-migration configuration work outside record migration is outside standard scope and would be a separate engagement.
Platform deep dives
TeamWave
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 TeamWave and Twenty CRM.
Object compatibility
2 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
TeamWave: Not publicly documented.
Data volume sensitivity
TeamWave 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 TeamWave to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your TeamWave 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 TeamWave
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.