CRM migration
Field-level mapping, validation, and rollback between OneHash CRM and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
OneHash CRM
Source
Twenty CRM
Destination
Compatibility
8 of 10
objects map 1:1 between OneHash CRM and Twenty CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from OneHash CRM to Twenty CRM is a migration from a forked ERPNext platform with Indian-market pricing and ERP breadth to a developer-first, open-source CRM built on a clean data model. OneHash organizes business data around Leads, Contacts, Opportunities, Quotations, Sales Orders, and Invoices, with extensive DocType-level customization inherited from ERPNext. Twenty CRM exposes a REST API for import with documented migration guidance, but it lacks native sequencing, has a limited public API feature set, and does not ship with a bulk export utility. We handle the ERPNext DocType schema discovery pass before export, extract all custom field definitions from the affected DocTypes, resolve OneHash INR-denominated billing flags during scoping, and use Twenty's REST API with batch chunking and parent-record lookup to land records in the correct order. Workflows, automations, and ERP module data (Employees, Chart of Accounts, Projects) do not migrate; we deliver a written inventory of these for your admin to rebuild in Twenty's workflow builder.
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 OneHash CRM 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.
OneHash CRM
Contact
Twenty CRM
Person
1:1OneHash Contacts follow ERPNext DocType conventions with first_name, last_name, email, phone, and organization linkage. They map 1:1 to Twenty's Person object. The OneHash organization linkage (stored as customer_name reference) resolves to a Twenty Organization record that we create before Person import so the relationship is satisfied at insert time. Email deduplication applies if duplicate Person records share the same email address.
OneHash CRM
Lead
Twenty CRM
Lead
1:1OneHash Leads are a distinct DocType before conversion to Contact or Opportunity. We preserve the full lead history including source, status, and conversion log. The lead_status property maps to Twenty's Lead status field. Conversion metadata (converted_to_contact, converted_to_opportunity timestamps) migrates as custom fields on the Lead record if the customer requires the audit trail.
OneHash CRM
Opportunity
Twenty CRM
Opportunity
1:1OneHash Opportunities track deal stages within Pipelines. We migrate stage names, amounts, probability, and party information (contact and organization references). Pipeline stage ordering is preserved via a stage-sequence map applied at import. OneHash opportunity_amount, probability, and weighted_amount map to Twenty's amount, probabilityPercent, and a computed pipeline value respectively.
OneHash CRM
Quotation
Twenty CRM
Custom Object (Quote equivalent)
1:1OneHash Quotations carry line items linked to Items, with tax templates and terms. We map quotation line items to Twenty custom fields or a custom Quote object that we create in the destination schema. The quotation-to-opportunity linkage is preserved as a custom relationship field on the Opportunity. PDF attachments on Quotations migrate as file blobs linked to the parent record.
OneHash CRM
Sales Order
Twenty CRM
Custom Object (Order equivalent)
1:1OneHash Sales Orders reference both Customers and Items and carry delivery and billing status flags. Order item rows map field-by-field. Since OneHash allows custom Item fields that may not exist in Twenty's standard schema, we pre-create any required custom fields on the destination Order object before import. Delivery and billing status flags transfer as custom status fields.
OneHash CRM
Customer
Twenty CRM
Organization
1:1OneHash Customers are organization-level records linked to Contacts. We migrate the Customer record with its billing and shipping addresses and map the associated Contact relationship to Twenty's Person-Organization linkage. Organization domain from the Customer record maps to Twenty's domain field for enrichment compatibility.
OneHash CRM
Item
Twenty CRM
Custom Object (Product equivalent)
1:1OneHash Items include product and service definitions with pricing, stock data, and custom attributes. Since OneHash Items can carry extensive custom fields specific to the business, we map standard fields (name, item_code, description, standard_rate) to a Twenty custom Product object and preserve custom attributes as additional custom fields on that object. Stock quantity fields are mapped where Twenty's schema supports them.
OneHash CRM
Custom Fields (DocType-specific)
Twenty CRM
Custom Fields
lossyOneHash allows unlimited custom fields per DocType via ERPNext's Customize Form tool. These fields do not appear in standard API responses unless explicitly requested. We run a pre-migration discovery pass that introspects each DocType's custom field definitions via the API before mapping, ensuring no custom property is dropped during export. Custom field definitions are recreated in Twenty's schema before data import.
OneHash CRM
Attachments
Twenty CRM
Attachments
1:1Documents attached to any DocType migrate as binary blobs. We preserve the filename and linkage to the parent record. Large attachments may require chunked download and upload due to API payload limits. We verify attachment integrity via checksum before upload and flag any attachments exceeding Twenty's file size limits for manual handoff.
OneHash CRM
Employee
Twenty CRM
Not migrated (separate engagement)
lossyEmployee records include designation, department, and salary structure. This is an ERP module object, not a CRM core object. We do not migrate Employees as part of standard scope. We deliver a written record of all Employee DocType fields and their definitions for the customer's admin to assess whether a separate HR migration or manual entry is appropriate in Twenty or a dedicated HR tool.
| OneHash CRM | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Lead | Lead1:1 | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| Quotation | Custom Object (Quote equivalent)1:1 | Fully supported | |
| Sales Order | Custom Object (Order equivalent)1:1 | Fully supported | |
| Customer | Organization1:1 | Fully supported | |
| Item | Custom Object (Product equivalent)1:1 | Fully supported | |
| Custom Fields (DocType-specific) | Custom Fieldslossy | Fully supported | |
| Attachments | Attachments1:1 | Mapping required | |
| Employee | Not migrated (separate engagement)lossy | 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.
OneHash CRM gotchas
OneHash is a fork of ERPNext with Indian-market pricing
Annual billing is mandatory for paid plans above the free tier
No publicly documented API rate limits or bulk export endpoints
Custom Fields are DocType-specific and require schema discovery
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 source OneHash CRM portal across DocTypes, custom field definitions per DocType, pipeline count, active workflows, and record volume for each object. We pair this with a Twenty CRM workspace audit to confirm available API endpoints, custom object creation permissions, and any existing data that may create dedupe conflicts. The discovery output is a written migration scope that lists every DocType, every custom field, the target Twenty object mapping, and any DocType-level dependencies that require parent-record provisioning before import.
DocType schema discovery pass
We run a schema discovery pass against each OneHash DocType via the API, capturing the full field list including ERPNext-standard fields and DocType-specific custom fields. This pass surfaces Link fields (foreign-key references), Dynamic Link fields (polymorphic references), Table fields (child record arrays), and any custom fields added via the Customize Form tool. The output is a per-DocType field manifest used to design the Twenty import schema, including any custom fields that need pre-creation in Twenty before data import begins.
Twenty schema provisioning and sandbox validation
We pre-create any custom fields and custom objects required in Twenty's schema before any data import. This includes recreating OneHash custom fields on the equivalent Twenty objects, creating custom Quote and Order objects if quotation and sales order migration is in scope, and configuring any required picklist values or relationship fields. Schema is validated in a Twenty sandbox or test workspace before production migration begins. Any field type mismatches (OneHash currency vs Twenty number, OneHash Datetime vs Twenty date) are resolved here.
Parent-record import first
We run import in dependency order: Organizations (from OneHash Customers) are imported before Persons (from OneHash Contacts) so that Organization lookups are satisfied at Person insert time. Opportunities are imported after Organizations and Persons so that the party references resolve. Quotations and Sales Orders import last because they reference Opportunities and Items. Each phase emits a row-count reconciliation report before the next phase begins, and any records that fail import are held in a reconciliation queue for review.
Custom field and attachment migration
After core records are imported and reconciled, we migrate DocType-level custom field values by updating the custom field columns on each imported record. Attachments are migrated as file blobs linked to the parent record, with integrity verification via checksum. Large attachments exceeding Twenty's file size limits are flagged for manual handoff.
Cutover, validation, and workflow inventory handoff
We freeze OneHash writes during cutover, run a final delta migration of any records modified during the migration window, then enable Twenty CRM as the system of record. We deliver a written inventory of all active OneHash workflows and automations for the customer's admin to rebuild in Twenty's workflow builder. We support a one-week hypercare window where we resolve any reconciliation issues. We do not rebuild workflows as code inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
OneHash CRM
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 OneHash CRM 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
OneHash CRM: Not publicly documented — discovered dynamically during migration.
Data volume sensitivity
OneHash CRM 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 OneHash CRM to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your OneHash CRM 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 OneHash CRM
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.