CRM migration

Migrate from EZ Office to Twenty CRM

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

EZ Office logo

EZ Office

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

90%

9 of 10

objects map 1:1 between EZ Office and Twenty CRM.

Complexity

BStandard

Timeline

3–7 days

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

EZO and Twenty CRM occupy fundamentally different positions in the business software stack. EZO is an asset-intelligence and inventory-tracking platform built around physical assets, stock quantities, vendor relationships, and location-aware assignment workflows. Its core objects—Assets, Vendors, Locations, Members, and Inventory—track who owns what equipment and where it lives. Twenty CRM is a modern open-source CRM built on TypeScript and PostgreSQL that organizes data around People (contacts), Companies (accounts), and Opportunities (deals) with a relational model designed for sales and customer relationship workflows. The migration from EZO to Twenty CRM is therefore not a like-for-like platform swap but a data-model restructuring: asset records with assigned contacts become Twenty People linked to Companies; vendor records map to Company records with a vendor-type tag; stock quantities and locations require custom fields or Opportunity records depending on whether you're tracking product deals or service engagements. FlitStack AI extracts EZO data via its CSV export function for Assets, Vendors, Locations, Members, and custom reports, then transforms and loads that data into Twenty via the REST and GraphQL API (100 requests per minute on Pro, 200 per minute on Organization). The migration carries all standard fields, custom fields, and historical assignment data. It does not carry EZO workflows, maintenance schedules, or barcode-scanning logic—those require manual rebuild inside Twenty's workflow builder. Delta-pickup captures any records modified during cutover, and rollback is available if reconciliation reveals mapping gaps.

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

EZ Office logo

EZ Office

What's pushing teams away

  • Users report friction with the reporting module, finding certain reporting workflows complex or difficult to configure for their specific needs.
  • Barcode scanning has caused issues for some users — one reviewer specifically noted inconsistent scanner behavior that required outreach to support.
  • A small-business reviewer noted EZO could expand its network capabilities beyond medical practice use cases, suggesting the platform felt narrow for their industry needs.
  • Some users experience UI friction when navigating the platform, particularly on desktop workflows that feel less polished than the mobile experience.
  • As organizations scale, the per-seat model can become costly relative to flat-fee alternatives in the CMMS space.

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 EZ Office objects map to Twenty CRM

Each row shows how a EZ Office 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.

EZ Office

Member

maps to

Twenty CRM

People

1:1
Fully supported

EZO Members are the people who check out, use, and maintain assets. Each Member maps directly to a Twenty People record. Email, phone, and job-title fields translate 1:1. The Member's ID from EZO is stored as Source_System_ID__c on the Twenty People record for traceability. Members without email addresses are imported with a placeholder identifier and flagged for manual review.

EZ Office

Member (with active asset assignments)

maps to

Twenty CRM

People + Custom Junction Object

1:1
Fully supported

EZO allows a Member to be assigned multiple assets simultaneously. Twenty People records support a primary Company link via companyId but don't natively support multi-asset assignment lists. We create a custom 'AssetAssignment' junction object in Twenty linking People to the imported Asset records, preserving which assets a Member currently holds and historically held.

EZ Office

Vendor

maps to

Twenty CRM

Company

1:1
Fully supported

EZO Vendors are organizations that supply equipment, parts, or services. They map directly to Twenty Companies records. The vendor's name, website, contact information, and address fields map to the corresponding Twenty Company fields. We tag each vendor record with a custom 'Company_Type__c' field set to 'Vendor' so teams can filter vendor companies separately from customer accounts.

EZ Office

Location

maps to

Twenty CRM

Company

1:1
Fully supported

EZO Locations represent physical sites, rooms, or storage areas where assets are stored or deployed. In Twenty, which lacks a native Location object, we map Locations to Company records with a custom 'Location__c' boolean flag. The full hierarchical path (e.g., Building A → Floor 2 → Room 204) is preserved in a custom text field if EZO's 'Show hierarchical location in item listings' setting was enabled.

EZ Office

Asset

maps to

Twenty CRM

Custom Object (Asset) + Company Link

1:1
Fully supported

EZO Assets are the core data entity—serialized equipment, fleet items, or tracked inventory with lifecycle states (Available, Checked Out, In Maintenance, Retired). Twenty has no native Asset object. We create a custom 'Asset__c' object in Twenty with fields for name, serial number, asset tag, status, and purchase date. Each Asset links to a Company (the owning organization or the member who checked it out) via a relation field.

EZ Office

Asset Stock / Inventory

maps to

Twenty CRM

Custom Object (Inventory) + Opportunity

1:many
Fully supported

