CRM migration
Field-level mapping, validation, and rollback between Ortto and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
Ortto
Source
Freshsales
Destination
Compatibility
7 of 9
objects map 1:1 between Ortto and Freshsales.
Complexity
BStandard
Timeline
2-3 weeks
Overview
Moving from Ortto to Freshsales is a shift from a CDP-backed marketing automation platform to a sales CRM. Ortto's unified People object contains both prospects and customers; Freshsales separates them into Lead (unqualified) and Contact (qualified). We apply a lifecycle-stage split during migration so that unqualified Ortto People land as Freshsales Leads and qualified ones land as Contacts attached to Accounts. Tag assignments migrate as Freshsales Labels so the taxonomy is preserved. Activity feeds (email, form submission, custom events) become Tasks and Events in the Freshsales timeline. Journey and automation logic cannot be exported from Ortto; we document the original flow structure for your admin to rebuild in Freshsales Workflows. Capture widgets, dashboards, and reports also require manual reconstruction since these are UI-layer configurations without programmatic export.
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 Ortto 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.
Ortto
People
Freshsales
Lead or Contact (split required)
1:manyOrtto People with lifecycle_stage of subscriber, lead, or marketing qualified lead map to Freshsales Lead. People with lifecycle_stage of sales qualified lead, opportunity, or customer map to Freshsales Contact attached to an Account. We apply the split during migration using Ortto's person.latest_activity_date and lifecycle_stage properties, and preserve the original lifecycle stage value in a custom field ortto_lifecycle_stage__c on both Lead and Contact for audit and reporting continuity.
Ortto
Accounts (Organizations)
Freshsales
Account
1:1Ortto Account records (Organizations) map directly to Freshsales Account. The ortto_account_domain property becomes the Account's website field and serves as the dedupe key. Account is created before any Contact or Lead import so that the parent Account lookup is satisfied at the moment of contact insert. Freshsales supports unlimited linked contacts per Account versus Ortto's 3,000-person cap.
Ortto
Tags
Freshsales
Label
1:1Ortto Tags are first-class objects accessible via API with per-person assignments. We export all tag definitions and person-tag associations and recreate them as Freshsales Labels on Contact, Lead, and Account records. Tags that contain hierarchical information (e.g., product_line/tier/region) are split into multi-select label patterns. The tag taxonomy is preserved in full because Freshsales Labels support unlimited label creation.
Ortto
Activities
Freshsales
Task and Event
1:1Ortto Activities (email opens, form submissions, page views, custom events) map to Freshsales Task and Event records. Email-related activities become Tasks with subject, description, and a custom activity_type field; meeting and calendar events become Events. We paginate through Ortto's Activity API (100 per feed view) and batch records into Freshsales-compatible payloads. The Freshsales API hourly limit (1,000 on Growth, 2,000 on Pro, 5,000 on Enterprise) controls our chunk size and retry cadence.
Ortto
Campaigns
Freshsales
Campaign
1:1Ortto Campaigns (email, SMS, push) can be exported from the UI as CSV, but campaign content (templates, subject lines, body copy, assets) requires separate file export. We export campaign metadata and map it to Freshsales Campaign records with campaign type, status, and dates preserved. Campaign member associations to People migrate as Campaign Member records tied to the resolved Lead or Contact. Campaign schedules that have already fired are marked as Completed in Freshsales. Any scheduled-but-not-sent campaigns are created as Draft in Freshsales for your team to review.
Ortto
Audiences
Freshsales
Filter
lossyOrtto Audiences (dynamic and static segments of People) do not have a direct Freshsales equivalent because Freshsales does not maintain a separate segment object. We export audience definitions as rule-logic documents and convert them into Freshsales Filter configurations where the same logic can be expressed using Freshsales filter conditions. Static audiences with a fixed membership list are recreated as Freshsales Filter Views or as a custom List field on Contact. Dynamic audiences require ongoing filter maintenance by your admin post-migration.
Ortto
Custom Fields (People)
Freshsales
Custom Fields (Contact and Lead)
1:1Ortto supports up to 100 custom fields per Person. We export field definitions (name, type, options) and recreate corresponding fields in Freshsales on Contact and Lead objects before migrating values. Ortto's aggregate custom field type cannot be created or manipulated via Ortto's API and is flagged during discovery for manual recreation. Field types that do not map directly (e.g., multi-value selects) are converted to Freshsales multi-select picklists or text fields with delimiter-separated values.
Ortto
Custom Fields (Accounts)
Freshsales
Custom Fields (Account)
1:1Ortto supports up to 25 custom fields per Account (Organization). We map these to Freshsales Account custom fields, applying the same type-conversion logic used for Person custom fields. Fields exceeding Freshsales' string length limits (255 characters for text, 4,000 for long text) are truncated or split into multi-field structures with a migration note flagging the split for your admin.
Ortto
Custom Objects
Freshsales
Custom Objects
1:1Ortto custom objects and Freshsales custom objects map directly at the object level if both are in use. We pre-create the destination schema in Freshsales (custom object name, custom fields, lookup relationships) before importing any records. Ortto custom object records that reference People or Accounts are migrated after the parent Contact and Account records are present in Freshsales to satisfy lookup dependencies. Note that Freshsales' custom object API availability varies by plan tier; we confirm destination tier eligibility during discovery.
| Ortto | Freshsales | Compatibility | |
|---|---|---|---|
| People | Lead or Contact (split required)1:many | Fully supported | |
| Accounts (Organizations) | Account1:1 | Fully supported | |
| Tags | Label1:1 | Fully supported | |
| Activities | Task and Event1:1 | Mapping required | |
| Campaigns | Campaign1:1 | Mapping required | |
| Audiences | Filterlossy | Mapping required | |
| Custom Fields (People) | Custom Fields (Contact and Lead)1:1 | Fully supported | |
| Custom Fields (Accounts) | Custom Fields (Account)1:1 | Mapping required | |
| Custom Objects | Custom Objects1:1 | 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.
Ortto gotchas
Autopilot to Ortto migration requires a fresh account and new billing
AutopilotJourneys had no annual or quarterly plans; Ortto is month-to-month
API rate limits vary significantly by plan tier
Custom field aggregate type is not supported in the API
Bad request rate limiter can temporarily ban your migration IP
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 scoping
We audit the Ortto account across plan tier (Professional/Business/Enterprise), People count, Account count, tag taxonomy, activity volume per feed, campaign count, custom field definitions, and custom object usage. We confirm Ortto API rate limits and region-specific endpoint routing (AU/EU). We pair this with a Freshsales edition review to confirm which custom fields and custom objects are available on the customer's target tier. The discovery output is a written migration scope that defines the People-to-Lead/Contact split logic, the tag-to-label mapping rules, and a list of any audience definitions that require Freshsales Filter recreation.
Schema design in Freshsales
We design the destination schema in Freshsales before any data moves. This includes creating custom fields on Contact, Lead, and Account (matching Ortto field names and types), configuring Labels, setting up Freshsales Filter Views for migrated audiences, and establishing the Lead-Contact split logic. Custom objects are provisioned with their full field set and lookup relationships. All schema work is validated in a Freshsales sandbox or trial environment before production migration begins.
Data cleansing and deduplication
Ortto accounts accumulated over time typically contain duplicate People records, incomplete fields, and inconsistent formats. We run a data quality audit across the extracted Ortto export and identify duplicate records (matched by email, phone, and domain), missing required fields for Freshsales imports, and malformed data. We apply a deduplication strategy (keep most recent by activity date or keep most complete record) and clean phone number and email formats before loading. Dirty data that is not cleansed before migration spreads into Freshsales and requires post-migration cleanup that is significantly more time-consuming.
Sandbox migration and reconciliation
We run a full migration into a Freshsales trial or sandbox environment with the production data volume. The customer reconciles record counts (People in, Leads out, Contacts out, Accounts in, Tags in, Activities in), spot-checks 20-30 random records against Ortto source data, and signs off on the mapping before production migration begins. The Freshsales trial state lasts 21 days; we schedule production migration within that window to avoid account-state complications.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (from Ortto Organizations), Leads and Contacts (with lifecycle stage split applied), Labels (tag taxonomy), Activities (Tasks and Events via Freshsales API with rate-limit-controlled batching), Campaigns, Custom Object records (last, because they reference parent Contacts and Accounts). Each phase emits a row-count reconciliation report before the next phase begins. We apply exponential backoff on Freshsales 429 responses and validate request payloads before sending to avoid triggering Freshsales' bad-request IP ban.
Cutover, validation, and automation handoff
We freeze Ortto writes during the cutover window, run a final delta migration of any records modified during migration, then enable Freshsales as the system of record. We deliver the journey and automation documentation (screenshots, trigger-condition-action inventory) to your admin team with a Freshsales Workflow rebuild guide. We resolve post-migration reconciliation issues during a five-business-day hypercare window. We do not rebuild Ortto journeys as Freshsales Workflows inside the migration scope; that is a separate rebuild engagement.
Platform deep dives
Ortto
Source
Strengths
Weaknesses
Freshsales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 3 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 Ortto and Freshsales.
Object compatibility
3 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
Ortto: 10 req/sec (Professional), 30 req/sec (Business/Enterprise); 2000 req/10s and 6000 req/60s per IP; bad-request limiter triggers 15s IP ban after 15 bad requests in 15s.
Data volume sensitivity
Ortto 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 Ortto to Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your Ortto 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 Ortto
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.