CRM migration
Field-level mapping, validation, and rollback between CentralStationCRM and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
CentralStationCRM
Source
Twenty CRM
Destination
Compatibility
7 of 10
objects map 1:1 between CentralStationCRM and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from CentralStationCRM to Twenty CRM is a structural migration for teams that have outgrown a simplicity-first CRM but want to retain self-hosted data ownership. CentralStationCRM stores People, Companies, Deals, Leads, and Activities across REST endpoints with a flat tag vocabulary; Twenty CRM receives these as Companies, People, Opportunities, and Tasks or Notes via CSV import or API. The primary migration complexity is CentralStationCRM's per-tenant custom field schema (each account defines its own fields with no fixed API name) and its 50 req/10s rate limit, which requires request throttling and Retry-After handling during export. Twenty requires all custom fields and custom objects to exist in the workspace before import begins, which we resolve in the scoping phase. Workflows, automations, and email templates from CentralStationCRM do not migrate; we deliver a written inventory of every active configuration for the customer's admin to rebuild in Twenty's settings.
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 CentralStationCRM 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.
CentralStationCRM
People
Twenty CRM
Person (People)
1:1CentralStationCRM People records map to Twenty Person objects. We export via GET /api/people.json and map firstname, lastname, email, phone, website, and job_title to their Twenty Person field equivalents. The responsible_user_id field resolves to a Twenty User record via email match. Addresses are not embedded in the Person record — we traverse GET /api/people/{id}/addrs.json per contact to capture all address rows and write them to the Person's address fields or as a separate Address relation in Twenty.
CentralStationCRM
Company
Twenty CRM
Company
1:1CentralStationCRM Company records map directly to Twenty Company. We export via GET /api/companies.json, map name, domain, phone, and industry fields, and create the Company in Twenty before any Person import so that the Person-to-Company relationship is satisfied at the moment of Person insert. If CentralStationCRM stores a billing or shipping address on the Company record, we write it to Twenty's address fields.
CentralStationCRM
Deal
Twenty CRM
Opportunity
1:1CentralStationCRM Deals map to Twenty Opportunity. We export via GET /api/deals.json and map deal name, value (amount), stage, and close date. The assignee maps via responsible_user_id email resolution to the Twenty User. Deal stage labels from CentralStationCRM map to the Twenty pipeline stage values, and we flag any custom stage names requiring configuration in Twenty's pipeline settings before import.
CentralStationCRM
Lead
Twenty CRM
Lead
1:1CentralStationCRM Leads are pre-contact prospects distinct from Deals. We export via GET /api/leads.json and map lead name, email, phone, source, status, and assignee. The mapping preserves any CentralStationCRM lead score as a custom field in Twenty. If Twenty does not have a Lead object in the workspace at migration time (it must be enabled in settings), we map Leads to Twenty Person records and flag the object for confirmation during scoping.
CentralStationCRM
Activity
Twenty CRM
Task or Note
1:manyCentralStationCRM Activities (calls, meetings, notes) are attached to People or Companies via nested routes (GET /api/people/{id}/activities.json). We traverse all activity routes per parent record and map call activities to Twenty Task records with Task subtype = Call, meeting activities to Event-like Task records, and notes to Twenty Note records. Activity timestamps are preserved as ActivityDate so the chronological timeline is intact in Twenty.
CentralStationCRM
Offer
Twenty CRM
Opportunity (quote context)
1:1CentralStationCRM Offers are standalone quote-like objects linked to People or Companies with line items and totals. We export via GET /api/offers.json, map offer name, total amount, status, and line items to Opportunity custom fields or a linked Note that captures the offer body. If Twenty has a Quote or Custom Object configured for quote tracking, we map to that object and preserve line item detail in structured fields.
CentralStationCRM
Task
Twenty CRM
Task
1:1CentralStationCRM Tasks are standalone task records attached to People or Deals. We export task title, due date, status, and assignee (responsible_user_id resolved via email match). Completion state migrates as a status field; we do not hard-delete completed tasks. Tasks are written after the parent Person or Opportunity is created in Twenty to satisfy the relationship reference.
CentralStationCRM
Tag
Twenty CRM
Tag
lossyCentralStationCRM tags are flat key-value labels applied to People, Companies, Deals, and Offers. We export all tag assignments per record and apply the same tag set in Twenty, handling the vocabulary as-is. If tag counts exceed Twenty's tag field capacity, we map high-frequency tags to multi-select picklist custom fields and document the strategy during scoping.
CentralStationCRM
Custom Field (per-tenant)
Twenty CRM
Custom Field
lossyEach CentralStationCRM tenant defines their own custom fields with no fixed schema across accounts. We discover all custom fields during scoping (visible via the API response payload for each object) and map them explicitly to Twenty custom fields. Twenty requires custom fields to exist in Settings → Data Model before CSV import or API write. We coordinate with the customer to create matching custom field definitions in Twenty before migration begins.
CentralStationCRM
Address (child of People)
Twenty CRM
Address (on Person)
1:1CentralStationCRM addresses exist as 1-n children of People, accessible only via GET /api/people/{id}/addrs.json. We traverse each nested address route during export so that every address row is captured. In Twenty, address fields live on the Person record. If a Person has multiple addresses (billing, shipping), we write the primary to the Person address fields and store secondary addresses as structured data in a custom field or linked Note.
| CentralStationCRM | Twenty CRM | Compatibility | |
|---|---|---|---|
| People | Person (People)1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Lead | Lead1:1 | Fully supported | |
| Activity | Task or Note1:many | Fully supported | |
| Offer | Opportunity (quote context)1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Tag | Taglossy | Fully supported | |
| Custom Field (per-tenant) | Custom Fieldlossy | Fully supported | |
| Address (child of People) | Address (on Person)1: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.
CentralStationCRM gotchas
50 req/10s rate limit causes 429 errors on fast exports
Nested routes required for child object exports
No OAuth — API key only with header authentication
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 schema audit
We audit the CentralStationCRM account via API across all object types (People, Companies, Deals, Leads, Activities, Offers, Tasks, Tags) and capture the per-tenant custom field definitions by inspecting full API response payloads for each object. We count records per object, identify the responsible_user_id references that map to Twenty Users, assess the activity history volume, and inventory any active workflows or email templates. The discovery output is a written migration scope confirming object counts, custom field definitions, owner resolution plan, and a preliminary timeline.
Twenty workspace preparation
We create all custom field definitions in Twenty's Settings → Data Model before any data import begins. Custom fields must exist in Twenty before import writes to them. We create custom field types matched to the CentralStationCRM data (text, number, date, select, multi-select) and invite all team members to Twenty so that OwnerId and assignee references resolve during migration. Any CentralStationCRM workflow or automation triggers are documented for the rebuild inventory.
Sandbox validation and mapping review
We run a full migration into Twenty using representative data volume. The customer reconciles record counts, spot-checks 20-30 records against the CentralStationCRM source (correct field values, relationship integrity, tag assignments), and approves the mapping before production migration begins. Any field-level corrections, custom field additions, or relationship fixes happen at this stage. We do not proceed to production without a signed mapping approval.
Company and Person migration
We export Companies from CentralStationCRM via GET /api/companies.json, write them to Twenty Company records, then export People via GET /api/people.json. For each Person, we traverse the nested address route (GET /api/people/{id}/addrs.json) and write addresses to the Person record or structured address fields. We resolve responsible_user_id to a Twenty User via email match. Tags and custom field values migrate as-is per the field mapping approved in scoping.
Deal, Lead, Offer, and Task migration
We export Deals via GET /api/deals.json, map stage labels to Twenty pipeline stages, resolve assignee via email match, and write Opportunities. Leads export via GET /api/leads.json and map to Twenty Lead records. Offers export via GET /api/offers.json and map to Opportunity quote context. Tasks export and write with parent Person or Deal references resolved from the existing record set. Each phase emits a row-count reconciliation report before the next begins.
Activity history migration
We traverse all nested activity routes per Person record (GET /api/people/{id}/activities.json) and write Activities as Task or Note records in Twenty, preserving original timestamps and linking to the parent Person. Call activities write as Tasks with call subtype; meetings as Tasks with meeting context; notes as Note records. Activity volumes can reach tens of thousands per account; we throttle writes to respect any destination API limits and emit a completion report per activity type.
Cutover, validation, and automation inventory delivery
We freeze writes in CentralStationCRM during cutover, run a final delta migration of any records modified during the migration window, then mark Twenty as the system of record. We deliver the automation and workflow inventory document to the customer's admin team for manual rebuild in Twenty. We support a 5-business-day hypercare window for reconciliation issues. We do not rebuild CentralStationCRM workflows inside the migration scope; that is separate work for the customer's admin.
Platform deep dives
CentralStationCRM
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 CentralStationCRM 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
CentralStationCRM: 50 requests within 10 seconds; returns HTTP 429 with Retry-After header when exceeded.
Data volume sensitivity
CentralStationCRM 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 CentralStationCRM to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your CentralStationCRM 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 CentralStationCRM
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.