CRM migration
Field-level mapping, validation, and rollback between openCRX and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
openCRX
Source
Salesforce Sales Cloud
Destination
Compatibility
11 of 15
objects map 1:1 between openCRX and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from openCRX to Salesforce Sales Cloud is a structural migration through an unconventional source. openCRX has no published REST API with documented rate limits; all data export requires direct database access or scripted extraction through the application layer. We coordinate with the customer's DBA to obtain a read-only database export, extract Activities and custom fields via application-layer scripting, and load everything into Salesforce through the Bulk API 2.0 with parent-record resolution and batch chunking. openCRX's data model centres on a contract hierarchy where Opportunities, Quotes, Sales Orders, and Invoices inherit from abstract contract and contract-position classes. We split this into distinct Salesforce Opportunity, Quote, and Order records, preserving line-item details and pricing rules as OpportunityLineItems and OrderProductRecords. The LegalEntity-Contact distinction maps to Account (with Account Type = Legal Entity) and Contact respectively. Workflow Processes and Alert Topics are segment-scoped infrastructure objects that do not migrate; we deliver a written inventory of every openCRX workflow definition for the customer's admin to rebuild in Salesforce Flow. Attachments stored via WebDAV are extracted on Linux-compatible clients to avoid the Windows WebDAV client quirks that affect file access on that platform.
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 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.
openCRX
Account (LegalEntity)
Salesforce Sales Cloud
Account
1:1openCRX LegalEntity records (companies, organisations, and any Account with business-entity semantics) map directly to Salesforce Account. We use the LegalEntity's primary PostalAddress as the Billing Address, the primary PhoneNumber as Phone, and the LegalEntity name as Account Name. Account Type is set to Customer - Direct or Customer - Channel based on the customer's openCRX segment configuration. Dedupe is performed on Account Name and Website domain.
openCRX
Account (Contact)
Salesforce Sales Cloud
Contact
1:1openCRX Contact records (individuals) map to Salesforce Contact. Each Contact is linked to its parent LegalEntity Account via the AccountId lookup. Primary PostalAddress migrates to Contact MailingAddress, primary PhoneNumber to Phone, and primary EmailAddress to Email. The Contact's full name fields are parsed from the openCRX FullName attribute.
openCRX
Opportunity (contract hierarchy)
Salesforce Sales Cloud
Opportunity
1:1openCRX Opportunities inherit from the abstract contract class and represent sales pipeline entries. We map openCRX contract status (requested, submitted, won, lost) to Salesforce StageName values, map the estimated value to Amount, and preserve the openCRX contract rating as a custom Opportunity field. Probability percentages are mapped to Salesforce StageProbability. Owner resolution is by email match against the Salesforce User table.
openCRX
Quote (contract hierarchy)
Salesforce Sales Cloud
Quote
1:1openCRX Quotes inherit from the same contract hierarchy as Opportunities. We map Quote records to Salesforce Quote objects linked to the parent Opportunity, preserving quote dates, expiration dates, line-item pricing, and currency context from the openCRX contract. Quote PDFs stored in openCRX migrate as ContentDocument attached to the Quote record.
openCRX
Sales Order (contract hierarchy)
Salesforce Sales Cloud
Order
1:1openCRX Sales Orders inherit from the contract hierarchy and represent confirmed purchase commitments. We map them to Salesforce Order records, with the status field (pending, approved, in progress, completed, cancelled) mapping to Salesforce Status values. Order products map to OrderProductRecords. The parent Account and Opportunity are resolved at migration time through lookup resolution.
openCRX
Invoice (contract hierarchy)
Salesforce Sales Cloud
Invoice (Salesforce Billing)
lossyopenCRX Invoices are the terminal contract objects in the sales cycle. If the destination org has Salesforce Billing enabled, we map invoices directly. Otherwise, invoices migrate as custom Invoice__c records with the invoice number, date, line items, and payment status preserved. Payment status, invoice total, and currency are retained as structured fields.
openCRX
Contract Position
Salesforce Sales Cloud
OpportunityLineItem / OrderProductRecord
1:1openCRX contract positions (line items on Opportunities, Quotes, Sales Orders, and Invoices) are modelled as abstract contract position subclasses. We map each position to Salesforce OpportunityLineItem when the parent is an Opportunity, OrderProductRecord when the parent is an Order, and QuoteLineItem when the parent is a Quote. Quantity, unit price, and pricing rule references are preserved as custom fields if the customer's pricing logic requires it.
openCRX
Product
Salesforce Sales Cloud
Product2
1:1openCRX Products (including bundles and design-to-order scenarios) map to Salesforce Product2 records. ProductCode, Name, Description, and Family migrate directly. Standard Pricebook entries are created during migration. Bundle structures are preserved as parent-product relationships in Salesforce.
openCRX
Price List
Salesforce Sales Cloud
PricebookEntry
1:1openCRX multi-currency price lists map to Salesforce PricebookEntry records. Each PricebookEntry ties a Product2 to a Pricebook2 and includes a UnitPrice in the relevant currency. If the customer uses multiple currencies in openCRX, we create multiple PricebookEntry records per product, one per currency, or a single pricebook with custom currency fields.
openCRX
Activity Tracker
Salesforce Sales Cloud
Task and Event
1:manyopenCRX Activity Trackers group related Activities. Individual Activities within a Tracker are split into Salesforce Task (for calls, tasks, and notes) and Event (for meetings and calendar entries). Activity Tracker grouping is preserved as a custom field tracker_id__c on the migrated Task or Event so that related activities remain associated. Activity timestamps and duration are preserved on the Salesforce records.
openCRX
Activity (individual)
Salesforce Sales Cloud
Task / Event / EmailMessage
1:1openCRX Activities with activity type CALL map to Salesforce Task with TaskSubtype=Call. Activity type MEETING maps to Salesforce Event with StartDateTime and EndDateTime. Emails map to Salesforce EmailMessage records linked to a Task entry on the activity timeline. The parent Contact or LegalEntity lookup is resolved at migration time, and activity history ordering is preserved by ActivityDate.
openCRX
User-Defined Attributes (DataBinding PropertySet)
Salesforce Sales Cloud
Custom Fields on mapped objects
lossyopenCRX custom fields added via DataBinding PropertySet are identified during scoping as feature definitions bound to CrxObject at runtime. We extract all active custom field definitions, map them to typed Salesforce custom fields (Text, Number, Date, Picklist, or Checkbox) on the corresponding standard or custom object, and include them in the Salesforce metadata deployment before data import begins.
openCRX
Attachment (file content)
Salesforce Sales Cloud
ContentDocument and ContentVersion
1:1openCRX binary attachments linked to Accounts, Contacts, or Opportunities are extracted via the export process (on a Linux or macOS client to avoid Windows WebDAV client quirks) and re-uploaded as Salesforce ContentVersion records. ContentDocumentLink records attach each file to the migrated parent record with the appropriate sharing setting (V - Viewer). File metadata (filename, content type, size) is preserved from the openCRX attachment record.
openCRX
Segment
Salesforce Sales Cloud
Salesforce Org, Division, or Record Type
lossyopenCRX segments are quasi-independent sub-installations within a single deployment, each with its own data space and configuration. Multi-segment openCRX instances require a mapping strategy: either separate Salesforce orgs (for strict data isolation), Salesforce Divisions (for reporting segregation within one org), or Record Type and custom segment__c fields (for lightweight segmentation within a single org). The customer selects the strategy during scoping, and we apply it consistently across all object imports.
openCRX
Role-Based Security (Users and Roles)
Salesforce Sales Cloud
User and Profile
1:1openCRX users and role assignments are mapped to Salesforce Users and Profiles. We extract active openCRX users, match them by email to Salesforce Users, and map openCRX role names to Salesforce Profiles or Permission Sets based on the closest functional match. Segment-scoped role assignments are mapped to Salesforce Role Hierarchy positions. Active user records are migrated; inactive users are noted for the admin to provision manually.
| openCRX | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Account (LegalEntity) | Account1:1 | Fully supported | |
| Account (Contact) | Contact1:1 | Fully supported | |
| Opportunity (contract hierarchy) | Opportunity1:1 | Fully supported | |
| Quote (contract hierarchy) | Quote1:1 | Fully supported | |
| Sales Order (contract hierarchy) | Order1:1 | Fully supported | |
| Invoice (contract hierarchy) | Invoice (Salesforce Billing)lossy | Fully supported | |
| Contract Position | OpportunityLineItem / OrderProductRecord1:1 | Fully supported | |
| Product | Product21:1 | Fully supported | |
| Price List | PricebookEntry1:1 | Fully supported | |
| Activity Tracker | Task and Event1:many | Fully supported | |
| Activity (individual) | Task / Event / EmailMessage1:1 | Fully supported | |
| User-Defined Attributes (DataBinding PropertySet) | Custom Fields on mapped objectslossy | Mapping required | |
| Attachment (file content) | ContentDocument and ContentVersion1:1 | Fully supported | |
| Segment | Salesforce Org, Division, or Record Typelossy | Fully supported | |
| Role-Based Security (Users and Roles) | User and Profile1:1 | 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.
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
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 export strategy scoping
We audit the openCRX instance across version, database type, segment count, record volumes (Accounts, Activities, Opportunities, Quotes, Orders, Invoices), custom field definitions via DataBinding PropertySet, and attachment file locations. We also assess the customer's DBA availability for database export, or the openCRX administrator's ability to run application-layer export scripts. The discovery output is a written migration scope with a confirmed export strategy, record volume estimates, and a Salesforce edition recommendation based on the data complexity.
Database or application-layer export coordination
We coordinate with the customer's DBA or openCRX administrator to execute the data export. For database exports, we provide a read-only SQL extraction script scoped to the relevant openCRX schema objects. For application-layer exports, we provide an extraction script runbook that scripts the export through the openCRX application layer on a Linux-compatible client. Attachments are extracted separately via WebDAV or direct file system access where the database and file storage are co-located. All exports produce CSV or JSON output files and a record-count manifest.
Schema design and contract hierarchy split
We design the destination Salesforce schema. This includes provisioning custom objects if required, creating custom fields (with type mapping from openCRX DataBinding PropertySet definitions), configuring Pricebook2 and Product2 entries, and defining the split of the openCRX contract hierarchy into Opportunity, Quote, Order, and Invoice records. We also configure the multi-segment segregation strategy (Record Type, Division, or segment__c field) and deploy the schema to a Salesforce Sandbox for validation before production migration begins.
Sandbox migration and reconciliation
We run a full migration into a Salesforce Sandbox using production-like data volume. The customer's RevOps or openCRX administrator reviews record counts, spot-checks 25-50 records against the source, and signs off the schema, mapping, and contract-hierarchy split logic. Any corrections to field mapping, currency handling, or segment segregation happen in Sandbox, not in production. This step is the last chance to validate the export-to-Salesforce transform before cutover.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (LegalEntity first), then Contacts (with AccountId resolved), then Opportunities, Quotes, Orders, and Invoices (with parent-record lookups resolved), then Products and Pricebook entries, then Activity history (Tasks, Events, EmailMessages via Bulk API 2.0), then custom fields and attachments. Each phase emits a row-count reconciliation report before the next phase begins. We use Bulk API 2.0 with exponential backoff and batch chunking for large activity and attachment imports.
Cutover, validation, and workflow rebuild handoff
We freeze openCRX writes during cutover, run a final delta migration of records modified during the migration window, then enable Salesforce as the system of record. We deliver a written inventory of all openCRX Workflow Process definitions and Alert Topics for the customer's admin to rebuild in Salesforce Flow. We support a one-week hypercare window for reconciliation issues. We do not rebuild openCRX Workflows as Salesforce Flow inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
openCRX
Source
Strengths
Weaknesses
Salesforce Sales Cloud
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 Salesforce Sales Cloud.
Object compatibility
1 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 Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your openCRX 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 openCRX
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.