CRM migration
Field-level mapping, validation, and rollback between ZeyOS and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
ZeyOS
Source
Twenty CRM
Destination
Compatibility
6 of 12
objects map 1:1 between ZeyOS and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from ZeyOS to Twenty CRM is a platform migration with three distinct technical challenges: ZeyOS exposes only a REST API at cloud.zeyos.com with no documented bulk endpoint, financial records (quotes, orders, deliveries, invoices) are immutable once booked and must import in chronological order, and ZeyOS stores timestamps as Unix int8 epoch values requiring explicit conversion to ISO 8601 datetime strings at export. We query ZeyOS iteratively, paginating through each object with token authentication, convert epoch values during the transform phase, and insert records into Twenty via its REST/GraphQL API. We do not migrate iXML scripts, ZeyOS automations, or workflows as code; we deliver a written inventory of these for the customer's admin to rebuild in Twenty's settings UI. File attachments stored as binary blobs in ZeyOS's files table are individually downloaded and re-uploaded to Twenty's attachment storage, with files exceeding 25MB flagged for customer review before 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 ZeyOS 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.
ZeyOS
Accounts
Twenty CRM
Company
1:1ZeyOS Accounts are the primary company-level records and map directly to Twenty CRM's Company object. We preserve the account ID, name, website, address fields, and any extdata custom fields. Twenty's Company object supports custom fields created via Settings → Data Model, and we map ZeyOS extdata key-value pairs into identically named Twenty custom fields using the same data types.
ZeyOS
Contacts
Twenty CRM
Person
1:1ZeyOS Contacts map to Twenty CRM's Person object with the name, email, phone, and address fields preserved. The parent Account relationship maps to a Company relation in Twenty's data model. Any extdata nickname or custom per-contact fields migrate as custom Person fields.
ZeyOS
Leads
Twenty CRM
Person (Lead status)
lossyZeyOS Leads are a distinct CRM object separate from Contacts. Twenty CRM does not have a separate Lead object; all person records live in the Person object. We import ZeyOS Leads as Person records and set a custom lead_status custom field to preserve the original ZeyOS lead stage (new, contacted, qualified, lost). The customer decides whether to merge these with existing Contact-sourced Person records during deduplication.
ZeyOS
Items
Twenty CRM
Standard Objects (custom) or Opportunity Line Items
1:manyZeyOS Items represent the inventory/product catalog with barcode, model, and custom fields. If Twenty is configured with a custom Product object via Settings → Data Model, we map Items 1:1 to that custom object. If no custom Product object exists, we map Items to Opportunity Line Items during Deal migration with the product name, SKU, and price preserved.
ZeyOS
Projects
Twenty CRM
Opportunity + Tasks
1:manyZeyOS Projects contain Tasks, subtasks, and time entries and map partially to Twenty CRM. We import the Project as a Twenty Opportunity (using the project name and estimated value) and import child Tasks as Twenty Task records linked to the Opportunity via the OpportunitiesAccount task relations. Time entries map as Task custom fields or notes. ZeyOS's native project management depth (Gantt, resource allocation) does not have a direct Twenty equivalent and requires admin review post-migration.
ZeyOS
Tasks
Twenty CRM
Task
1:1ZeyOS Tasks belonging to Projects map to Twenty CRM Task records. We preserve the task title, description, assignee (resolved to Twenty User by email), due date, and status. Tasks without a parent Project map as standalone Tasks. ZeyOS's custom workflow flags on Tasks migrate as custom Task fields in Twenty.
ZeyOS
Tickets
Twenty CRM
Task or Custom Object
lossyZeyOS Tickets with email integration and conversation history map to Twenty CRM as Task records (using the task title and subject) with email conversations preserved as notes or Task comments. If the customer has a significant ticket volume, we recommend configuring a custom Ticket object in Twenty via Settings → Data Model before migration and mapping Tickets 1:1 to that object.
ZeyOS
Quotes, Orders, Deliveries, Invoices
Twenty CRM
Opportunity (financial metadata)
lossyZeyOS's five financial objects (Quotes, Orders, Deliveries, Invoices) form a billing pipeline with audit-lock immutability on booked invoices. Twenty CRM does not have a first-class Quotes or Invoice object in the standard data model. We import financial metadata (amount, date, status, line items) as custom fields on the corresponding Opportunity record, and preserve the full financial chronology as a written audit log document for the customer's admin. Invoice PDFs are imported as file attachments on the Opportunity.
ZeyOS
Users
Twenty CRM
Workspace Users
1:1ZeyOS Users who own records map to Twenty CRM Workspace Users. We resolve by email match. Inactive ZeyOS Users are flagged for post-migration admin review before deactivation in Twenty. Owner assignment on Contacts, Accounts, and Opportunities migrates by resolving the ZeyOS user reference to the Twenty User ID.
ZeyOS
Activities (calls, emails, meetings, notes)
Twenty CRM
Task, Event, Comment
1:1ZeyOS Activities linked to Accounts or Contacts map to Twenty CRM Task records (for calls and tasks) and Event records (for meetings). Email body content migrates as a Task or Comment with the timestamp preserved. Note attachments migrate as file attachments on the related Company or Person record. Activity timestamps convert from ZeyOS int8 epoch to ISO 8601 datetime strings during the transform phase.
ZeyOS
Files / Documents
Twenty CRM
Attachments (on Company, Person, Opportunity, Task)
1:1ZeyOS files stored in the binfile column require binary blob download via the REST API individually. We download each blob, validate its MIME type and size (flagging files over 25MB for customer review), and re-upload to Twenty's attachment storage linked to the corresponding Company, Person, Opportunity, or Task record. Files with a record FK attach to the migrated parent record; files with a comment FK attach as notes.
ZeyOS
Custom Fields (extdata pattern)
Twenty CRM
Custom Fields
lossyZeyOS exposes custom field definitions via the fields table and the extdata JSON column in the REST API. We read every extdata key during discovery, infer the data type (string, number, date, boolean, picklist), and pre-create matching custom fields in Twenty's data model (Settings → Data Model) before the record migration phase. Custom fields are created per object (Company, Person, Task, Opportunity) and mapped individually during import.
| ZeyOS | Twenty CRM | Compatibility | |
|---|---|---|---|
| Accounts | Company1:1 | Fully supported | |
| Contacts | Person1:1 | Fully supported | |
| Leads | Person (Lead status)lossy | Mapping required | |
| Items | Standard Objects (custom) or Opportunity Line Items1:many | Fully supported | |
| Projects | Opportunity + Tasks1:many | Fully supported | |
| Tasks | Task1:1 | Fully supported | |
| Tickets | Task or Custom Objectlossy | Fully supported | |
| Quotes, Orders, Deliveries, Invoices | Opportunity (financial metadata)lossy | Mapping required | |
| Users | Workspace Users1:1 | Fully supported | |
| Activities (calls, emails, meetings, notes) | Task, Event, Comment1:1 | Fully supported | |
| Files / Documents | Attachments (on Company, Person, Opportunity, Task)1:1 | Fully supported | |
| Custom Fields (extdata pattern) | Custom Fieldslossy | 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.
ZeyOS gotchas
Audit-locked invoices block post-import edits
No documented bulk API forces iterative record-by-record migration
Unix epoch timestamps require explicit conversion
File attachments require binary blob download from REST API
Token auth without OAuth limits automation 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
Discovery and ZeyOS API inventory
We audit the source ZeyOS instance across all objects (Accounts, Contacts, Leads, Items, Projects, Tasks, Tickets, Contracts, Documents, Users, Quotes, Orders, Deliveries, Invoices, Activities) via the REST API. We capture record counts per object, identify custom extdata field definitions, inventory file attachment sizes, extract the financial pipeline chronology, and assess which ZeyOS iXML scripts and automations exist for the written inventory handoff. We also confirm the ZeyOS instance URL, API token validity, and any rate-limit responses during the discovery queries.
Twenty CRM workspace configuration
We configure the destination Twenty workspace: create custom fields (via Settings → Data Model) for each ZeyOS extdata field, configure a custom Product object if Items migration is required, set up any custom Ticket object if ticket volume warrants it, and define the Person record's lead_status custom field for imported ZeyOS Leads. If the customer uses self-hosted Twenty, we verify that the Docker or Kubernetes installation completes the database migration step successfully before proceeding.
Sandbox migration and reconciliation
We run a full migration into Twenty's target environment (self-hosted or SaaS) using a representative data sample. The customer reconciles record counts and spot-checks 25-50 random records against the ZeyOS source for field accuracy, timestamp correctness, and attachment integrity. Any mapping corrections for custom fields, object relationships, or file attachment linkage happen in this phase. We do not proceed to production migration until the customer signs off on the sandbox results.
Owner and user reconciliation
We extract every distinct ZeyOS User referenced on Accounts, Contacts, Projects, Tasks, and Activities and match by email against Twenty CRM's workspace user list. Any ZeyOS User without a matching Twenty workspace user goes to a reconciliation queue. The customer's Twenty admin provisions missing users before record import resumes. Owner assignment on migrated records depends on this resolution step completing first.
Production migration in dependency order
We run production migration in record-dependency order: Companies (from ZeyOS Accounts) first so that Company IDs are available for Person linking, then Persons (Contacts and Leads), then Opportunities (from Projects and Deals), then Tasks, then Activities (Tasks, Events, Comments), then file attachments (downloaded as binary blobs from ZeyOS and re-uploaded to Twenty), then financial metadata as Opportunity custom fields. Financial pipeline records (Quotes, Orders, Deliveries, Invoices) import in strict epoch timestamp order last. Each phase emits a row-count reconciliation report before the next begins.
Cutover, validation, and automation inventory handoff
We freeze ZeyOS writes during cutover, run a final delta migration of any records modified during the migration window, and enable Twenty as the system of record. We deliver the ZeyOS iXML script and automation inventory document to the customer's admin team with a written recommendation for rebuilding equivalent logic in Twenty's settings UI. We support a one-week hypercare window for reconciliation issues. We do not rebuild ZeyOS automations as Twenty workflow configurations inside the migration scope; that is a separate engagement.
Platform deep dives
ZeyOS
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 ZeyOS 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
ZeyOS: Not publicly documented — we apply exponential backoff on 429/5xx responses and confirm tenant-specific limits during scoping.
Data volume sensitivity
ZeyOS 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 ZeyOS to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your ZeyOS 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 ZeyOS
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.