CRM migration
Field-level mapping, validation, and rollback between Oncourse CRM and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
Oncourse CRM
Source
Freshsales
Destination
Compatibility
6 of 8
objects map 1:1 between Oncourse CRM and Freshsales.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Oncourse CRM to Freshsales is a schema-restructuring migration. Oncourse CRM stores organization associations as Contact properties rather than distinct Account records, so we extract those organization names during scoping and create Freshsales Accounts, then link each Contact to its parent Account. Oncourse records activity history as freeform notes rather than structured call, email, meeting, and task objects, which means we migrate the content but lose the activity-type granularity in Freshsales's timeline. We resolve this by tagging each migrated note with its inferred type (call, email, meeting) in a custom field so admins can filter the timeline post-migration. Leads and Contacts map 1:1, and Deals map directly to Freshsales Opportunities with stage names carried over as custom Opportunity Stage values or mapped to Freshsales's standard stage set. Custom fields migrate as typed properties on each object. Oncourse Workflows, automations, and attachment exports do not migrate; we deliver a written inventory of these for the customer's admin to rebuild in Freshsales's workflow builder.
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 Oncourse 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.
Oncourse CRM
Lead
Freshsales
Lead
1:1Oncourse CRM Leads migrate 1:1 to Freshsales Leads, preserving the lead source and status properties as standard Lead fields. Any Oncourse custom fields on Leads map to Freshsales custom Lead fields. We recommend configuring Freshsales Lead field mapping before migration to ensure that custom field data does not fall during Lead conversion; the customer should define the target Contact, Account, and Deal fields for each Lead custom field in Freshsales Admin settings before the migration runs.
Oncourse CRM
Contact
Freshsales
Contact
1:1Oncourse CRM Contacts migrate 1:1 to Freshsales Contacts, mapping name, email, phone, and address fields directly. The organization value stored as a Contact property in Oncourse is extracted and held for the Account creation step; after Freshsales Accounts are created, we update each Contact's AccountId lookup to restore the organization relationship. Duplicate detection applies at import to prevent duplicate Contacts for records sharing the same email address.
Oncourse CRM
Contact (organization property)
Freshsales
Account
1:manyOncourse CRM does not maintain a separate Account object; organization names are stored as Contact properties. We extract all distinct non-null organization values from Oncourse Contacts, create corresponding Freshsales Accounts, and link each Contact to its Account via the Contact.account_id field. This reconstruction is the most impactful schema step in the migration because it enables account-level reporting, territory assignment, and the Contact hierarchy that Oncourse's flat model does not support.
Oncourse CRM
Deal
Freshsales
Opportunity
1:1Oncourse CRM Deals migrate 1:1 to Freshsales Opportunities. Deal name, monetary value, and owner assignment transfer directly. The Oncourse pipeline stage name maps to Freshsales Opportunity stage; if the stage name does not match a Freshsales standard stage, we create a custom stage value in Freshsales before migration. Closed-won and closed-lost status from Oncourse maps to Freshsales stage with the appropriate probability percentage preserved in a custom field for reporting.
Oncourse CRM
Pipeline Stage
Freshsales
Opportunity Stage
lossyOncourse CRM pipeline stages are customizable and vary per account. We extract the customer's active stage names during scoping and map them to Freshsales Opportunity stages, creating new stages in Freshsales if the names do not match the standard set (Prospect, Qualification, Proposal, Negotiation, Closed Won, Closed Lost). Probability percentages from Oncourse migrate as custom numeric fields on the Opportunity if the customer requires stage probability reporting that differs from Freshsales defaults.
Oncourse CRM
Note (activity-as-note)
Freshsales
Note
1:1Oncourse CRM stores activity history as freeform notes rather than structured Task, Event, or EmailMessage records. We import these as Freshsales Notes linked via ContentDocumentLink to the parent record (Contact, Lead, Account, or Opportunity). Because the original activity type (call, email, meeting) is not structurally differentiated in Oncourse, we add a custom field note_type__c on each migrated Note to carry any inferred type or a default value of 'General' so admins can later filter or reclassify. This is a data-shape limitation rather than a data-loss issue; the note content migrates fully.
Oncourse CRM
Task
Freshsales
Task
1:1Oncourse CRM Tasks associated with Deals migrate as standalone Freshsales Task records linked to the corresponding Opportunity via the Task.what_id field. Task subject, status, due date, and owner assignment transfer directly. Tasks not associated with a Deal link to the parent Contact or Account based on the context in which they were created in Oncourse.
Oncourse CRM
Custom Field
Freshsales
Custom Field
1:1Oncourse CRM custom fields on Contacts, Leads, and Deals are exposed via the onCourse DSL export. We map them to Freshsales custom properties using type equivalence: text to string, number to number, date to date, checkbox to boolean. The customer must pre-create the corresponding custom fields in Freshsales Admin settings before migration; we document the required field names, types, and object assignments in the scoping deliverable. Custom fields that cannot be typed-equivalently (e.g., multi-select from Oncourse to Freshsales picklist) are flagged during scoping.
| Oncourse CRM | Freshsales | Compatibility | |
|---|---|---|---|
| Lead | Lead1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Contact (organization property) | Account1:many | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Pipeline Stage | Opportunity Stagelossy | Fully supported | |
| Note (activity-as-note) | Note1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Custom Field | Custom Field1: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.
Oncourse CRM gotchas
Attachments are not exportable via the standard import/export tooling
Activity history lives in notes, not structured records
Pipeline stages are tenant-defined free text
Voice and SMS allowances cap at 400 each on Standard
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 schema audit
We audit the source Oncourse CRM account for record counts across Leads, Contacts, Deals, and Tasks; identify the organization property name used on Contacts; inventory custom fields on each object; document active pipeline stage names; and flag any attachment storage that requires manual backup. We also inventory Oncourse Workflows for the written inventory deliverable. The output is a written scoping document with object counts, field mapping table, and a flag for any Oncourse-specific data shapes that require transformation before migration.
Freshsales schema preparation
The customer provisions a Freshsales account at the appropriate tier (Growth, Pro, or Enterprise) or we work in an existing Freshsales sandbox. We create all required custom fields on Leads, Contacts, Accounts, and Opportunities to match the Oncourse custom field inventory. We configure Lead field mapping in Freshsales Admin settings to prevent data loss during Lead conversion. We create any custom Opportunity stages required to match Oncourse pipeline names. This step runs in parallel with the customer's Freshsales setup and requires admin access to the destination account.
Account reconstruction and Contact migration
We extract all distinct organization values from Oncourse Contact records and create Freshsales Accounts in batch. We then migrate Contacts with the AccountId resolved from the reconstructed Account records. Any Contacts without an organization value link to a generic 'Unassigned' Account and are flagged for manual reassignment. Email-based duplicate detection runs at Contact import to prevent duplicate records for shared email addresses.
Lead and Deal migration
We migrate Oncourse Leads to Freshsales Leads, applying the pre-configured field mapping for custom fields. Oncourse Deals migrate to Freshsales Opportunities with stage names mapped to the configured Freshsales stage set, owner assigned by email match to Freshsales Users, and monetary value preserved. Any Deal without a matching Contact or Account is held in a reconciliation queue until the customer's admin resolves the orphan.
Activity history migration (notes and tasks)
Oncourse notes migrate as Freshsales Note records with ContentDocumentLink to the parent record (Contact, Lead, Account, or Opportunity). We add a note_type__c custom field set to 'General' as a default; if the customer has documented activity-type metadata in Oncourse, we use it to populate this field during import. Tasks migrate as Freshsales Task records linked to the appropriate parent. Each phase emits a row-count reconciliation report before the next begins.
Cutover, validation, and Workflow inventory handoff
We freeze Oncourse CRM writes during the cutover window, run a final delta migration of records modified during migration, and enable Freshsales as the system of record. We deliver the Workflow and automation inventory document to the customer's admin team for rebuild in Freshsales Workflows. We support a one-week hypercare window to resolve reconciliation issues. We do not rebuild Oncourse Workflows in Freshsales as part of the standard migration scope; that is a separate engagement or internal admin task.
Platform deep dives
Oncourse 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 Oncourse 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
Oncourse CRM: Not publicly documented.
Data volume sensitivity
Oncourse 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 Oncourse CRM to Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your Oncourse 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 Oncourse 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.