CRM migration

Migrate from Oncourse CRM to Freshsales

Field-level mapping, validation, and rollback between Oncourse CRM and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.

Oncourse CRM logo

Oncourse CRM

Source

Freshsales

Destination

Freshsales logo

Compatibility

75%

6 of 8

objects map 1:1 between Oncourse CRM and Freshsales.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Oncourse CRM logo

Oncourse CRM

What's pushing teams away

  • Public API documentation is limited — custom integrations are described as 'requires more technical know-how' and there is no self-service developer portal.
  • Activity history is stored as notes rather than structured Activity records, limiting reporting depth and making clean migration off the platform harder.
  • Attachment export is not supported by the standard tooling — files in the document store have to be manually backed up before migration.
  • Small market footprint and limited public review volume make peer benchmarking against established competitors (HubSpot, Pipedrive, Close) harder.
  • Voice/SMS allowances are capped (400 minutes / 400 SMS on Standard) — high-volume outbound teams hit overage or per-line surcharges quickly.

Choosing

Freshsales logo

Freshsales

What's pulling them in

  • Lowest barrier to entry among major CRMs — the free tier supports up to 3 users and includes core CRM functionality before committing to per-seat pricing.
  • Built-in chat, email, and phone reduce reliance on third-party integrations for basic sales communication and contact management.
  • Freddy AI contact scoring and deal insights are included on Pro plans at a lower price than comparable HubSpot tiers.
  • Kanban pipeline views across Contacts, Accounts, and Deals provide visual deal management without requiring custom configuration.
  • Integration with the broader Freshworks ecosystem (Freshdesk, Freshchat, Freshservice) reduces tool sprawl for teams already using Freshworks.

Object mapping

How Oncourse CRM objects map to Freshsales

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

maps to

Freshsales

Lead

1:1
Fully supported

Oncourse 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

maps to

Freshsales

Contact

1:1
Fully supported

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

maps to

Freshsales

Account

1:many
Fully supported

Oncourse 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

maps to

Freshsales

Opportunity

1:1
Fully supported

Oncourse 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

maps to

Freshsales

Opportunity Stage

lossy
Fully supported

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

maps to

Freshsales

Note

1:1
Fully supported

Oncourse 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

maps to

Freshsales

Task

1:1
Fully supported

Oncourse 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

maps to

Freshsales

Custom Field

1:1
Fully supported

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

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.

Oncourse CRM logo

Oncourse CRM gotchas

High

Attachments are not exportable via the standard import/export tooling

Medium

Activity history lives in notes, not structured records

Medium

Pipeline stages are tenant-defined free text

Low

Voice and SMS allowances cap at 400 each on Standard

Freshsales logo

Freshsales gotchas

Medium

Freddy AI is Pro-tier only despite heavy marketing

High

Post-migration emails and sequences are disabled

Medium

Bot session credits are a one-time 500-session allocation

Medium

Phone credits charged per minute with no cap

Low

File storage limits scale with plan tier

