CRM migration

Migrate from openCRX to Salesforce Sales Cloud

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 logo

openCRX

Source

Salesforce Sales Cloud

Destination

Salesforce Sales Cloud logo

Compatibility

73%

11 of 15

objects map 1:1 between openCRX and Salesforce Sales Cloud.

Complexity

BStandard

Timeline

4-8 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

openCRX logo

openCRX

What's pushing teams away

  • The user interface is unintuitive and the learning curve is steep, making day-to-day usage challenging for non-technical teams without dedicated administrator resources.
  • Comprehensive formal documentation is lacking, forcing teams to reverse-engineer behaviour from UML models, Javadoc, and community forum posts.
  • No official commercial support channel exists; users must rely on community resources or internal expertise when production issues arise.
  • Pre-built integrations with popular third-party tools are minimal, requiring custom development effort to connect openCRX to modern SaaS stacks.

Choosing

Salesforce Sales Cloud logo

Salesforce Sales Cloud

What's pulling them in

  • The AppExchange marketplace with 5,000+ prebuilt apps gives enterprises integrations for nearly every business workflow without custom development.
  • Native Einstein AI for lead scoring, opportunity insights, and predictive forecasting adds intelligence without a separate platform purchase.
  • Territory management, multi-currency support, and advanced forecasting satisfy the needs of complex B2B sales organizations with structured revenue teams.
  • Slack, Tableau, and CPQ are deeply integrated into the core platform, keeping the sales stack unified for teams already in the Salesforce ecosystem.
  • Organizations with a large, established Salesforce implementation choose it because switching costs — integrations, custom code, trained admins — are prohibitive.

Object mapping

How openCRX objects map to Salesforce Sales Cloud

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)

maps to

Salesforce Sales Cloud

Account

1:1
Fully supported

openCRX 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)

maps to

Salesforce Sales Cloud

Contact

1:1
Fully supported

openCRX 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)

maps to

Salesforce Sales Cloud

Opportunity

1:1
Fully supported

openCRX 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)

maps to

Salesforce Sales Cloud

Quote

1:1
Fully supported

openCRX 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)

maps to

Salesforce Sales Cloud

Order

1:1
Fully supported

openCRX 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)

maps to

Salesforce Sales Cloud

Invoice (Salesforce Billing)

lossy
Fully supported

openCRX 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

maps to

Salesforce Sales Cloud

OpportunityLineItem / OrderProductRecord

1:1
Fully supported

openCRX 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

maps to

Salesforce Sales Cloud

Product2

1:1
Fully supported

openCRX 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

maps to

Salesforce Sales Cloud

PricebookEntry

1:1
Fully supported

openCRX 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

maps to

Salesforce Sales Cloud

Task and Event

1:many
Fully supported

openCRX 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)

maps to

Salesforce Sales Cloud

Task / Event / EmailMessage

1:1
Fully supported

openCRX 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)

maps to

Salesforce Sales Cloud

Custom Fields on mapped objects

lossy
Mapping required

openCRX 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)

maps to

Salesforce Sales Cloud

ContentDocument and ContentVersion

1:1
Fully supported

openCRX 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

maps to

Salesforce Sales Cloud

Salesforce Org, Division, or Record Type

lossy
Fully supported

openCRX 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)

maps to

Salesforce Sales Cloud

User and Profile

1:1
Fully supported

openCRX 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.

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.

openCRX logo

openCRX gotchas

High

No public REST API with documented rate limits

Medium

WebDAV client quirks block document access on Windows

Medium

"Too many open files" on Linux blocks installation and export

Low

Workflow Processes are segment-scoped and non-portable

Salesforce Sales Cloud logo

Salesforce Sales Cloud gotchas

High

Workflow Rules and Process Builder are retired

High

Bulk API batch quota exhaustion during large imports

Medium

Storage overage billing is non-obvious

Medium

Account-Contact many-to-many relationship mapping

Low

Territory and team member import ordering dependencies

