CRM migration
Field-level mapping, validation, and rollback between Streak and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Streak
Source
Twenty CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Streak and Twenty CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Streak to Twenty CRM is a platform migration with a structural twist: Streak's core record is the Box, a CRM object embedded in a Gmail thread, while Twenty CRM uses a standard object model (Companies, People, Opportunities, Tasks) rooted in a standalone web interface. There is no direct email migration because Streak emails live in Gmail, not in Streak's database. We extract Box metadata, stage history, owner assignments, and contact associations, then reconstruct them as Twenty Opportunities linked to People and Companies. Mail merge campaigns and snippets do not migrate as functional objects; we deliver a written inventory of each campaign's recipient list and template content for manual or scripted reconstruction in Twenty. Custom Box properties discovered per pipeline are mapped to Twenty custom fields before any data import begins. Archived Streak users must be reactivated before their Boxes are accessible via the Streak API, and we flag this during the schema audit before migration starts.
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 Streak 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.
Streak
Box
Twenty CRM
Opportunity
1:1Streak Boxes map to Twenty Opportunities. The Box name becomes Opportunity name, stage history (pipeline name and stage name at time of record creation) is preserved in custom fields, and owner assignment maps via email match to a Twenty User. Box ID is stored in a custom field streak_box_id__c for audit and cross-reference. Custom Box properties discovered per pipeline during schema audit are created as Twenty custom fields on Opportunity before import.
Streak
Pipeline
Twenty CRM
Opportunity custom status field + Record Type
lossyStreak Pipelines define the workflow a Box moves through. In Twenty, we create a custom picklist field (e.g., pipeline_name) on Opportunity to preserve the pipeline label, and use Twenty's workspace-level stage configuration to recreate stage names in the same order. For migrations with multiple pipelines, each pipeline becomes a distinct status group or a separate Opportunity filter view.
Streak
Stage
Twenty CRM
Opportunity stage (Twenty workspace stage)
lossyStreak Stage names and order are extracted per Pipeline. We configure Twenty's opportunity stage field with stage names matching Streak's sequence. If Twenty has fewer default stages than Streak, we add custom stage values via the API and map the remaining Streak stages to a closest-match custom field.
Streak
Contact (Streak)
Twenty CRM
Person
1:1Streak Contacts (pulled from Gmail, stored alongside Boxes) map to Twenty Person records. Email address is the dedupe key. Name, company affiliation, and custom contact properties migrate. Gmail contact associations (which Gmail contacts are linked to a Box) are stored as a custom field on the Person record rather than as a live link since Gmail contacts do not exist in Twenty.
Streak
Company (Streak pipeline-level contact field)
Twenty CRM
Company
1:1Box-level company associations in Streak map to Twenty Company records. We extract company name from the Box's company field and create or match a Twenty Company. The Person record is then linked to the Company via the standard relationship.
Streak
Task
Twenty CRM
Task
1:1Streak Tasks are Box-level action items with assignees and due dates. They map directly to Twenty Tasks linked to the corresponding Opportunity. Streak tasks are flat with no subtasks or dependencies, which matches Twenty's task model. Due date, assignee (via email-to-User match), and task body migrate.
Streak
Tag
Twenty CRM
Custom multi-select field or text array
lossyStreak Tags are flat labels applied to Boxes. We export all tag names and associations. Tags with no associated Boxes are included as a label list for reference. In Twenty, we create a custom text or multi-select field on Opportunity to hold tag values, or document them as a filter-view definition for the customer's admin to implement.
Streak
Mail Merge Campaign
Twenty CRM
Written campaign inventory (no functional migration)
1:1Mail merge campaigns store recipient lists, templates, send history, and open/reply tracking. We extract campaign metadata (name, send date, recipient count, open rate, reply rate) and export the template content and recipient list. Open tracking metrics are Streak-specific and have no direct Twenty equivalent. We deliver a written campaign inventory with template body and recipient list for manual or scripted reconstruction using a third-party email tool integrated via Twenty's API.
Streak
Snippet
Twenty CRM
Written snippet inventory (no functional migration)
1:1Snippets are templated text blocks with merge variables used inside Gmail. We export snippet content and variable syntax as a written inventory. Merge variable naming conventions differ between Streak and any third-party replacement tool, so we document the original variable names alongside a recommended replacement syntax. Snippets do not function inside Twenty without a third-party email integration.
Streak
Custom Box Properties
Twenty CRM
Custom fields on Opportunity or Person
1:1Custom properties added to Boxes (dropdowns, text, dates, numbers, checkboxes) vary per pipeline. We discover the full property schema per pipeline during the schema audit phase, create matching custom fields in Twenty (with correct type mapping), then import property values as part of the Box-to-Opportunity migration. Properties that reference other Boxes are mapped to the corresponding Opportunity records.
Streak
Attachment (Gmail file reference)
Twenty CRM
Written file reference inventory
1:1File attachments inside Streak Box threads are stored by Gmail file ID. We export the file URL, filename, size, and attachment date as a written inventory. File content retrieval requires the source Gmail account to remain active and accessible; we document the file reference list and recommend the customer's admin validate and re-upload files to Twenty or a connected storage system post-migration.
Streak
Team Member / User
Twenty CRM
User
1:1Streak Users with email, name, role, and permissions level are mapped to Twenty Users by email. Shared pipeline access depends on Streak Pro tier or above; we verify each owner's plan tier during scoping. Any archived Streak users (Pro+ feature) are flagged in a separate reconciliation queue and must be reactivated before their Box records are accessible for export.
| Streak | Twenty CRM | Compatibility | |
|---|---|---|---|
| Box | Opportunity1:1 | Fully supported | |
| Pipeline | Opportunity custom status field + Record Typelossy | Fully supported | |
| Stage | Opportunity stage (Twenty workspace stage)lossy | Fully supported | |
| Contact (Streak) | Person1:1 | Fully supported | |
| Company (Streak pipeline-level contact field) | Company1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Tag | Custom multi-select field or text arraylossy | Fully supported | |
| Mail Merge Campaign | Written campaign inventory (no functional migration)1:1 | Fully supported | |
| Snippet | Written snippet inventory (no functional migration)1:1 | Fully supported | |
| Custom Box Properties | Custom fields on Opportunity or Person1:1 | Mapping required | |
| Attachment (Gmail file reference) | Written file reference inventory1:1 | Fully supported | |
| Team Member / User | User1:1 | 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.
Streak gotchas
Free CRM tier removal catches long-time users off guard
Gmail-only is a hard migration boundary
Enterprise-only roles and data validation require permission remapping
Archived user Boxes require reactivation before export
Mail merge daily send limits gate campaign data export
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
Schema audit and archived user detection
We extract the full Streak schema: every pipeline, stage, custom property (with type and dropdown options), contact record, and Box. We identify all archived users via the Streak API and document each archived user's email and Box count in a reactivation checklist. We verify which Streak plan tier the account is on (Pro, Pro+, Enterprise) because pipeline sharing, archived user access, and mail merge limits depend on the active tier. This phase produces a written migration scope, a Box count per pipeline, a custom property inventory, and the archived user reactivation checklist.
Destination schema creation in Twenty CRM
We create the Twenty destination schema before any data import. This includes creating custom fields on Opportunity and Person that match Streak's custom Box properties (with correct type mapping), configuring Opportunity stages to match Streak's pipeline stage names and order, and provisioning any missing Twenty Users by email match. If multiple Streak pipelines exist, we create a custom pipeline_name field on Opportunity and configure Twenty's workspace stage values to accommodate all stage names. We deploy schema changes via Twenty's REST API and verify field visibility in the Twenty UI before data import begins.
Archived user reactivation and Box extraction
The customer reactivates archived Streak users per our reactivation checklist. Once reactivated, we extract all Box records via the Streak API with rate-limit handling and exponential backoff. For each Box we extract: Box name, pipeline assignment, stage history (with timestamps), owner email, contact associations, tag list, custom property values, task list (with assignees and due dates), and Gmail thread ID. We run a parallel extraction of Streak Contacts and company associations to populate the Person and Company objects in Twenty.
Data transformation and opportunity creation
We transform extracted Box records into Twenty Opportunities. The Gmail thread ID is stored in a custom field (streak_thread_id__c) on the Opportunity record. Contact associations from Streak are resolved to Twenty Person records (created or matched by email). Company associations are resolved to Twenty Company records. Tags are mapped to a custom multi-select field or documented as a filter-view specification. Mail merge campaign metadata and snippet templates are exported to a written inventory JSON delivered alongside the migrated records.
Sandbox test migration and reconciliation
We run a full migration into a Twenty staging instance using production-like data volume. The customer reconciles record counts (Opportunities in, Persons in, Companies in, Tasks in), spot-checks 25-50 records against the Streak source, and verifies that custom field values, stage assignments, and owner links are correct. Any mapping corrections (incorrect field type, missed custom property, stage name mismatch) are adjusted in the transform logic before the production migration begins.
Production migration and cutover handoff
We run the production migration in dependency order: Companies first, then Persons linked to Companies, then Opportunities linked to Persons and Companies, then Tasks linked to Opportunities. We deliver the written mail merge campaign inventory, snippet template inventory, and file reference inventory as separate JSON exports. We freeze Streak writes during cutover and run a final delta migration of any records modified during the migration window. We deliver a post-migration reconciliation report and a written automation and workflow inventory for the customer's admin to rebuild in Twenty or via a third-party integration. We do not rebuild Streak automations as Twenty automations inside the migration scope.
Platform deep dives
Streak
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 Streak and Twenty CRM.
Object compatibility
1 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
Streak: Not publicly documented in Streak's API docs.
Data volume sensitivity
Streak exposes a bulk API — large-volume migrations stream efficiently.
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 Streak to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Streak 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 Streak
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.