CRM migration
Field-level mapping, validation, and rollback between CRM Service and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
CRM Service
Source
Freshsales
Destination
Compatibility
9 of 10
objects map 1:1 between CRM Service and Freshsales.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from CRM Service to Freshsales is a schema translation, not a direct copy. Salesforce uses a hierarchical Account-Contact-Opportunity model with a separate Lead object and __c-suffixed custom fields; Freshsales collapses Leads into its Contacts module and uses a flatter Accounts-Contacts-Deals structure. We resolve the Lead versus Contact question during scoping, pre-create all required custom fields in Freshsales before data arrives, and use Freshsales REST API endpoints with batch chunking and exponential backoff to handle large orgs without rate-limit errors. Workflow Rules, Process Builder flows, Approval Processes, and Flow definitions are not migratable as code; we deliver a written inventory of every automation with its trigger, conditions, and recommended Freshsales Workflow equivalent so your admin can rebuild post-migration. Engagement history (calls, emails, meetings, tasks) moves as native Freshsales Activities with timestamps preserved. Data quality issues including duplicates, blank required fields, and stale records carry over unless addressed before migration, which compounds post-launch adoption risk.
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 CRM Service 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.
CRM Service
Account
Freshsales
Account
1:1Salesforce Account maps directly to Freshsales Account. The Salesforce Account Name becomes Freshsales Account Name, Industry maps to Industry, and AnnualRevenue maps to Annual Revenue. Salesforce parent-account hierarchy (where an Account has a ParentId pointing to another Account) is flattened to a single parent link in Freshsales; multiple-level hierarchies require flattening during the transform step. Billing address and shipping address from Salesforce map to Freshsales address fields.
CRM Service
Contact
Freshsales
Contact
1:1Salesforce Contact maps to Freshsales Contact. The Contact's AccountId lookup resolves to a Freshsales Account ID at migration time. Email, Phone, Title, Department, and MailingAddress migrate directly. The Salesforce Contact's OwnerId resolves via email match to a Freshsales User. Standard Salesforce Contact fields map to Freshsales Contact fields by name; non-matching fields are flagged for custom field creation in Freshsales before import.
CRM Service
Lead
Freshsales
Lead
1:1Salesforce Lead maps to Freshsales Lead. The Salesforce LeadStatus maps to Freshsales Lead Status; a custom field sf_lead_status__c carries the original Salesforce status value for audit. Salesforce LeadSource maps to Freshsales Lead Source. We recommend converting all Salesforce Leads before migration if the customer intends to use Freshsales Leads for the same unqualified-prospect workflow, or merging them into Contacts if the sales process does not distinguish between Lead and Contact stages.
CRM Service
Opportunity
Freshsales
Deal
1:1Salesforce Opportunity maps to Freshsales Deal. StageName maps to Freshsales Deal Stage with a custom stage mapping table created during scoping. Amount maps to Deal Value. CloseDate maps to Close Date. Probability maps to Probability as an integer. OwnerId resolves to Freshsales User via email match. Salesforce Opportunity RecordTypeId maps to Freshsales Deal Pipeline if multiple pipelines are configured in the destination.
CRM Service
Custom Object __c
Freshsales
Custom Module
1:1Salesforce custom objects (carrying the __c suffix) map to Freshsales custom modules available on Pro and Enterprise tiers. We pre-create the Freshsales custom module with matching field labels and API-compatible names (without __c) before migration. Any lookup relationships between custom objects in Salesforce are resolved via the target Freshsales module's record IDs before insert, using external ID matching where available. Custom objects are imported after all standard objects to satisfy parent-record dependencies.
CRM Service
Custom Field __c
Freshsales
Custom Field
lossySalesforce custom fields carry __c in API names; Freshsales custom fields use flat naming without suffix. We create every Salesforce custom field as a Freshsales custom field before any data import begins, using the same field label and matching data type (text to text, number to number, date to date, picklist to picklist). Salesforce multi-select picklists exceeding Freshsales picklist value limits are flagged during scoping for consolidation or alternative storage.
CRM Service
Task
Freshsales
Task
1:1Salesforce Task maps to Freshsales Task. Subject, Status, Priority, ActivityDate, and Description migrate directly. The Task WhoId (pointing to Contact or Lead) resolves to the migrated Freshsales Contact or Lead record via email match. The Task WhatId (pointing to Account, Opportunity, or custom object) resolves to the migrated Freshsales record via external ID. Open Salesforce tasks are migrated; completed tasks migrate with their completion timestamps preserved.
CRM Service
Event
Freshsales
Appointment
1:1Salesforce Event maps to Freshsales Appointment. Subject, StartDateTime, EndDateTime, Location, and Description migrate directly. Event Attendees map to Freshsales Appointment invitees via email match to the migrated Contact, Lead, or User records. Salesforce Event WhatId resolves to the migrated Freshsales Account or Deal. Completed appointments preserve their original timestamps for activity timeline accuracy.
CRM Service
Note
Freshsales
Note
1:1Salesforce Notes (the legacy Note object) map to Freshsales Notes. Body content migrates as note text. Salesforce ContentDocumentLink attachments are treated as separate file records; we export them to a staging location and provide a file mapping table for the customer's admin to reattach post-migration or to upload via Freshsales file attachment. Note parent (Account, Contact, Opportunity) resolves to the migrated Freshsales record.
CRM Service
User
Freshsales
User
1:1Salesforce User records are not directly migrated; they are used as a lookup table for OwnerId resolution. We extract the distinct set of Salesforce Users referenced on Contacts, Leads, Opportunities, Tasks, and Events, then match each by email to a Freshsales User. Any Salesforce User without a matching Freshsales User email goes to a reconciliation queue for the admin to provision before the record import phase begins.
| CRM Service | Freshsales | Compatibility | |
|---|---|---|---|
| Account | Account1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Lead | Lead1:1 | Fully supported | |
| Opportunity | Deal1:1 | Fully supported | |
| Custom Object __c | Custom Module1:1 | Fully supported | |
| Custom Field __c | Custom Fieldlossy | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Event | Appointment1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| User | User1: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.
CRM Service gotchas
API rate limits vary by edition without public documentation
Data Export frequency limited by edition tier
Custom object __c suffix causes field name mismatches in exports
Automations and flows do not migrate between platforms
Multi-select picklist values may exceed destination field limits
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 data audit
We audit the Salesforce org across edition, custom objects, custom fields (with __c suffix inventory), Opportunity record types, active Workflow Rules, Process Builder flows, and engagement volume (Task and Event counts). We run a parallel data quality audit covering duplicate Contact and Account counts, blank required-field rates, and stale Opportunity age. The discovery output is a written migration scope with a custom field mapping table, an exclusion recommendation for low-quality records, and a Salesforce Data Export plan using Data Loader for frequency control.
Freshsales schema setup
We pre-create every Salesforce custom field as a Freshsales custom field before any data import begins, using matching labels and equivalent data types. We configure Freshsales Deal Stages to match the Salesforce Opportunity Stage values using the stage mapping table, and we configure Deal Pipelines corresponding to any Salesforce Opportunity Record Types. Custom modules are created for each Salesforce custom object, with lookup relationships defined to match the source schema. The Freshsales date format is noted for the transform step.
Owner and user reconciliation
We extract every distinct Salesforce User referenced as OwnerId across Contacts, Leads, Opportunities, Tasks, and Events. We match each by email to a provisioned Freshsales User. Any Salesforce User without a matching Freshsales User email goes to a reconciliation queue; the customer provisions the missing Freshsales Users before record migration proceeds. Salesforce profiles and roles do not map to Freshsales roles, so we rely on Freshsales's native team structure post-migration.
Data export and transform
We export Salesforce data using Data Loader (for frequency control over the native Export Service) covering Accounts, Contacts, Leads, Opportunities, Tasks, Events, Notes, and custom objects in dependency order. During the transform step, we strip __c from custom field column headers, normalize all date fields to match the Freshsales configured format, resolve OwnerId to email addresses, and apply the stale-record exclusion list. The transform outputs a set of staging CSVs ready for Freshsales import.
Production migration in dependency order
We import in record-dependency order: Accounts first (the parent for Contacts), Contacts and Leads (with AccountId resolved), Opportunities as Deals (with OwnerId and pipeline assignment), Tasks and Appointments (with WhoId and WhatId resolved to migrated record IDs), Notes, and finally custom objects. Each phase emits a row-count reconciliation report before the next phase begins. We use Freshsales REST API batch endpoints with exponential backoff on rate-limit responses and chunk large datasets to stay within API limits.
Cutover, validation, and automation rebuild handoff
We freeze Salesforce writes during cutover, run a final delta migration of records modified during the migration window, then set Freshsales as the system of record. We deliver the Workflow and Flow inventory document listing every Salesforce automation with its trigger, conditions, and recommended Freshsales Workflow equivalent. We do not rebuild Salesforce Workflows as Freshsales Workflows inside the migration scope; that is a separate engagement or an internal admin task. We support a one-week hypercare window for reconciliation issues.
Platform deep dives
CRM Service
Source
Strengths
Weaknesses
Freshsales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 4 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 CRM Service and Freshsales.
Object compatibility
4 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
CRM Service: Varies by edition and license type; not publicly documented with specific numbers.
Data volume sensitivity
CRM Service exposes a bulk API — large-volume migrations stream efficiently.
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 CRM Service to Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your CRM Service 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 CRM Service
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.