Pair-specific challenges

  • openCRX has no public REST API; export requires database or application-layer access

    openCRX does not publish a public REST API with documented rate limits. All data export must be performed through direct database read-only access or application-layer scripted extraction. We coordinate with the customer's DBA to obtain a database export, or work with the customer's openCRX administrator to script exports through the application layer. The export strategy is scoped against the customer's specific openCRX version (e.g., 2.13.x, 3.x), database type (PostgreSQL, MySQL, Oracle, DB2, MS SQL), and deployment configuration. Any API-based migration assumption will fail on this pair.

  • Workflow Processes and Alert Topics are segment-scoped and non-portable

    openCRX Workflow Processes are created per segment and are not standalone exportable records. Alert Topics drive email notifications based on object lifecycle events and are infrastructure configuration objects bound to the running instance. Neither can be extracted as data and re-imported into Salesforce. We document every openCRX workflow definition and alert topic during discovery, but we do not attempt to transfer them. The customer's admin must rebuild workflow logic in Salesforce Flow from scratch using the inventory we deliver.

  • WebDAV attachment export fails on Windows clients

    openCRX's groupware features use WebDAV for document access. Microsoft's WebDAV implementation on Windows is known to be unreliable, causing connection failures and file access errors that require registry edits or third-party WebDAV clients. We run attachment extraction on Linux or macOS environments where WebDAV functions correctly. If the customer's export must run on Windows, we use a compatible WebDAV client (such as Cyberduck or WinSCP in WebDAV mode) and verify file completeness with a checksum audit after extraction.

  • Multi-segment openCRX instances require a pre-migration data segregation strategy

    openCRX segments represent quasi-independent data spaces. When migrating to a single Salesforce org, segment data must be mapped to a segregation strategy: Salesforce Divisions, Record Types, or a custom segment__c field. This decision affects the schema design phase and must be made before any data extraction begins. We raise this as a scoping decision with the customer's project lead and document the chosen strategy in the migration runbook.

  • openCRX contract hierarchy must be split into distinct Salesforce objects

    openCRX Opportunities, Quotes, Sales Orders, and Invoices all inherit from abstract contract and contract-position classes. Salesforce uses separate standard objects with different schemas. We split the hierarchy at migration time, creating Opportunity records from the openCRX contract subclass, Quote records from the quote subclass, Order records from the order subclass, and Invoice records from the invoice subclass. Line items map to OpportunityLineItem, OrderProductRecord, or QuoteLineItem depending on the parent. Skipping this design step results in lost line-item detail or orphaned records.

Migration approach

Six steps for a successful openCRX to Salesforce Sales Cloud data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

openCRX logo

openCRX

Source

Strengths

  • Zero licensing cost with full source code, UML models, and Javadoc published under a BSD licence.
  • Enterprise-grade data model covering the full sales cycle from Lead through Invoice with full position-level detail.
  • Built on standard J2EE 6 Web Profile and Apache TomEE, running on any OS with Java VM support.
  • Multi-currency, multi-language, and multi-entity capabilities designed for global enterprise deployments.
  • Role-based security with system-wide audit trail meets requirements for regulated industry deployments.

Weaknesses

  • Self-hosting responsibility means no vendor-managed uptime, backups, or security patching.
  • No official commercial support; production issues require community resources or internal Java expertise.
  • Steeper operational burden compared to SaaS CRMs, requiring dedicated server administration.
  • Scarce pre-built third-party integrations; most connectors require custom development.
Salesforce Sales Cloud logo

Salesforce Sales Cloud

Destination

Strengths

  • Largest enterprise app ecosystem in CRM with 5,000+ AppExchange integrations covering nearly every vertical workflow.
  • Native Einstein AI delivers lead scoring, opportunity insights, and predictive forecasting without a third-party layer.
  • Advanced territory management, multi-currency, and flexible forecasting satisfy complex B2B revenue structures.
  • Deep platform extensibility: Custom Objects, Apex, Flow, and the Metadata API allow full schema customization.
  • Well-documented REST API, Bulk API, and Composite API with published rate limits for programmatic migration.

Weaknesses

  • Pricing model is layered and opaque in practice: per-seat fees plus storage overages, add-on subscriptions, and annual uplifts compound to 30–40% above sticker price.
  • Workflow Rules and Process Builder are deprecated, forcing all orgs onto Salesforce Flow — a migration task that catches many teams by surprise.
  • Steep administrative complexity: meaningful configuration requires a dedicated Salesforce admin or consultant.
  • API rate limits are edition-gated (100k/day base for Enterprise) and easily exhausted by large historical imports without throttling.
  • Data export is exportable via Data Loader but preserving relationship integrity across 30+ objects requires careful ETL sequencing.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 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 openCRX and Salesforce Sales Cloud.

  • Object compatibility

    B

    1 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

    openCRX: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your openCRX to Salesforce Sales Cloud 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 openCRX to Salesforce Sales Cloud data migrations

Answers to the questions buyers ask most during openCRX to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most migrations land between four and eight weeks for accounts with a single openCRX segment, under 10,000 Accounts, and 5,000 Opportunities. Migrations with multiple segments, complex multi-currency pricing, large attachment volumes, or over 200,000 Activity records extend to fourteen to twenty weeks because of the database export coordination, contract-hierarchy split design, and multi-segment segregation strategy work. Discovery and export strategy alone typically takes two to three weeks because of the non-API nature of openCRX.

Adjacent paths

Related migrations to explore

Ready when you are

Move from openCRX.
Land in Salesforce Sales Cloud, 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