CRM migration
Field-level mapping, validation, and rollback between Ontraport and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
Ontraport
Source
Freshsales
Destination
Compatibility
7 of 8
objects map 1:1 between Ontraport and Freshsales.
Complexity
CModerate
Timeline
3-5 weeks
Overview
Moving from Ontraport to Freshsales is a migration from an all-in-one marketing platform to a sales-native CRM with AI-powered lead intelligence. Ontraport stores Contacts as the primary object with Companies, Deals, Tags, and Custom Objects in a unified schema; Freshsales uses a standard CRM object model (Contacts, Accounts, Deals, Leads, Tasks, Notes) with Freddy AI for contact scoring. The key structural difference is that Ontraport's automation logic and campaign workflows cannot be exported as structured data — they must be redesigned from scratch in Freshsales. We extract Ontraport data via the API with pagination and rate-limit handling, deduplicate Contact records (Ontraport's Notes export generates duplicate Contact rows), map tag assignments to Freshsales's flat tag structure, and preserve Deal pipeline and stage data. We do not migrate Automation Rules, Sequences, Campaigns, Landing Pages, or Webforms; we deliver a written inventory of these for the customer's admin to 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 Ontraport 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.
Ontraport
Contact
Freshsales
Contact
1:1Ontraport Contacts map directly to Freshsales Contacts as the primary object. All standard fields (name, email, phone, address, lifecycle stage) migrate 1:1. Custom fields on Contact migrate to Freshsales custom fields. Email address is used as the unique identifier for dedupe during import. The original Ontraport contact ID is preserved in a custom field ontraport_contact_id__c for audit and cross-reference.
Ontraport
Company
Freshsales
Account
1:1Ontraport Company records map to Freshsales Accounts. The Company name becomes the Account Name; Company website maps to the Account Website field. Ontraport does not enforce Company name dedup, so we run a fuzzy dedupe pass on Company names before import to avoid creating duplicate Accounts at the destination. Each Account-Contact link is preserved as a Freshsales Account lookup on the Contact record.
Ontraport
Deal
Freshsales
Deal
1:1Ontraport Deals map to Freshsales Deals with pipeline and stage mapping. The Ontraport pipeline ID maps to a Freshsales pipeline we configure before migration, and the dealstage property maps to the corresponding stage name. Deal amount, owner assignment, Contact association, and expected close date migrate directly. If Ontraport has multiple pipelines, each maps to a separate Freshsales pipeline configuration.
Ontraport
Tag
Freshsales
Tag
1:1Ontraport tag assignments per Contact export as a comma-separated or multi-value list that we apply as Freshsales Tags on each Contact record. Tags are flat text values in Freshsales with no automation-trigger behavior, so we flag during scoping which Ontraport tags were used to trigger automations — those trigger definitions are documented in the automation inventory as not migratable logic that must be rebuilt in Freshsales Workflows.
Ontraport
Note
Freshsales
Note
1:1Ontraport Notes linked to Contacts export with a deduplication issue: each Note generates a separate CSV row that repeats the full Contact record. A Contact with three Notes produces three identical Contact rows with one Note in each. We deduplicate these rows post-export, associating all Notes with the single unique Contact record before importing them as Freshsales Note records linked to the Contact. Note body, author, and creation date migrate directly.
Ontraport
Task
Freshsales
Task
1:1Ontraport Tasks assigned to Contacts or Deals map to Freshsales Tasks. Due date, completion status, task title, and owner assignment migrate directly. The owner lookup resolves by email match against Freshsales Users. Tasks that were completed in Ontraport are set to the Completed status in Freshsales; open tasks carry their due date forward.
Ontraport
Invoice and Transaction
Freshsales
Deal (as financial history)
1:manyOntraport Invoice and Transaction records carry line items, payment status, product associations, and amounts. We extract the full transaction history and map it to Freshsales Deal custom fields and Notes for financial reconciliation. Ontraport's integrated payment processing does not connect to Freshsales Payments, so payment gateway reconfiguration is required as a post-migration step. Invoice PDFs attach as Notes on the relevant Contact or Deal record.
Ontraport
Custom Object
Freshsales
Custom Module
1:1Ontraport custom objects (Pets, Courses, Subscriptions, etc.) with custom fields and Contact or Company relationships map to Freshsales Custom Modules. We pre-create the destination Custom Module schema — including all custom fields and relationship fields — before any data import. Relationship IDs between custom objects and Contacts or Companies are resolved by looking up the migrated Ontraport IDs stored in the ontraport_contact_id__c and ontraport_company_id__c custom fields on the Freshsales records.
| Ontraport | Freshsales | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Deal | Deal1:1 | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Invoice and Transaction | Deal (as financial history)1:many | Fully supported | |
| Custom Object | Custom Module1: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.
Ontraport gotchas
Export history auto-deletes after 60 days
Contact overages trigger billing changes on Basic and Plus plans
SMS costs accrue before the daily limit pause applies
Automation logic cannot be exported or imported
Notes export duplicates Contact records
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 extraction scoping
We audit the Ontraport account for total Contact, Company, Deal, Note, Task, Custom Object, and transaction record counts. We identify the API rate-limit behavior by running a trial extraction of 100 records and measuring response latency. We document which Automation Rules are active, which Sequences are enrolled, and which Campaigns have active contacts. We also identify any pre-existing exports in the Export History and flag those within the 60-day window. The discovery output is a written scope document with record counts, extraction schedule, and an automation inventory list.
Staged data extraction via API
We extract data from Ontraport in dependency order: Contacts first (the primary object), then Companies, Deals, Tags, Notes, Tasks, Invoices, and Custom Objects. Because Ontraport has no bulk export API, we paginate through each object type in batches, handling rate-limit responses with exponential backoff. Notes are extracted with the 'include notes' option, producing the duplicate-row pattern we then deduplicate in the staging environment. Each extraction run produces a row-count reconciliation against the Ontraport UI count before we proceed to transform.
Data transform and field mapping
We map Ontraport fields to typed Freshsales fields. Contact fields map 1:1 where field types match (text, number, date, phone). Custom fields on Ontraport create custom fields in Freshsales with equivalent types. Ontraport Tags become Freshsales Tags on each Contact. Ontraport lifecycle stages are preserved in a custom field hs_original_lifecycle__c for reporting continuity. Ontraport Company names are run through a dedupe pass before Account creation to avoid duplicate Accounts. Ontraport Deal pipeline and stage values are mapped to Freshsales pipeline and stage configurations that we set up in Freshsales before any Deal data is loaded.
Freshsales schema provisioning
Before any data is imported, we configure the Freshsales destination: pipelines and stage definitions matching the Ontraport deal structure, custom fields matching Ontraport custom field types, custom modules for Ontraport custom objects, and user accounts matched by email to Ontraport owners. We work with the customer's Freshsales admin to provision any Owner records that do not already exist in the destination account. Schema is validated against the field mapping document before import begins.
Production import and reconciliation
We import in record-dependency order: Accounts (from Companies), Contacts (with AccountId resolved), Deals (with Contact and Account lookups resolved), Tags (reapplied per Contact), Notes (linked to Contact), Tasks, Invoices (as Deal Notes and custom fields), and Custom Objects (last, with relationship IDs resolved via the preserved Ontraport ID custom fields). Each phase emits a row-count reconciliation report. We validate record counts in Freshsales against the transformed source data before declaring a phase complete.
Cutover, validation, and automation handoff
We freeze Ontraport writes during cutover and run a final delta migration of any records modified during the migration window. We deliver the automation inventory document to the customer's admin team, covering every active Automation Rule and Sequence with trigger definitions, enrolled contact counts, and recommended Freshsales Workflow equivalents. We support a one-week hypercare window for reconciliation issues. We do not rebuild Ontraport automations as Freshsales Workflows inside the migration scope; that is a separate engagement.
Platform deep dives
Ontraport
Source
Strengths
Weaknesses
Freshsales
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 5 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Ontraport and Freshsales.
Object compatibility
5 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
Ontraport: Not publicly documented.
Data volume sensitivity
Ontraport 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 Ontraport to Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your Ontraport 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 Ontraport
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.