CRM migration
Field-level mapping, validation, and rollback between OneHash CRM and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
OneHash CRM
Source
Salesforce Sales Cloud
Destination
Compatibility
9 of 12
objects map 1:1 between OneHash CRM and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
4-6 weeks
Overview
OneHash CRM is a fork of ERPNext, meaning its data model inherits ERPNext conventions — DocTypes for Leads, Contacts, Opportunities, Quotations, Sales Orders, Customers, and Items — rather than a proprietary CRM schema. When migrating to Salesforce Sales Cloud, the primary structural challenge is translating OneHash's single-object lead model and its many-to-one DocType relationships into Salesforce's Lead/Contact/Account/Opportunity hierarchy. We run a pre-migration discovery pass that introspects each DocType's custom field definitions via the OneHash API before mapping, because OneHash allows unlimited custom fields per DocType via ERPNext's Customize Form tool and these fields do not appear in standard API responses unless explicitly requested. Quotations carry line items with tax templates and party linkage that require Opportunity-level parent resolution before import. Salesforce's Bulk API 2.0 with chunking and exponential backoff handles the load; the OneHash REST API has no publicly documented rate limits, so we probe limits dynamically during extraction. Workflows, approval chains, and DocType-level automations do not migrate; we deliver a written inventory for the customer's admin to rebuild in Salesforce Flow.
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 Salesforce Sales Cloud, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
OneHash CRM
Lead
Salesforce Sales Cloud
Lead
1:1OneHash Lead DocType maps directly to Salesforce Lead. The Lead's status, source, and conversion log migrate as Salesforce Lead Status and custom fields. We preserve the OneHash lead creation date in a custom field for audit. Since OneHash does not have a separate Contact object at the unqualified-prospect level, all unconverted Leads land directly in Salesforce Lead without a split rule, unlike HubSpot which requires Contact-to-Lead reconciliation.
OneHash CRM
Contact
Salesforce Sales Cloud
Contact
1:1OneHash Contact records map to Salesforce Contact with first_name, last_name, email, and phone preserved. The Contact's organization linkage (linked Customer DocType) maps to Salesforce AccountId via the Customer-to-Account lookup. We run Customer import before Contact import to satisfy the AccountId foreign key at Contact insert time.
OneHash CRM
Customer
Salesforce Sales Cloud
Account
1:1OneHash Customer DocType (organization-level records) map to Salesforce Account. The Customer name becomes Account Name; billing and shipping addresses migrate to Account Address fields. Customer is created before Contact import so that AccountId is available at Contact insert. The Customer-territory or Customer-group field from OneHash maps to a custom Account field or Salesforce Territory if the customer uses territory management.
OneHash CRM
Opportunity
Salesforce Sales Cloud
Opportunity
1:1OneHash Opportunity DocType maps to Salesforce Opportunity. Stage names migrate to Salesforce StageName with probabilities mapped from OneHash stage_probability. The party linkage (Customer or Contact) resolves to AccountId and optionally ContactId. Pipeline stage ordering is preserved via a separate stage-sequence map applied at destination Salesforce configuration. If OneHash Opportunity tracks an amount in INR, we apply the customer's specified exchange rate at migration time.
OneHash CRM
Quotation
Salesforce Sales Cloud
Quote
1:1OneHash Quotation DocType maps to Salesforce Quote, which is available from Salesforce Sales Cloud Professional tier. Quotation line items migrate as QuoteLineItems referencing Product2 and PricebookEntry. The quotation-to-opportunity linkage (one quotation per Opportunity in OneHash) maps to Salesforce Quote's OpportunityId lookup. Tax templates from OneHash become Salesforce Quote Tax fields or custom Quote Line Item tax fields.
OneHash CRM
Sales Order
Salesforce Sales Cloud
Order
1:1OneHash Sales Order DocType maps to Salesforce Order, which requires the Salesforce Order Management add-on at additional cost. Line items migrate as OrderProducts referencing Product2. We flag this mapping during scoping because Salesforce Order is not included in all Sales Cloud editions. If the customer does not license Order Management, we map Sales Order fields to Opportunity custom fields and deliver a written note for the admin to evaluate the Order Management add-on.
OneHash CRM
Item
Salesforce Sales Cloud
Product2
1:1OneHash Item DocType maps to Salesforce Product2. Item fields including item_name, item_code, description, and standard_rate map to Product2 Name, ProductCode, Description, and a custom standard_rate__c field respectively. We create Standard Pricebook entries during migration so that PricebookEntry records exist before any Opportunity or Quote line items reference them.
OneHash CRM
Employee
Salesforce Sales Cloud
User
1:1OneHash Employee DocType records migrate to Salesforce User. We resolve by matching the Employee's email address against the Salesforce User table. Any Employee without a matching User goes to a reconciliation queue for the customer's admin to provision before record import resumes. Employee records carry designation, department, and compensation data that maps to Salesforce User fields and custom fields if the customer maintains org-chart information in Salesforce.
OneHash CRM
Project
Salesforce Sales Cloud
Project (Salesforce Shield or Custom Object)
lossyOneHash Project DocType maps to Salesforce Project only if the customer licenses Salesforce Shield (Field Audit Trail, Event Monitoring) or a Project Management Cloud add-on. Without one of these, we map Project to a custom Project__c object with Name, Status, StartDate, EndDate, and assigned team members as Contact lookups. The customer's admin decides during scoping which approach to take.
OneHash CRM
Custom Field (DocType-level)
Salesforce Sales Cloud
Custom Field (__c)
lossyOneHash custom fields per DocType (added via ERPNext's Customize Form tool) are discovered via a pre-migration introspection pass that queries each DocType's field definitions via the OneHash API. We capture field name, field type, and options list, then map each to a Salesforce custom field of equivalent type (Text, Number, Date, Picklist, Checkbox). Custom fields are deployed to the destination Salesforce org's schema via Metadata API before any data import begins.
OneHash CRM
Attachment
Salesforce Sales Cloud
ContentDocument / Attachment
1:1Documents attached to any OneHash DocType migrate as Salesforce Attachment records (for files under 25 MB) or ContentDocument records (for larger files via Salesforce Content). We preserve the file name, linkage to the parent record (by DocType-to-SObject mapping), and the original upload date as ActivityDate on the ContentVersion. Large attachments may require chunked download and re-upload due to API payload limits on both the source and destination.
OneHash CRM
Chart of Accounts
Salesforce Sales Cloud
Custom Object or Visual Import
lossyOneHash Chart of Accounts defines the financial structure and is typically required only if the customer also migrates ERP data (beyond CRM) or plans to integrate with a Salesforce Financial Services Cloud add-on. We map account names, types, and parent-child hierarchy to a custom GL_Account__c object. Account numbers are preserved in a custom field. If the customer does not require GL data in Salesforce, we export the Chart of Accounts as a CSV inventory for the customer's finance team to import manually.
| OneHash CRM | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Lead | Lead1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Customer | Account1:1 | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| Quotation | Quote1:1 | Fully supported | |
| Sales Order | Order1:1 | Fully supported | |
| Item | Product21:1 | Fully supported | |
| Employee | User1:1 | Fully supported | |
| Project | Project (Salesforce Shield or Custom Object)lossy | Fully supported | |
| Custom Field (DocType-level) | Custom Field (__c)lossy | Fully supported | |
| Attachment | ContentDocument / Attachment1:1 | Fully supported | |
| Chart of Accounts | Custom Object or Visual Importlossy | Mapping required |
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
Salesforce Sales Cloud gotchas
Workflow Rules and Process Builder are retired
Bulk API batch quota exhaustion during large imports
Storage overage billing is non-obvious
Account-Contact many-to-many relationship mapping
Territory and team member import ordering dependencies
Pair-specific challenges
Migration approach
Discovery and API key provisioning
We audit the OneHash CRM portal across all active DocTypes, custom field sets per DocType, record counts for Lead, Contact, Customer, Opportunity, Quotation, Sales Order, Item, Employee, and Project. We request a read-only API key from OneHash support with elevated limits if the dataset exceeds 10,000 records. We pair this with a Salesforce edition decision: Starter ($25/user) covers basic migrations; Professional ($80/user) is required for custom objects, Flow, and Quote; Enterprise ($165/user) is needed for record-triggered Flow at scale and advanced reporting types. The discovery output is a written migration scope with DocType inventory and Salesforce edition recommendation.
Schema discovery pass and custom field capture
We run the pre-migration discovery pass that introspects each OneHash DocType's field definitions via the API. For every DocType, we capture standard field names and all custom fields added via Customize Form. We map each custom field to a Salesforce custom field of equivalent type, deploy the schema to the destination Salesforce org via Metadata API, and validate that all custom fields appear in the Salesforce Setup UI before any data extraction begins. This pass is the highest-risk step for this pair because OneHash has no public schema registry.
Sandbox migration and reconciliation
We run a full migration into a Salesforce Sandbox (Full Copy or Partial Copy) using production-like data volume. The customer's RevOps or admin lead reconciles record counts across all DocTypes, spot-checks 25-50 random records against the OneHash source, and signs off the schema and mapping before production migration begins. Any mapping corrections, missed custom fields, or DocType relationship issues surface here. This step also validates that the AccountId foreign key is resolved before Contact insert, and that OpportunityId is resolved before Quote insert.
Owner and User provisioning reconciliation
We extract every distinct OneHash Employee and Owner email referenced across Lead, Contact, Opportunity, and Quotation records and match by email against the Salesforce destination org's User table. Any Employee without a matching Salesforce User goes to a reconciliation queue for the customer's admin to provision before record import resumes. Salesforce requires OwnerId references to be valid User IDs at record insert; skipping this step blocks the migration.
Production migration in dependency order
We run production migration in record-dependency order: Users (manual provisioning validated), Accounts (from OneHash Customer), Contacts (with AccountId resolved), Leads, Opportunities (with AccountId, OwnerId, and RecordTypeId resolved), Products and Pricebook entries, Quote line items (with OpportunityId resolved), Sales Orders (or custom fallback mapping), Employee records (to User), Custom Fields populated on all parent records, and Attachments (via ContentDocument upload). Each phase emits a row-count reconciliation report before the next phase begins. We use Salesforce Bulk API 2.0 with batch chunking and exponential backoff on API limit responses.
Cutover, validation, and automation rebuild handoff
We freeze OneHash writes during cutover, run a final delta migration of any records modified during the migration window, then enable Salesforce as the system of record. We deliver the DocType automation and approval-chain inventory document to the customer's admin team. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's team. We do not rebuild OneHash DocType-level workflows and approval rules as Salesforce Flow inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
OneHash CRM
Source
Strengths
Weaknesses
Salesforce Sales Cloud
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 Salesforce Sales Cloud.
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 Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your OneHash CRM to Salesforce Sales Cloud 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 Salesforce Sales Cloud
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.