CRM migration
Field-level mapping, validation, and rollback between Opal CRM and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
Opal CRM
Source
Freshsales
Destination
Compatibility
4 of 8
objects map 1:1 between Opal CRM and Freshsales.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Opal CRM to Freshsales is a lateral-size migration with a significant technical complication: Opal CRM does not publish a REST API or bulk export endpoint in its public-facing documentation, so data extraction depends entirely on whatever manual export mechanism the platform exposes or direct database access the customer can provide. We scope this extraction constraint at discovery, validate completeness against Opal CRM's UI record counts before migration begins, and flag any Tour Plan or Quotation fields that collapse during the export process. In Freshsales we map Leads to Contacts (Opal has no lead-contact split to resolve), Tour Plans to a custom module or structured notes, Quotations to Freshsales Quotes with the approval workflow state stored as a custom field, and Activities to Tasks and Events. Freshsales' tiered API rate limits (1,000 per hour on Growth, 2,000 on Pro, 5,000 on Enterprise) determine our chunk sizing. Workflows and automations do not migrate; we deliver a written map of any Opal workflow logic requiring Freshsales Workflow 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 Opal CRM 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.
Opal CRM
Lead
Freshsales
Contact
1:1Opal CRM Leads map to Freshsales Contacts because Opal uses a single Lead object without a separate Contact concept. We preserve the lead source attribution, any custom fields discovered during scoping, and the assigned Sales Rep owner by resolving the owner email to a Freshsales User record. If the customer needs to retain unqualified prospects as Leads in Freshsales, we configure a Lead status field and map the source accordingly during scoping.
Opal CRM
Sales Representative
Freshsales
User
1:1Opal CRM team members with Admin, Manager, or Sales Rep roles map to Freshsales User records. Role permissions do not export as structured data from Opal CRM, so we capture role assignments per user during discovery and document the mapping so the Freshsales admin can reconfigure equivalent access tiers (Full, Limited, or Read-Only) post-migration. Active users are mapped first; inactive users are created as deactivated records to preserve historical assignment references.
Opal CRM
Tour Plan
Freshsales
Custom Module (Tour Plans) or Notes
lossyOpal CRM Tour Plans store itinerary data (dates, locations, route sequence) and expense line items (amount, category, description). Freshsales has no native Tour or Visit object. We create a custom Tour Plans module in Freshsales with fields for itinerary_date, location, route_order, and expense entries, or attach structured notes if the Growth plan custom module limit is a constraint. We decompress any flat export rows containing both itinerary and expense data and reconstruct them as individual structured records. If the export collapses Tour Plan expense data into a notes field, we flag each affected record for manual review.
Opal CRM
Quotation
Freshsales
Quote
1:1Opal CRM Quotations map to Freshsales Quote records with line items. The quotation header fields (quotation number, date, total amount, currency) migrate directly. The internal approval workflow state is a platform-specific concept in Opal CRM that has no standard Freshsales equivalent, so we capture the last workflow status value and store it in a custom field quotation_workflow_state__c. The Freshsales admin rebuilds any approval routing logic using Freshsales Workflows if the Garden plan or above is subscribed.
Opal CRM
Pipeline Stage
Freshsales
Deal Stage
lossyOpal CRM tracks lead progress through implied pipeline stages. Stage names and order migrate to Freshsales Deal stages. Each stage maps to a Freshsales Deal Stage value, and the stage probability percentages are configured in the Deal Stage setup. If the customer has multiple Opal CRM pipelines, we create corresponding Freshsales Deal stages grouped by pipeline name.
Opal CRM
Activity (Calls, Emails, Meetings)
Freshsales
Call Log, Task, Event
1:1Opal CRM engagement logs (calls, emails, meetings) attached to Leads migrate to Freshsales Call Logs (for calls), Tasks (for emails and standalone tasks), and Events (for meetings). We set the activity date to the original Opal CRM timestamp to preserve timeline ordering. If the export delivers activity history as a flat notes field rather than structured rows, we parse timestamps and restore them as individual activity records, flagging any records with ambiguous dates for manual review.
Opal CRM
Custom Properties
Freshsales
Custom Fields
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 customer's manual export output and map them to Freshsales custom fields of equivalent type (text, number, date, picklist). We use Freshsales' custom field UI (available from Growth tier) to provision the destination fields before migration begins. Any custom properties with unsupported data types are stored as text fields and flagged in the handover notes.
Opal CRM
Role Permissions
Freshsales
Access Tier Configuration
lossyOpal CRM role definitions (Admin, Manager, Sales Rep) do not export as structured data. We capture the role assignment per user during discovery and document the mapping to Freshsales access tiers (Full Access, Limited Access, Read Only). The Freshsales admin assigns roles post-migration based on this documented mapping. This is a manual configuration step, not a data migration step.
| Opal CRM | Freshsales | Compatibility | |
|---|---|---|---|
| Lead | Contact1:1 | Fully supported | |
| Sales Representative | User1:1 | Fully supported | |
| Tour Plan | Custom Module (Tour Plans) or Noteslossy | Fully supported | |
| Quotation | Quote1:1 | Fully supported | |
| Pipeline Stage | Deal Stagelossy | Fully supported | |
| Activity (Calls, Emails, Meetings) | Call Log, Task, Event1:1 | Fully supported | |
| Custom Properties | Custom Fieldslossy | Mapping required | |
| Role Permissions | Access Tier Configurationlossy | 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.
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
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 feasibility assessment
We audit the Opal CRM account for record volumes (Leads, Sales Reps, Tour Plans, Quotations, Activities) and assess the available export mechanism. Because Opal CRM has no documented API, the extraction phase depends on the customer's manual export access. We request a sample export file during scoping to identify schema structure, custom field names, and any data flattening risks. We also identify the Freshsales target plan (Growth, Pro, or Enterprise) based on record volumes and feature requirements such as custom modules and workflow automation.
Custom module and field provisioning in Freshsales
Before any data loads, we create the Freshsales custom Tour Plans module (if used) and all custom fields required for the mapping: quotation_workflow_state__c for quotation approval state, hs_original_lead_source__c for lead attribution, and any custom properties discovered from the Opal CRM export. Custom fields are provisioned via the Freshsales admin UI at the appropriate module level. We configure Deal stages to match the Opal CRM pipeline stages and set probability percentages per stage.
Data extraction and validation from Opal CRM
We extract data from Opal CRM via the customer's available export mechanism and parse the output files for schema structure. We validate record counts against the Opal CRM UI (Lead count, Quotation count, Tour Plan count, Activity count) to confirm export completeness. If the export produces flat records for Tour Plans or Quotation line items, we decompress and reconstruct structured rows before staging for load. Any records with missing required fields or ambiguous dates are flagged in a pre-load validation report.
Sandbox migration and reconciliation
We run a full migration into a Freshsales sandbox using production-like data volume. The customer's admin reviews record counts (Contacts in, Deals in, Quotes in, custom module records in), spot-checks 15-30 random records against the source export, and confirms that custom field values, owner assignments, and activity dates are correct. Mapping corrections, custom field additions, and stage probability adjustments happen in the sandbox before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: Users (provisioned and validated first), Contacts (with owner email resolved to Freshsales User), Deals (with stage, probability, and owner resolved), Quotes (with workflow state captured in custom field), custom Tour Plans module (if applicable), and Activity history (Call Logs, Tasks, Events via Freshsales API with rate-limit-aware chunking). Each phase emits a row-count reconciliation report before the next phase begins. We apply exponential backoff on 429 rate-limit responses and retry failed records up to three times before flagging for manual resolution.
Cutover, validation, and workflow handoff
We freeze Opal CRM access or exports during the cutover window, run a final delta migration of any records modified during the migration period, then mark Freshsales as the system of record. We validate final record counts, spot-check activity timeline integrity, and confirm custom field completeness. We deliver the written inventory of any Opal CRM workflow logic (quotation approval routing) with Freshsales Workflow configuration notes for the customer's admin to rebuild. We support a three-day post-migration review window for record-level issues raised by the customer's team.
Platform deep dives
Opal CRM
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 Opal CRM 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
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 Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your Opal CRM 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 Opal CRM
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.