CRM migration
Field-level mapping, validation, and rollback between openCRX and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
openCRX
Source
Freshsales
Destination
Compatibility
8 of 10
objects map 1:1 between openCRX and Freshsales.
Complexity
BStandard
Timeline
2-4 weeks
Overview
openCRX and Freshsales occupy opposite ends of the CRM spectrum. openCRX is a self-hosted, enterprise-class open-source platform built on J2EE with a deep UML-modelled data hierarchy spanning Opportunities, Quotes, Sales Orders, and Invoices as subclasses of abstract contract classes. Freshsales is a cloud-native SaaS CRM from Freshworks (NASDAQ: FRSH) that uses a simpler four-object model: Contacts, Accounts, Deals, and Leads, with Freddy AI for scoring and insights. The migration is not a record copy — it requires flattening the openCRX contract hierarchy into Freshsales Deals, computing the Account-Contact parent relationship during scoping, and mapping the DataBinding PropertySet custom field definitions to Freshsales custom fields on the correct module. We handle direct database export from openCRX (no public REST API exists), route attachment extraction through a Linux or macOS client to avoid the WebDAV Windows quirks, and use the Freshsales REST API with rate-limit awareness for import. Workflow Processes, Topics, and Alert Subscriptions do not migrate because they are segment-scoped infrastructure objects; we document them for your admin to rebuild.
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 openCRX object lands in Freshsales, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
openCRX
Contact (individual subclass)
Freshsales
Contact
1:1openCRX Contact records (individual persons) map to Freshsales Contact. We extract first name, last name, primary email, phone numbers (via PhoneNumber objects), postal address (via PostalAddress objects), and any DataBinding PropertySet custom fields. The Freshsales Contact is created after its parent Account (from LegalEntity) to satisfy the AccountId lookup at insert time. Segments containing both LegalEntity and Contact records must be processed together to resolve the organisation hierarchy.
openCRX
LegalEntity (company subclass)
Freshsales
Account
1:1openCRX LegalEntity records map to Freshsales Account. We extract company name, website, industry classification, revenue range, and any DataBinding PropertySet custom fields. LegalEntity is the parent of Contact records in openCRX; we use the LegalEntity name as the Account name and the Contact's organisation reference to establish the Freshsales Account-Contact relationship. Multi-entity openCRX deployments with multiple segments require segment-level Account reconciliation before migration.
openCRX
Opportunity (contract subclass)
Freshsales
Deal
1:manyopenCRX Opportunities inherit from abstract contract classes and may contain complex position-level detail (contract positions as line items). We flatten contract positions into a single Deal record, extracting the opportunity name, amount, currency, close date, and rating. Stage names from openCRX map to Freshsales Deal stage values, with the original openCRX stage preserved in a custom field for audit. If multiple openCRX opportunities share a single Contact or LegalEntity, each becomes a separate Freshsales Deal linked to the same parent Account.
openCRX
Quote (contract subclass)
Freshsales
Deal or Quote module (Pro+)
1:1openCRX Quotes inherit from the same contract hierarchy as Opportunities and contain line positions modelled as contract positions. For Freshsales Growth and Free plans, we migrate Quote header data (customer reference, currency, total amount) into the parent Deal as a custom field block or note. For Freshsales Pro and Enterprise, Quotes migrate to the native Freshsales Quote module with line items, pricing, and validity dates preserved. Quote-to-Deal linkage is maintained via the parent Account lookup.
openCRX
Sales Order (contract subclass)
Freshsales
Deal
1:1openCRX Sales Orders are terminal contract records in the order-to-invoice chain. We map Sales Order headers and positions to Freshsales Deal records, flagging the original openCRX type as a custom field so that won Deals retain their order context. openCRX pricing rules applied at order time are captured as a JSON block in a custom Deal field if they cannot be expressed in Freshsales native pricing. Invoice records follow the same pattern and map as closed-won Deals with invoice status tracked in a custom field.
openCRX
Product and Price List
Freshsales
Product
1:1openCRX products with multi-currency price lists and run-time pricing rules map to Freshsales Product records. We extract product name, SKU (from openCRX productCode), description, and unit price. For products with pricing rules rather than fixed prices, we capture the effective price at migration time as the standard price in Freshsales and document the original pricing rule for the customer's admin to re-implement in Freshsales pricing logic if needed.
openCRX
Activities and Activity Trackers
Freshsales
Task and Event
1:1openCRX Activities (calls, emails, meetings, tasks) map to Freshsales Task and Event records. Activity time-tracking attributes, disposition codes, and duration migrate to Task custom fields. openCRX Activity Trackers group related activities and are a grouping concept with no Freshsales equivalent; we document tracker-to-record associations in a migration note and set a custom field on each migrated activity indicating its original tracker membership. Custom feature definitions and activity subtypes require field-level mapping during scoping.
openCRX
User-Defined Attributes (DataBinding PropertySet)
Freshsales
Custom Fields on Contacts, Accounts, Deals, Leads
lossyCustom fields added via openCRX DataBinding PropertySet are stored as feature definitions bound to CrxObject at runtime. We identify all active custom fields during scoping, map their data types to Freshsales equivalent field types (text, number, date, picklist, checkbox), and pre-create the corresponding custom fields in Freshsales under the correct module before data import. Custom field definitions that reference openCRX-specific picklist values require value mapping as part of the transformation step.
openCRX
Attachments (binary files)
Freshsales
File attachments on Contacts, Accounts, Deals
1:1openCRX stores binary attachments linked to objects via WebDAV. If attachments are accessible via openCRX's WebDAV endpoint, we extract them on a Linux or macOS client to avoid Microsoft's WebDAV implementation quirks that cause silent file access failures on Windows. Attachment metadata (filename, MIME type, created date, linked object) is preserved and re-attached to the corresponding migrated record in Freshsales. openCRX groupware document folders that rely on WebDAV-specific access patterns may require manual extraction with customer DBA assistance.
openCRX
Users and Roles
Freshsales
User
1:1openCRX role-based security with segment-scoped user assignments maps to Freshsales User records. We resolve active users by email address match between openCRX and Freshsales. Any openCRX user without a matching Freshsales User goes to a reconciliation queue for the customer's admin to provision before record import. Role and permission mappings (openCRX segment roles to Freshsales profile and permission sets) are documented as a written inventory for the admin to configure post-migration.
| openCRX | Freshsales | Compatibility | |
|---|---|---|---|
| Contact (individual subclass) | Contact1:1 | Fully supported | |
| LegalEntity (company subclass) | Account1:1 | Fully supported | |
| Opportunity (contract subclass) | Deal1:many | Fully supported | |
| Quote (contract subclass) | Deal or Quote module (Pro+)1:1 | Fully supported | |
| Sales Order (contract subclass) | Deal1:1 | Fully supported | |
| Product and Price List | Product1:1 | Fully supported | |
| Activities and Activity Trackers | Task and Event1:1 | Mapping required | |
| User-Defined Attributes (DataBinding PropertySet) | Custom Fields on Contacts, Accounts, Deals, Leadslossy | Mapping required | |
| Attachments (binary files) | File attachments on Contacts, Accounts, Deals1:1 | Fully supported | |
| Users and Roles | User1:1 | 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.
openCRX gotchas
No public REST API with documented rate limits
WebDAV client quirks block document access on Windows
"Too many open files" on Linux blocks installation and export
Workflow Processes are segment-scoped and non-portable
Freshsales gotchas
Freddy AI is Pro-tier only despite heavy marketing
Post-migration emails and sequences are disabled
Bot session credits are a one-time 500-session allocation
Phone credits charged per minute with no cap
File storage limits scale with plan tier
Pair-specific challenges
Migration approach
Discovery and export access setup
We audit the source openCRX instance across version, deployment configuration, database type, and segment structure. We extract the full DataBinding PropertySet custom field inventory from the application layer, inventory active Workflow Process definitions and Alert Topics, and assess attachment volume and storage location. We coordinate with the customer's DBA to establish read-only database export access on a Linux-compatible client, verify the ulimit setting is sufficient (we request 2048 or 4096 in /etc/security/limits.conf to avoid 'too many open files' failures), and confirm the target Freshsales plan covers the required features. The discovery output is a written migration scope, data volume estimate, and export runbook.
Data extraction and transformation
We extract openCRX data in dependency order: LegalEntity (Accounts), Contact (Contacts), Product (Products), then Opportunities, Quotes, Sales Orders, and Invoices (Deals and Quotes). Contract positions are flattened to the parent record and captured as structured notes or JSON for Deal-level placement. Activities are extracted with their original timestamps and tracker membership. Custom field values are extracted from the DataBinding PropertySet layer and mapped to the Freshsales custom field schema prepared in parallel. We resolve the LegalEntity-Contact parent relationship during extraction so that AccountId is known at Contact insert time. Attachment extraction runs on a Linux or macOS client to avoid WebDAV Windows compatibility issues.
Freshsales schema preparation
We pre-create the Freshsales custom fields on the correct modules (Contacts, Accounts, Deals, and Leads) to match the DataBinding PropertySet custom field inventory. We configure Deal stage values to reflect the openCRX opportunity and contract stage names. If the customer is on Freshsales Pro or above, we create Quote templates with line-item fields aligned to the openCRX contract position structure. We configure the user provisioning mapping (openCRX user email to Freshsales User) and document any unmapped users in a reconciliation queue. The migration runs into a Freshsales sandbox first to validate schema and mapping before production import.
Sandbox migration and reconciliation
We run a full migration into a Freshsales sandbox using production-like data volume. The customer's administrator reviews record counts (Accounts in, Contacts in, Deals in, Activities in), spot-checks 20-40 records against the openCRX source for field-level accuracy, and validates that the contract hierarchy flattening approach meets business requirements. The sandbox runbook also validates that custom field data is landing in the correct Freshsales custom fields. Any mapping corrections, stage name adjustments, or custom field schema changes are made before production migration begins.
Production migration and dependency sequencing
We run production migration in strict dependency order: Accounts (from LegalEntity), Contacts (with AccountId resolved), Products (with Price Book entries), then Deals (Opportunities, Quotes, Sales Orders, Invoices), Activities (Tasks and Events via Freshsales API with rate-limit handling), and finally attachment re-upload. Each phase emits a row-count reconciliation report before the next phase begins. We use the Freshsales REST API with exponential backoff on rate-limit responses. Workflow Processes and Alert Topics are documented in a written handoff inventory for the customer's admin to rebuild in Freshsales workflow automations.
Cutover, validation, and workflow rebuild handoff
We freeze openCRX write access during the cutover window, run a final delta migration for any records modified during the migration window, then enable Freshsales as the system of record. We deliver the Workflow Process and Alert Topic inventory document to the customer's administrator for rebuild in Freshsales automations (available from Growth plan). We support a 72-hour hypercare window where we resolve any data quality issues raised by the sales team. Reports, dashboards, and any custom analytics are not migrated as they are tied to openCRX-specific field names and calculation models; we document the openCRX report list for the admin to rebuild in Freshsales reporting.
Platform deep dives
openCRX
Source
Strengths
Weaknesses
Freshsales
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 openCRX and Freshsales.
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
openCRX: Not publicly documented.
Data volume sensitivity
openCRX 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 openCRX to Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your openCRX to Freshsales migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave openCRX
Other ways to arrive at Freshsales
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.