EZO inventory tracks stock quantities of consumable or serialized items. When inventory represents items for sale or service deals, we create Opportunity records in Twenty with the item name, quantity, and expected close date. For purely operational stock tracking (spare parts, supplies), we create a custom 'Inventory__c' object with quantity_on_hand and reorder_point fields. The split is determined by the inventory category set in EZO.

EZ Office

Asset Event / Custody History

maps to

Twenty CRM

Task

1:1
Fully supported

EZO records check-in/check-out events, custody transfers, and maintenance activities with timestamps and assigned user. Each event maps to a Twenty Task record linked to the relevant Asset__c and People records. The task subject captures the event type (e.g., 'Checked Out to John Smith'), and the task due date captures the event timestamp. This preserves the full operational audit trail on the asset record.

EZ Office

Document

maps to

Twenty CRM

Note + File Attachment

1:1
Fully supported

EZO documents attached to assets, vendors, or locations export via the 'export documents data' function. In Twenty, documents attach to the corresponding record (Asset__c, Company, or People) as Notes with a link to the file URL. If EZO documents are stored in Dropbox (a supported integration), we re-upload them to Twenty's file storage or a linked cloud location.

EZ Office

Custom Field (EZO)

maps to

Twenty CRM

Custom Field (Twenty)

1:1
Fully supported

EZO custom fields on Assets, Members, Vendors, and Locations are extracted during the CSV export. In Twenty, each custom field must be pre-created in Settings → Data Model with the matching field type (text, number, select, date, etc.). We deliver a custom field creation plan before migration runs so the Twenty schema is ready to receive the imported data without type-mismatch errors.

EZ Office

Report

maps to

Twenty CRM

Not Migrated

1:1
Fully supported

EZO Reports are pre-built or custom report definitions with filtering and grouping logic. Twenty has no equivalent report builder that preserves EZO's report structure. The underlying data (Assets, Vendors, Members) migrates, but EZO report definitions must be rebuilt in Twenty's views and filtering system. We provide a report-rebuild reference document mapping each EZO report to the corresponding Twenty view configuration.

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.

EZ Office logo

EZ Office gotchas

High

No public API — migrations use CSV export only

Medium

Document blob extraction is separate from asset records

Medium

Hierarchical location display requires a company setting to be enabled

Medium

Custom fields vary per account and require manual mapping

Low

EZO is a distinct product from Trimble EZ-Office (agriculture)

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

  • Twenty requires custom fields pre-created before import—EZO exports fields that don't yet exist

    EZO's CSV export includes both standard and custom fields on every object. Twenty's CSV import mechanism creates records, not fields: if a custom field exists in EZO but not yet in Twenty's data model, the import fails silently for that column or throws a validation error. The Twenty documentation explicitly warns that fields must exist before import. FlitStack AI delivers a custom field creation plan mapped from EZO's field definitions before any data moves, so the Twenty schema is ready to receive all exported columns. Without this planning step, migrations stall at the first custom field mismatch.

  • EZO's N:N asset-to-member assignments require a custom junction object in Twenty

    EZO allows a single asset to be checked out to multiple Members simultaneously and supports complex custody chains where an asset passes through several hands. Twenty's standard People record links to one primary Company via companyId with no native support for multi-asset assignment lists on a person record. FlitStack AI creates a custom AssetAssignment junction object in Twenty linking People to Asset__c records with a relationshipType pick-list (Current, Historical, Reserved). This preserves the full custody chain from EZO's assignment history without forcing you to collapse N:N relationships into a single primary assignment.

  • EZO workflows, maintenance schedules, and automation rules do not migrate to Twenty

    EZO's check-in/check-out workflows, reservation modules, barcode-triggered state changes, and maintenance scheduling are tied to asset lifecycle events specific to EZO's object model. Twenty's workflow builder handles day-to-day automation (triggering tasks, updating fields, sending notifications) but does not have a native equivalent to EZO's asset-state-state-change logic. Reddit threads and the Twenty community acknowledge that workflow parity with purpose-built asset-management tools requires manual rebuild. FlitStack AI exports EZO workflow definitions as a reference document for your Twenty admin to use when configuring the workflow builder.

  • Twenty's import order constraint forces EZO's flat export to be sequenced by foreign keys

    Twenty's documentation states that import order matters: Companies must be imported first (the 'one' side of relationships), then People (linked via companyId), then Opportunities (linked to both). EZO's CSV export produces flat files per object with foreign key references (e.g., asset records contain vendor_id and location_id). FlitStack AI re-sequences the migration load so that Location and Vendor CSV exports are transformed into Twenty Companies first, then the Member CSV is loaded as People, then the Asset CSV is transformed and loaded with resolved foreign keys. Skipping this sequencing step causes unmatched-foreign-key errors during import.

  • EZO's hierarchical location path may not display natively in Twenty's Company record

    EZO has a company setting 'Show hierarchical location in item listings' that prepends the parent location path to asset location names (e.g., Building A / Floor 2 / Room 204 / Rack 5). When exported, this full path appears as a single text string. Twenty's Company record has standard address fields (street, city, state, zip) but no hierarchical location field. If your EZO setup relies on nested location paths for operational routing, the hierarchy is flattened into a single text field (Location_Full_Path__c) on the Company record, and any filtering or grouping logic based on location hierarchy must be rebuilt using Twenty's view filtering and grouping features.

