CRM migration

Migrate from ZeyOS to Twenty CRM

Field-level mapping, validation, and rollback between ZeyOS and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.

ZeyOS logo

ZeyOS

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

50%

6 of 12

objects map 1:1 between ZeyOS and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

ZeyOS logo

ZeyOS

What's pushing teams away

  • Very limited public review presence (only 1 verified G2 review, sparse Capterra coverage) makes it hard for prospective customers to gauge long-term reliability.
  • Smaller vendor footprint compared to Odoo, NetSuite, or HubSpot raises concerns about long-term product support and roadmap stability.
  • Custom iXML scripting layer adds development overhead for teams that want standard integrations without writing custom code.

Choosing

Twenty CRM logo

Twenty CRM

What's pulling them in

  • Top open-source CRM on GitHub with 40.6K stars, giving teams full source code access and infrastructure ownership without per-feature licensing surprises.
  • Free self-hosting under AGPL-3.0 means unlimited users and custom objects for the cost of cloud infrastructure alone, typically $20–100/month.
  • Pricing page explicitly mocks competitors for charging add-on fees for API access, webhooks, and workflows — transparency that resonates with RevOps teams burned by Salesforce.
  • Unlimited custom objects and fields with no price impact, letting teams shape the data model to their business rather than forcing business into rigid schemas.
  • Modern TypeScript/React/PostgreSQL stack means developer-led teams can extend, self-host, or integrate without fighting legacy architecture.

Object mapping

How ZeyOS objects map to Twenty CRM

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

maps to

Twenty CRM

Company

1:1
Fully supported

ZeyOS 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

maps to

Twenty CRM

Person

1:1
Fully supported

ZeyOS 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

maps to

Twenty CRM

Person (Lead status)

lossy
Mapping required

ZeyOS 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

maps to

Twenty CRM

Standard Objects (custom) or Opportunity Line Items

1:many
Fully supported

ZeyOS 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

maps to

Twenty CRM

Opportunity + Tasks

1:many
Fully supported

ZeyOS 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

maps to

Twenty CRM

Task

1:1
Fully supported

ZeyOS 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

maps to

Twenty CRM

Task or Custom Object

lossy
Fully supported

ZeyOS 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

maps to

Twenty CRM

Opportunity (financial metadata)

lossy
Mapping required

ZeyOS'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

maps to

Twenty CRM

Workspace Users

1:1
Fully supported

ZeyOS 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)

maps to

Twenty CRM

Task, Event, Comment

1:1
Fully supported

ZeyOS 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

maps to

Twenty CRM

Attachments (on Company, Person, Opportunity, Task)

1:1
Fully supported

ZeyOS 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)

maps to

Twenty CRM

Custom Fields

lossy
Fully supported

ZeyOS 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.

Gotchas + challenges

What specifically takes care here

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 logo

ZeyOS gotchas

High

Audit-locked invoices block post-import edits

High

No documented bulk API forces iterative record-by-record migration

Medium

Unix epoch timestamps require explicit conversion

Medium

File attachments require binary blob download from REST API

Low

Token auth without OAuth limits automation scope

Twenty CRM logo

Twenty CRM gotchas

High

Import order is enforced and critical

High

Export limited to 20,000 records and visible columns only

Medium

Soft-deleted records count toward uniqueness and trigger restores

Medium

API rate limits cap at 200 req/min on Organization tier

Low

No native email sequences — follow-up cadences require external tools

