CRM migration
Field-level mapping, validation, and rollback between Opal CRM and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
Opal CRM
Source
Salesforce Sales Cloud
Destination
Compatibility
5 of 12
objects map 1:1 between Opal CRM and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Opal CRM to Salesforce is a migration from a field-sales-specific platform with no documented API to the enterprise CRM market leader. Opal CRM organizes its data around field-sales workflows — leads tracked from capture through quotation, with Tour Plans storing rep itineraries and expenses as a combined record. Salesforce has no native Tour or Visit object, so Tour Plans require decomposition into a parent Task or custom Tour object with associated expense line items reconstructed as custom records. Quotations carry a platform-specific approval workflow state that does not map to standard Salesforce Quote fields; we capture it as a custom property and document it for rebuild in Salesforce Flow or a manual approval process. The absence of a public Opal CRM API means extraction depends on direct database access or a manual export coordinated with the customer, which adds scoping time compared to API-driven migrations. We use the Salesforce Bulk API 2.0 for engagement history and large record volumes, and we deliver a written inventory of any Opal workflow logic for the customer's admin to rebuild post-migration.
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 Opal 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.
Opal CRM
Lead
Salesforce Sales Cloud
Lead
1:1Opal CRM Leads map directly to Salesforce Lead. Source attribution (form, upload, campaign, manual) is preserved in a custom field opal_lead_source__c. Any lead score or qualification data from Opal CRM custom fields migrates to a custom field opal_lead_score__c on the Salesforce Lead. We use the Salesforce Bulk API 2.0 for large lead volumes with batch chunking and validate row counts against the Opal CRM export before marking the phase complete.
Opal CRM
Sales Representative
Salesforce Sales Cloud
User
1:1Opal CRM team members (Admin, Manager, Sales Rep roles) map to Salesforce User records. We match by email address during migration. Role assignments are captured as a custom field opal_role__c on the User record because Opal CRM role definitions do not export as structured data. The customer's Salesforce admin provisions missing Users and assigns Profiles (System Administrator, Sales Manager, Standard User) based on the role mapping document we deliver. OwnerId references on Leads, Accounts, and Opportunities are resolved at migration time via the User lookup table.
Opal CRM
Tour Plan
Salesforce Sales Cloud
Task + Expense__c (custom)
1:manyTour Plans in Opal CRM store itinerary data (dates, locations, assigned rep) alongside expense line items (amount, category, description) as a combined record. Salesforce has no native Tour or Visit object, so we decompose each Tour Plan into a Salesforce Task (or custom Tour__c object) carrying the itinerary header fields, then parse individual expense line items and create corresponding Expense__c custom records linked via a lookup relationship to the parent Task. Location coordinates, route sequence, and rep assignment migrate as custom fields on the parent record. If the Opal CRM export flattens expense line items into a notes field, we decompress and reconstruct them before insert.
Opal CRM
Quotation
Salesforce Sales Cloud
Quote
1:1Opal CRM Quotations map to Salesforce Quote records with line items migrated to QuoteLineItem. The quotation header fields (customer name, total amount, validity date) migrate directly. The platform-specific approval workflow state (Pending Approval, Approved, Rejected) does not map to standard Salesforce Quote fields, so we capture it as a custom picklist field quotation_workflow_state__c on the Quote. PDF attachments and signed documents from Opal CRM migrate as ContentDocument records linked via ContentDocumentLink. The customer decides whether to rebuild the quotation approval logic as a Salesforce Flow approval process post-migration.
Opal CRM
Pipeline Stage
Salesforce Sales Cloud
Opportunity Stage
lossyOpal CRM pipeline stage names and order migrate to Salesforce Opportunity StageName values in the customer's active Sales Process. Stage probability percentages from Opal CRM map to StageProbability on each Salesforce stage. If Opal CRM stores pipeline-specific stage sets (e.g., different stages per product line or team), we create multiple Salesforce Sales Processes and map each pipeline to its corresponding Sales Process via Opportunity Record Type. Stage configuration happens before Opportunity import so that the StageName foreign key is satisfied at insert time.
Opal CRM
Company
Salesforce Sales Cloud
Account
1:1If Opal CRM stores company or organization data separate from Leads, those records map to Salesforce Account. The company name becomes Account Name; website and address fields map directly. Account is created before any Contact import so that the AccountId lookup is satisfied on Contact insert. Dedupe key is Company Name combined with Website domain if available.
Opal CRM
Activity: Call, Email, Meeting
Salesforce Sales Cloud
Task + Event + EmailMessage
1:1Opal CRM interaction logs (calls, emails, meetings) stored against Leads migrate to Salesforce as Task (calls and general activities), Event (meetings with StartDateTime and EndDateTime), and EmailMessage (emails with headers and body). The WhoId on the Salesforce record points to the migrated Lead. Activity timestamps are preserved as ActivityDate on Task and StartDateTime/EndDateTime on Event. Activity history uses the Salesforce Bulk API 2.0 with parent-record lookup resolution to handle large volumes without timing out.
Opal CRM
Role Permission
Salesforce Sales Cloud
Profile (documented mapping)
lossyOpal CRM role definitions (Admin, Manager, Sales Rep) do not export as structured data, so they cannot migrate as code. We capture the role assignment per user (which users have which roles) as a custom field opal_role__c on the Salesforce User record during migration. We deliver a written role mapping document that maps Opal Admin to Salesforce System Administrator or Custom: Sales profiles, Opal Manager to Sales Manager profiles, and Opal Sales Rep to Standard User profiles. The customer's Salesforce admin applies the Profile assignments post-migration.
Opal CRM
Custom Property
Salesforce Sales Cloud
Custom Field
lossyOpal CRM supports custom fields on Leads and possibly other objects, but the schema is not publicly documented. We identify custom fields during discovery by reviewing the Opal CRM export file headers or by requesting schema screenshots from the customer. Each identified custom field is pre-created in Salesforce with an equivalent API name (opal_<fieldname>__c), matching field type (text, number, date, picklist), and required/optional setting. Custom field creation happens in the Salesforce Sandbox during the schema design phase before any data loads begin.
Opal CRM
Workflow
Salesforce Sales Cloud
Flow (documented rebuild)
lossyOpal CRM quotation approval workflows are platform-specific logic that does not export as code. We capture the workflow state on the migrated Quote record (quotation_workflow_state__c) but do not rebuild the automation. We deliver a written inventory documenting each Opal workflow trigger, conditions, actions, and a recommended Salesforce Flow equivalent (record-triggered or approval process). The customer's admin or a Salesforce partner rebuilds the workflow logic post-migration.
Opal CRM
Report, Dashboard
Salesforce Sales Cloud
None
lossyOpal CRM reports and dashboards do not migrate because Salesforce reporting uses a fundamentally different data model, visualization engine, and field reference system. We deliver a written inventory of all Opal CRM reports and dashboards with their filters, groupings, and metrics so the customer's admin can recreate them in Salesforce Reports and Dashboards. Salesforce Lightning Analytics offers more advanced visualization options that may exceed Opal CRM's native reporting capabilities.
Opal CRM
Point-based Performance Tracking
Salesforce Sales Cloud
Custom Field (documented)
lossyOpal CRM's Basic plan includes point-based sales performance tracking (rewards/leaderboard data). This metric does not map to a standard Salesforce field. We preserve the points value as a custom number field opal_performance_points__c on the User record (rep-level) or as a custom field on the Lead or Opportunity depending on where the points data lives in the Opal CRM export. The customer decides whether to maintain this as a custom metric or replace it with Salesforce High Velocity Sales metrics post-migration.
| Opal CRM | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Lead | Lead1:1 | Fully supported | |
| Sales Representative | User1:1 | Fully supported | |
| Tour Plan | Task + Expense__c (custom)1:many | Fully supported | |
| Quotation | Quote1:1 | Fully supported | |
| Pipeline Stage | Opportunity Stagelossy | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Activity: Call, Email, Meeting | Task + Event + EmailMessage1:1 | Fully supported | |
| Role Permission | Profile (documented mapping)lossy | Fully supported | |
| Custom Property | Custom Fieldlossy | Fully supported | |
| Workflow | Flow (documented rebuild)lossy | Fully supported | |
| Report, Dashboard | Nonelossy | Fully supported | |
| Point-based Performance Tracking | Custom Field (documented)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.
Opal CRM gotchas
No publicly documented API for bulk data export
Tour Plan expense data may flatten during export
Quotation workflow state is not a standard CRM field
Free tier limits and trial expiry not visible in export
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
Extraction coordination and scoping
Because Opal CRM has no documented API, we begin by coordinating data extraction with the customer. We request a full manual export (CSV or database dump) covering Leads, Sales Representatives, Tour Plans with expense data, Quotations with line items, and Pipeline Stages. We review the export schema, validate record counts against the Opal CRM UI, and identify any custom fields present in the export headers. This step typically takes one to two weeks and must resolve before migration design finalizes. If the export produces flat expense data on Tour Plans, we flag it and plan the expense decomposition logic before proceeding.
Discovery and Salesforce edition selection
We audit the Opal CRM export against the customer's business requirements to determine the target Salesforce edition. Professional ($80/user) covers most migrations with standard Leads, Accounts, Contacts, Opportunities, and Quotes. Enterprise ($165/user) is required if the customer needs multiple Sales Processes, advanced territory management, or Einstein Activity Capture. We also identify custom object requirements (Tour__c, Expense__c), custom field count, engagement history volume, and any integration requirements (ERP connectors, CPQ, revenue intelligence). The discovery output is a written migration scope and a Salesforce edition recommendation.
Schema design and Sandbox deployment
We design the destination schema in Salesforce. This includes creating the Tour__c custom object (or mapping Tour Plans to Task with custom fields), the Expense__c custom object with a lookup to Tour__c, custom fields for quotation_workflow_state__c, opal_role__c, opal_lead_source__c, opal_lead_score__c, and opal_performance_points__c. We configure Opportunity Stage values and Sales Processes to match the Opal CRM pipeline stage set. Schema is deployed via Salesforce Metadata API into a Sandbox org first for validation before any data loads begin.
Sandbox migration and reconciliation
We run a full migration into a Salesforce Sandbox (Full Copy or Partial Copy) using the production-like export volume. The customer's RevOps lead reconciles record counts (Leads in, Accounts in, Tour Plans in, Quotations in, Activities in), spot-checks 25-50 random records against the Opal CRM source, and reviews the Tour Plan expense decomposition output. Any mapping corrections, missing custom fields, or stage configuration adjustments happen in Sandbox before production migration begins. The customer signs off the schema and mapping before we proceed to production.
Owner reconciliation and User provisioning
We extract every distinct Opal CRM Sales Representative referenced on Leads, Tour Plans, Quotations, and Engagement records and match by email against the Salesforce destination org's User table. Any Opal user without a matching Salesforce User goes to a reconciliation queue. The customer's Salesforce admin provisions missing Users and assigns Profiles based on the role mapping document we delivered. OwnerId references on Leads, Accounts, Opportunities, and Tour Plans cannot be resolved until this step is complete.
Production migration in dependency order
We run production migration in record-dependency order: Users (manually provisioned, validated), Accounts (from Opal CRM Company data if present), Leads (with AccountId resolved for any associated organization data), Opportunities (with StageName, RecordTypeId, and OwnerId resolved), Tour Plans (Task or Tour__c parent with Expense__c line items decomposed), Quotations (Quote with quotation_workflow_state__c custom field), Activity history (Tasks, Events, EmailMessages via Bulk API 2.0). Each phase emits a row-count reconciliation report before the next phase begins. We pause HubSpot writes (or close the Opal CRM account) during cutover to prevent new records from accumulating in the source system.
Cutover, validation, and workflow rebuild handoff
We run a final delta migration of any records modified during the cutover window, then enable Salesforce as the system of record. We deliver the written workflow inventory (Opal quotation workflow logic documented with recommended Salesforce Flow equivalent), the report and dashboard inventory, and the role-to-Profile mapping document. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's sales or operations team. We do not rebuild Opal CRM workflows as Salesforce Flow inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
Opal CRM
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 Opal CRM 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
Opal CRM: Not publicly documented..
Data volume sensitivity
Opal 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 Opal CRM to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your Opal 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 Opal 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.