Migration approach

Six steps for a successful EZ Office to Twenty CRM data migration

  1. Audit EZO data and design Twenty schema

    FlitStack AI exports EZO's full data set via CSV—Assets, Vendors, Locations, Members, Inventory, and Asset Events—while simultaneously auditing custom field definitions from EZO's More → Customize → Custom Fields panel. We then design the Twenty data model: creating the Asset__c and Inventory__c custom objects, adding all custom fields to the standard People and Company objects, and configuring the AssetAssignment junction object with the relationshipType pick-list. The schema setup plan is delivered before any data moves so your Twenty workspace is field-ready at import time.

  2. Resolve foreign key relationships and sequence the load order

    EZO's flat CSV files contain foreign key references (vendor_id, location_id, assigned_to) that must resolve to Twenty record IDs before loading. FlitStack AI first loads Companies from both the Vendor and Location CSV exports, tagging each with its source type (Vendor or Location) and a Source_System_ID__c for traceability. Members are loaded next as People records. Finally, Assets are transformed by resolving vendor_id and location_id to the newly created Twenty Company records, and assigned_to to the matching Twenty People record by email. The import sequence is: Locations → Vendors → Members → Assets → Inventory → Asset Events.

  3. Migrate activity history and custody events as Tasks

    EZO's check-in/check-out events, custody verifications, and maintenance activities are exported as a chronological event log. FlitStack AI transforms each event into a Twenty Task record linked to the corresponding Asset__c and People records, preserving the original event timestamp, event type as the task subject, and the performing member as the task assignee. This creates a searchable audit trail inside Twenty that shows the full custody history of every asset.

  4. Run sample migration with field-level verification

    A representative slice of 100–500 records migrates first: a subset of Members, Companies, Assets, and events. We generate a field-level diff between the source CSV and the Twenty records, verifying that custom field values rendered correctly, foreign keys resolved to the right records, and asset status values mapped through the value-mapping table. You review the diff before the full run commits.

  5. Cut over with delta-pickup and rollback verification

    The full migration loads all remaining records into Twenty via the REST and GraphQL API, using batched CSV imports where record counts exceed API rate limits. A 24–48 hour delta-pickup window captures any EZO records created or modified during the cutover window—new check-outs, status changes, or added assets. FlitStack AI's audit log records every operation (insert, update, skip) for reconciliation. One-click rollback is available if field-level verification reveals mapping gaps that require schema adjustment before re-running.

Platform deep dives

Context on both ends of the pair

EZ Office logo

EZ Office

Source

Strengths

  • Mobile-first barcode and QR scanning for field asset tracking and custody verification.
  • Simple check-in/check-out workflow that creates auditable custody records automatically.
  • Per-seat pricing with a free trial period lowers initial commitment risk.
  • Cloud-based access from any device means no on-premise infrastructure required.
  • Custom fields and reports can be configured without developer assistance.

Weaknesses

  • Per-seat pricing model can become expensive as teams grow beyond 10–20 users.
  • Reporting module is cited as complex and unintuitive by multiple users.
  • No documented public API means migrations rely on CSV export rather than programmatic extraction.
  • Document attachments require separate export handling and are not embedded in asset record exports.
  • Limited multi-industry customization out of the box — some users feel the platform is narrow for non-medical use cases.
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. 2 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 EZ Office and Twenty CRM.

  • Object compatibility

    B

    2 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

    EZ Office: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your EZ Office 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 EZ Office to Twenty CRM data migrations

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

Can't find your answer?

Walk through your EZ Office to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most EZO-to-Twenty migrations complete in 3–7 days for setups under 25,000 records. The longest phase is schema preparation—creating the Asset__c and Inventory__c custom objects plus all EZO custom fields in Twenty's Settings → Data Model—followed by foreign-key resolution sequencing. Migrations exceeding 25,000 records or those with complex location hierarchies and multi-member asset assignments extend to 2–4 weeks. The EZO-to-Twenty import-order constraint (Companies → People → Assets) adds a sequencing step that doesn't exist in same-type CRM swaps.

Adjacent paths

Related migrations to explore

Ready when you are

Move from EZ Office.
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