Pair-specific challenges

  • ZeyOS invoices are immutable post-booking and must import in sequence

    ZeyOS marks invoices as immutable once booked — they cannot be edited or deleted via the API after that point. We sequence invoice imports in strict chronological order using the creationdate epoch timestamp and flag any out-of-sequence invoices for manual review before import. If an invoice with an earlier creationdate is attempted after a later one, the destination CRM may reject it or create a data-integrity issue. Customers must confirm their complete invoice chronology during scoping before we begin migration.

  • Twenty CRM has no native Quotes or Invoice object in the standard model

    Twenty CRM's standard data model covers Opportunities and Line Items but does not include a first-class Quotes or Invoice object. We migrate financial metadata from ZeyOS's Quotes, Orders, Deliveries, and Invoices as custom fields on the corresponding Opportunity record, and import PDF documents as file attachments. Any workflow logic in ZeyOS that triggers on invoice status changes must be rebuilt in Twenty manually by the customer's admin because no automation migration occurs.

  • No bulk API on ZeyOS forces iterative record-by-record extraction

    ZeyOS exposes only a REST API at cloud.zeyos.com/{INSTANCE}/api/v1/ with no documented bulk export or batch endpoint. We paginate through results and download records individually, which extends migration timelines for accounts with large record volumes. We implement exponential backoff on rate-limit responses and parallelize where the API permits. Large file blob downloads (binfile column) are the most time-intensive part of a ZeyOS extraction and may require a separate migration phase.

  • Twenty CRM's self-hosted migration process has known Docker startup issues

    GitHub issue #12936 documents a database migration failure when setting up a fresh Twenty v1.0 installation using Docker or Kubernetes. If the destination Twenty instance is self-hosted, we confirm the Docker or Kubernetes configuration before beginning the migration. We recommend using the officially supported Docker Compose setup or a validated k8s Helm chart and verify that the database migration step completes successfully before attempting any data import.

  • Unix epoch timestamps require explicit conversion to ISO 8601 at export

    ZeyOS stores creationdate and most timestamp columns as int8 Unix epoch values (seconds since 1970-01-01). We explicitly convert each epoch value to an ISO 8601 datetime string during the extract-transform phase. We validate that timestamp ranges fall within Twenty CRM's supported date range before import. Incorrect timestamp handling produces records with invalid dates in Twenty, which may silently fail or display incorrectly in the timeline view.

Migration approach

Six steps for a successful ZeyOS to Twenty CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

ZeyOS logo

ZeyOS

Source

Strengths

  • Unified platform combining CRM, ERP, and Groupware under a single subscription reduces tooling sprawl.
  • Free tier for up to five users enables teams to onboard and evaluate the platform without upfront cost.
  • Open PostgreSQL schema and REST API provide direct database access for migrations and integrations.
  • Audit-proof financial transactions (quotes, orders, invoices) satisfy compliance requirements for locked records.
  • Integrated inventory management with automated stock transactions on every delivery.

Weaknesses

  • Very limited public review presence reduces ability to gauge real-world customer satisfaction and longevity.
  • Smaller market footprint compared to Odoo, NetSuite, or HubSpot raises vendor risk concerns.
  • Custom iXML scripting language creates a learning curve for teams accustomed to standard integration approaches.
  • No documented bulk API means large migrations require iterative record-by-record API calls.
  • Pricing model is primarily per-user, which can become expensive as teams scale beyond 20-30 users.
Twenty CRM logo

Twenty CRM

Destination

Strengths

  • AGPL-3.0 open-source license with full source code on GitHub — no vendor lock-in, no sunset risk.
  • Unlimited users and unlimited custom objects on self-hosted, with no feature gating based on headcount.
  • REST and GraphQL APIs available on all paid tiers, not locked behind an enterprise add-on fee.
  • MCP server and webhooks shipped as standard features, not premium upgrades.
  • Modern PostgreSQL-backed data model that developer teams can query, extend, and self-host.

Weaknesses

  • Recent v1.0 release means limited production hardening compared to CRMs with multi-year operational track records.
  • No native email sequencing or sales engagement tools — follow-up cadences require a separate platform.
  • No native two-way email sync or inbox integration, requiring third-party connectors for full activity logging.
  • Self-hosting 'free' pricing hides real infrastructure and DevOps costs that stack up over time.
  • Workflow automation is functional but lacks the complexity needed for sophisticated multi-step sales motions.

Complexity grading

How hard is this migration?

Standard CRM migration. 3 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across ZeyOS and Twenty CRM.

  • Object compatibility

    B

    3 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    ZeyOS: Not publicly documented — we apply exponential backoff on 429/5xx responses and confirm tenant-specific limits during scoping.

  • Data volume sensitivity

    B

    ZeyOS doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your ZeyOS to Twenty CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about ZeyOS to Twenty CRM data migrations

Answers to the questions buyers ask most during ZeyOS to Twenty CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most migrations land between three and five weeks for accounts under 10,000 Contacts and 5,000 Accounts with no active financial pipeline records. Migrations with large file attachment libraries (over 2,000 binary blobs), active financial pipeline records requiring chronological sequencing, or extensive extdata custom field structures requiring per-field transformation logic move to six to ten weeks because of iterative API extraction and individual file blob handling.

Adjacent paths

Related migrations to explore

Ready when you are

Move from ZeyOS.
Land in Twenty CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day