CRM migration
Field-level mapping, validation, and rollback between Reach and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
Reach
Source
Freshsales
Destination
Compatibility
8 of 10
objects map 1:1 between Reach and Freshsales.
Complexity
BStandard
Timeline
2-3 weeks
Overview
The Reach-to-Freshsales migration is constrained by Reach's absence of a documented API. We rely on Reach's manual CSV export, infer the full column set at extraction time, and map every discovered field to Freshsales before import. Custom Properties present in Reach become Freshsales custom fields; company data stored as contact properties in Reach must be identified and structurally re-mapped to Freshsales Accounts during migration. Tags and labels extract as multi-select picklist values. We cannot migrate Activities (calls, emails, meetings, tasks) from Reach because no activity object was identified in available Reach export documentation. Workflows, sequences, and automations do not migrate by scope; we deliver a written inventory for the customer's admin to rebuild in Freshsales's workflow builder. The Freshsales Freddy AI scoring models are not transferable and restart fresh post-migration.
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 Reach 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.
Reach
Contact
Freshsales
Contact (or Lead)
1:1Reach Contacts map directly to Freshsales Contacts using email as the unique identifier. If a Contact in Reach carries company-name and company-domain fields that indicate a distinct business entity, we split the record during migration: the business becomes a Freshsales Account and the person becomes a Contact linked via the AccountId lookup. We validate the split criteria with the customer during scoping because Reach has no documented Account equivalent and company data may be embedded in contact properties. The original Reach contact identifier is preserved in a custom field reach_original_id__c for audit traceability.
Reach
Custom Properties
Freshsales
Custom Fields (Contacts and Accounts)
1:1Reach's undocumented schema means we discover custom properties at export time by comparing the full column set of the CSV against a baseline Reach contact export. Any column not matching a known standard field becomes a Freshsales custom field pre-created before import. Freshsales enforces a 100-field object limit with sub-limits per type (80 text fields, 30 number fields, 20 multi-select fields, 10 lookup fields). If Reach custom properties exceed these limits, we prioritize the fields actively used in the customer's business process and document the remainder for post-migration configuration.
Reach
Tags / Labels
Freshsales
Tags
lossyReach label and tagging columns extract as values from the CSV export. We map these to Freshsales Tags, which are a native tag object rather than a contact multi-select picklist. Tags migrate with the tag name preserved and applied to the corresponding Freshsales Contact or Account record. We validate that no duplicate tag names exist in the source export before applying, and we strip any tag values exceeding Freshsales character limits.
Reach
Media Content (Playlist / Screen Assets)
Freshsales
Attachments
1:1Reach playlists and screen management assets referenced in reviews may represent files or media links stored against contact records. We extract any attachment-equivalent columns (file URLs, media identifiers, playlist references) as plain-text fields on the Freshsales Contact. Full binary attachment migration requires a separate file inventory from the customer because Reach's export documentation does not describe a file export mechanism. We flag this during scoping and handle it as a conditional scope item.
Reach
User / Team Member
Freshsales
User
1:1Reach Enterprise documents a seat-license model with reassignable admin accounts. We extract User records (name, email, role or status) from the Reach export or from the license management interface. Freshsales Users are created by matching on email. Any Reach user without a matching Freshsales User goes to a reconciliation queue for the customer's admin to provision before record import begins. Active vs inactive status is preserved in a custom field reach_user_status__c.
Reach
Company / Account Data
Freshsales
Account
1:manyReach has no distinct Company or Account object documented. If the customer has structured business-entity data in Reach (stored as contact properties such as company name, domain, industry, employee count, or billing address), we extract these as a distinct dataset and create Freshsales Account records during migration. Matching is performed on company domain or exact name match. Any Contact with a matching Account receives the AccountId lookup. This step is conditional on scoping discovery and requires explicit customer confirmation before execution.
Reach
Activity History (calls, emails, meetings, tasks)
Freshsales
Tasks, Events, Notes
1:1The Reach export documentation makes no mention of activity history, call logs, email threads, meeting records, or task lists. We do not migrate activity data unless the customer's actual CSV export confirms the presence of activity columns not documented in available research. We communicate this limitation upfront and recommend that customers document any engagement records they believe exist in Reach so that we can verify against the actual export before declaring scope. New activity data post-migration is captured natively in Freshsales from day one.
Reach
Leads
Freshsales
Lead
1:1If the customer's Reach account contains a distinct Lead record type (separate from Contact) discovered during export, we map it to Freshsales Lead. Freshsales Lead records auto-convert to Contact and Account upon qualification using Freshsales's built-in lead conversion workflow. We preserve any lead score, source, or status fields from Reach as custom fields on the Freshsales Lead record for post-migration scoring and routing.
Reach
Deals / Opportunities
Freshsales
Deal
1:1Reach does not document a Deal or Opportunity object in available research. If the customer has pipeline or deal-stage data stored as custom properties on Contacts (e.g., deal value, stage name, close date as contact fields), we extract these as Freshsales Deal records linked to the corresponding Account or Contact via the Deal's primary contact lookup. We configure the Freshsales pipeline stages, deal statuses, and probability defaults during the schema design phase before migration runs.
Reach
Notes
Freshsales
Notes
1:1If the Reach CSV export contains a notes or comments column, we map these as Freshsales Notes attached to the corresponding Contact or Account via the Notes object's association fields. Rich-text formatting in Reach notes is simplified to plain text during migration to match Freshsales's Notes field capabilities. Notes created post-migration live natively in Freshsales Notes.
| Reach | Freshsales | Compatibility | |
|---|---|---|---|
| Contact | Contact (or Lead)1:1 | Fully supported | |
| Custom Properties | Custom Fields (Contacts and Accounts)1:1 | Mapping required | |
| Tags / Labels | Tagslossy | Fully supported | |
| Media Content (Playlist / Screen Assets) | Attachments1:1 | Mapping required | |
| User / Team Member | User1:1 | Fully supported | |
| Company / Account Data | Account1:many | Fully supported | |
| Activity History (calls, emails, meetings, tasks) | Tasks, Events, Notes1:1 | Fully supported | |
| Leads | Lead1:1 | Fully supported | |
| Deals / Opportunities | Deal1:1 | Fully supported | |
| Notes | Notes1: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.
Reach gotchas
No public API documentation discovered
Export files expire after 7 days
Platform object schema is undocumented
Multiple unrelated products share the Reach name
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 export scheduling
We audit the customer's Reach account for all visible contact records, custom property columns, tag sets, and any embedded company-equivalent data. We also confirm which Reach product subdomain is in use (reachtheapp.com vs reachforagents.com) to ensure the correct knowledge base and export procedures are applied. We schedule the Reach CSV export immediately and download within the 7-day expiration window. During discovery we identify the full column set, flag any company-domain or deal-related properties embedded in contact records, and present the customer with a pre-migration data map before any extraction work begins.
Schema design in Freshsales
We create the Freshsales target schema before any data is loaded. This includes creating all custom fields discovered from the Reach export, matching field types to Freshsales-supported types (text, number, date, dropdown, multi-select, checkbox). We configure Freshsales pipeline stages and deal statuses if the customer has deal-equivalent data in Reach. We also configure tag categories to match the Reach label structure. All schema work happens in the customer's live Freshsales account (or a designated sandbox if the customer prefers a validation step) so that the import template is ready before the migration window opens.
Data cleansing and transform
We review the Reach export for duplicate contact records (same email address), malformed dates, currency values requiring format normalization, and any text fields exceeding Freshsales character limits. We apply a dedupe pass on email as the primary key before import to prevent duplicate Freshsales contacts. Any company-equivalent data identified in contact properties is extracted as a separate dataset for Account creation. Tags are normalized to remove duplicates and trimmed to Freshsales character limits. The cleansed dataset is reviewed against the customer's expectations before the import phase begins.
User reconciliation
We extract every distinct Reach user or owner referenced in the export and match by email against the Freshsales User table. Any Reach user without a matching Freshsales User is placed in a reconciliation queue. The customer's Freshsales admin provisions the missing Users (active or inactive depending on whether the original Reach user is still active) before record import resumes. OwnerId references in Freshsales are required on Contacts, Accounts, Deals, and Tasks, so User provisioning must complete before those objects are imported.
Production import in dependency order
We run the Freshsales import in the correct dependency order: Accounts first (if company data is extracted), then Contacts (with AccountId resolved where applicable), then Leads (if present), then Deals (with ContactId or AccountId resolved), then Tasks, Events, and Notes. Tags are applied to Contacts and Accounts as a final step. Each phase emits a row-count reconciliation report before the next phase begins. We use Freshsales's native CSV import tool for standard object loads and support the customer through the import summary report, which lists record counts and any errors that require data correction.
Cutover, validation, and workflow handoff
We freeze Reach access during cutover to prevent new writes that would not be captured. We run a final delta check to capture any records modified during the migration window. We deliver a written inventory of any Freshsales automations, workflow rules, and pipeline configurations the customer's admin should review and activate post-migration. We support a 5-business-day hypercare window where we resolve any reconciliation issues raised by the customer's team. We do not rebuild Reach Workflows or automations in Freshsales as part of standard scope; the workflow inventory document gives the admin a starting point for rebuilding in Freshsales's workflow builder.
Platform deep dives
Reach
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 Reach 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
Reach: Not publicly documented.
Data volume sensitivity
Reach 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 Reach to Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your Reach 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 Reach
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.