Pair-specific challenges

  • Oncourse stores activity as notes, not structured records

    Oncourse CRM records call, email, meeting, and task history as freeform notes rather than as distinct activity objects. When these migrate to Freshsales, they land as Note records rather than segmented Task, Event, or EmailMessage records. This means the Freshsales activity timeline will show all history under a single Notes filter rather than split by activity type. We add a custom note_type__c field during migration to carry an inferred type value, but the customer should plan to reclassify high-value records manually or via a Freshsales workflow after migration. This is a data-model limitation of Oncourse, not a migration error.

  • Lead custom fields require field mapping before conversion

    Freshsales enforces field mapping for Lead custom fields during Lead conversion (Lead to Contact, Account, and Deal). If a Lead custom field in Oncourse has no corresponding target field in Freshsales, the data is silently dropped at conversion time. We flag every Oncourse Lead custom field that lacks a Freshsales target during scoping and either create the target field in Freshsales or map it to an existing equivalent before migration runs. The customer should review and approve the field mapping table in Freshsales Admin settings before cutover.

  • Organization reconstruction requires parent-account lookup resolution

    Oncourse CRM does not maintain a separate Account object, so all organization data lives as Contact properties. We extract distinct organization names, create Freshsales Accounts, then backfill the AccountId on each Contact. This two-step process means that Contact migration depends on Account creation completing first. If an organization name is blank or a generic value ('self', 'personal', '-'), we create a generic 'Unassigned' Account and flag those Contacts for the customer to merge or reassign manually post-migration.

  • Oncourse attachment export is not available via standard tooling

    Oncourse CRM does not expose a public file attachment export via its standard import/export API. We cannot automate attachment migration and recommend a manual backup of the document storage area before migration cutover. Freshsales supports file attachments via its native document management; the customer should upload key documents manually or use Freshworks Freshdesk's attachment migration tooling post-migration.

  • Workflows and automations do not migrate between platforms

    Oncourse CRM Workflows and any task-assignment or stage-trigger automations are not portable to Freshsales because the two platforms have different automation models and trigger conditions. We deliver a written inventory of every active Oncourse Workflow with its trigger, conditions, and actions during scoping. The customer's admin rebuilds these in Freshsales Workflows (available from Growth tier) post-migration. Oncourse's pipeline stage names, which may be used as workflow triggers, should be mapped to Freshsales stages before automation rebuild begins.

Migration approach

Six steps for a successful Oncourse CRM to Freshsales data migration

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

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

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

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

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

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

Context on both ends of the pair

Oncourse CRM logo

Oncourse CRM

Source

Strengths

  • Unified phone dialer, SMS, email sequencing and CRM in one product
  • Low entry price (Basic $14.99/user/month; Standard $49.95/user/month on annual)
  • Drag-and-drop pipeline with customisable stages tuned for small-team sales motions
  • Outlook, Gmail and Google Calendar integrations supported natively
  • Card-view pipeline and mobile CRM access for on-the-go sales teams

Weaknesses

  • Public API documentation is sparse; custom integrations require Zibtek dev work
  • Activity history stored as notes rather than structured Activity records
  • Standard attachment export is not supported — files must be backed up manually
  • Voice (400 min) and SMS (400) caps on Standard limit high-volume outbound teams
  • Small ecosystem and limited public reviews relative to HubSpot, Pipedrive, Close
Freshsales logo

Freshsales

Destination

Strengths

  • Generous free tier for small teams with core CRM functionality without per-seat costs.
  • All-in-one sales CRM with built-in telephony, chat, and email reducing third-party tool dependency.
  • Freddy AI contact scoring and deal predictions available on Pro tier.
  • Multiple pipeline views with Kanban and list options across all plans.

Weaknesses

  • Reports lack depth compared to competitors like HubSpot, with limited customization options.
  • Integration setup is poorly documented with no clear guides for connecting third-party tools.
  • AI features gated behind $39/user/month Pro tier despite marketing emphasis on Freddy AI.
  • Bot sessions limited to 500 one-time allocation with no monthly refresh.

Complexity grading

How hard is this migration?

Standard CRM migration. 2 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 Oncourse CRM and Freshsales.

  • Object compatibility

    B

    2 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

    Oncourse CRM: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Oncourse CRM to Freshsales 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 Oncourse CRM to Freshsales data migrations

Answers to the questions buyers ask most during Oncourse CRM to Freshsales migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Migrations under 5,000 Contacts and 2,000 Deals with no custom objects complete in two to four weeks. Migrations with custom fields, large note volumes (over 50,000 activity-as-note records), or complex organization reconstruction (contacts with blank or generic organization values requiring manual reassignment) extend to six to ten weeks. Timeline depends on data volume, data quality at scoping, and how quickly the customer's Freshsales admin provisions custom fields and reviews the field mapping table.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Oncourse CRM.
Land in Freshsales, 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