CRM migration
Field-level mapping, validation, and rollback between e-shot and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
e-shot
Source
Freshsales
Destination
Compatibility
3 of 10
objects map 1:1 between e-shot and Freshsales.
Complexity
BStandard
Timeline
2-4 weeks
Overview
e-shot and Freshsales serve different core functions — e-shot is an email marketing and automation platform organized around a contact-centric model, while Freshsales is a full CRM with leads, contacts, accounts, deals, and built-in phone and email tracking. The migration is a functional replacement: we export e-shot contact records with their custom field values and merge-tag fallbacks, import them into Freshsales as Contacts (and Leads where email marketing audiences need re-qualification), and preserve HTML email templates as standalone assets. Automated Series, Landing Pages, Website Popups, and Preference Centre logic do not migrate via API — we document each active item with its trigger conditions and configuration so your admin rebuilds them in Freshsales or Freshmarketer. Campaign reporting history is pulled from the analytics dashboard and loaded as historical notes or linked records in Freshsales for audit continuity.
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 e-shot 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.
e-shot
Contact
Freshsales
Contact (and Lead where applicable)
1:manye-shot Contacts migrate to Freshsales Contact records. Where e-shot contacts represent a broad marketing audience that has not been qualified into a sales pipeline, we can provision them as Freshsales Leads first so that your sales team re-qualifies them through the standard Lead-to-Contact conversion workflow. Standard e-shot fields (email, first name, last name, phone, address) map directly to Freshsales Contact fields. Custom contact fields require pre-creation in Freshsales Admin Settings before import, with field types matched to e-shot data types. Merge-tag fallback values from e-shot become Freshsales default values on the corresponding custom fields.
e-shot
Contact Field
Freshsales
Custom Field
lossye-shot custom contact fields defined in Settings > Contacts Field Manager must be pre-created in Freshsales Admin Settings before contact import begins. We extract every field definition including name, type, required flag, and any *_fieldname=fallback('text')_* fallback syntax. Each fallback becomes a Freshsales default value on the equivalent custom field. Field type mapping follows: e-shot text fields map to Freshsales Text, number fields to Number, date fields to Date, dropdown fields to Picklist. If a Freshsales custom field is not created first, the import CSV header will not match and records will fail validation.
e-shot
Campaign
Freshsales
Deal or Custom Object
lossye-shot Campaigns contain email content, subject lines, scheduling, and send history. Because Freshsales does not have a native Campaign object equivalent to HubSpot or Salesforce Marketing, campaign metadata (send date, send count, open rate, click rate) is loaded as a Freshsales Deal record with the campaign name as Deal name, send metrics stored in custom number fields, and a link to the primary contact as the WhatId. If the customer uses Freshmarketer alongside Freshsales, campaigns migrate as Freshmarketer Campaigns instead. HTML template body is preserved separately (see Templates mapping).
e-shot
Template
Freshsales
HTML Asset (preserved separately)
1:1e-shot email templates store reusable HTML content blocks with embedded merge-tag markup. We export templates as raw HTML files preserving the *_fieldname_* syntax so that the customer can re-enable personalisation in Freshsales or a downstream email tool. Templates are not loaded into Freshsales as native objects because Freshsales does not have a standard template library for marketing emails. The HTML files are delivered alongside the migration with a field mapping reference indicating which custom fields each template references.
e-shot
Automated Series
Freshsales
Documented for rebuild (not migrated)
lossye-shot Automated Series are workflow-based email sequences with trigger conditions, delays, and action steps. Freshsales does not have an equivalent automation engine natively (Freshmarketer does, but it is a separate product). We extract every active Automated Series — including trigger type, conditions, step sequence, delay rules, and CRM action — into a written inventory document. The customer's admin rebuilds each series in Freshmarketer's Journey Builder or in Freshsales Workflows depending on the complexity. Series are not migratable as code because the trigger and action models differ fundamentally between platforms.
e-shot
Landing Page
Freshsales
Documented for rebuild (not migrated)
lossye-shot Landing Pages are tier-gated web pages with form elements and tracking. Freshsales does not have a native landing page builder (Freshmarketer does). We export published landing page URLs, form field definitions, and submission data linked to contacts so that the customer can recreate pages in Freshmarketer or a third-party landing page tool. Active landing page URLs are documented with a redirect plan to avoid broken links post-migration.
e-shot
Form and Preference Centre
Freshsales
Documented for rebuild (not migrated)
lossye-shot Forms and the Preference Centre store contact subscription choices, field inputs, and opt-in status. We export form definitions, field types, and per-contact preference data as a CSV. Opt-in and opt-out status migrates to Freshsales Contact fields (e.g., email_opt_out or a custom subscription field). Form builders and preference centre UI logic do not migrate; we document the configuration for rebuild in Freshmarketer or a CMS form plugin.
e-shot
Tag
Freshsales
Contact Tag or Custom Field
1:1e-shot tags label contacts without a formal taxonomy and are stored as field values or list memberships. We extract tag assignments per contact and load them into Freshsales as a custom multi-select picklist field (e.g., contact_segmentation__c) or as Freshsales Tags on the Contact record. The customer chooses the target format during scoping. Tags used for segmentation logic in Automated Series are documented in the Series inventory for rebuild.
e-shot
Saved Filter
Freshsales
Segment (documented for rebuild)
lossye-shot Saved Filters define dynamic contact segments using field conditions. We export filter definitions including field names, operators, and values. Freshsales does not have a Saved Filters equivalent in its native contact view — segments are managed through Freshsales Reports or through Freshmarketer's audience builder. We deliver a written segment inventory mapping each e-shot Saved Filter to a Freshsales Report or Freshmarketer audience definition.
e-shot
Campaign Report
Freshsales
Contact Note or Deal Custom Field
1:1e-shot Campaign Reports include opens, clicks, bounces, unsubscribes, and delivery health per campaign. We pull historical report snapshots from the analytics dashboard and load them as Contact Notes linked to each recipient (for high-value contacts) or as a campaign-level Deal record in Freshsales with metrics stored in custom fields. This preserves reporting context for customer-facing audits without requiring the customer to maintain access to the old e-shot account.
| e-shot | Freshsales | Compatibility | |
|---|---|---|---|
| Contact | Contact (and Lead where applicable)1:many | Fully supported | |
| Contact Field | Custom Fieldlossy | Fully supported | |
| Campaign | Deal or Custom Objectlossy | Fully supported | |
| Template | HTML Asset (preserved separately)1:1 | Fully supported | |
| Automated Series | Documented for rebuild (not migrated)lossy | Mapping required | |
| Landing Page | Documented for rebuild (not migrated)lossy | Fully supported | |
| Form and Preference Centre | Documented for rebuild (not migrated)lossy | Fully supported | |
| Tag | Contact Tag or Custom Field1:1 | Fully supported | |
| Saved Filter | Segment (documented for rebuild)lossy | Fully supported | |
| Campaign Report | Contact Note or Deal 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.
e-shot gotchas
File attachments blocked in bulk email sends
Tier limits apply to active (live) objects only
Merge-tag fallback values must be replicated
No dedicated bulk export endpoint documented
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
Scoping and source audit
We audit the e-shot account across tier level, active object counts (Preferences, Series, Landing Pages, Popups), custom contact field definitions including fallback syntax, contact volume, campaign history, and saved filter definitions. We extract the active flag on each gated object to ensure the migration scope targets only in-use items. The scoping output is a written migration scope document with record counts, field inventory, and a confirmed list of objects that migrate, objects that export as data, and objects that document for rebuild.
Freshsales custom field and object pre-creation
Before any contacts or data are loaded into Freshsales, we create all required custom fields in Admin Settings matching the e-shot contact field schema. Each field is typed correctly (text, number, date, picklist) and assigned a default value corresponding to any e-shot merge-tag fallback. If contacts are being provisioned as Leads for re-qualification, we configure the Lead status picklist and any conversion mapping rules. If campaign reports are being loaded as Deal records, we create the custom number fields for send metrics. This step runs in a Freshsales sandbox or staging account first for validation.
Contact and field data extraction from e-shot
We extract contact records via paginated e-shot REST API calls within the account's hourly rate limit. Large lists (above 20,000 contacts) run with resume logic across multiple extraction windows to avoid hitting the cap. We pull standard fields alongside all custom field values. Tags and list memberships are extracted as separate lookup tables. Merge-tag fallback values are confirmed against the contact field manager export during this step to ensure no fallback syntax is missed before the Freshsales defaults are set.
Data load into Freshsales with reconciliation
We load contacts into Freshsales via CSV import (for bulk loads) or REST API (for incremental or complex records). Each import phase emits a row-count reconciliation report comparing e-shot source record count to Freshsales target record count. We validate that custom field values transferred correctly, that required fields are populated, and that duplicate detection (by email address) flagged any records that Freshsales rejected. Tags are loaded as Freshsales Tags or mapped to a multi-select custom field per the customer's chosen format.
Campaign history and template asset export
We pull historical campaign report data from e-shot's analytics dashboard, capturing open rates, click rates, bounce rates, and send counts per campaign per contact where available. This data is loaded as Contact Notes or as campaign-level Deal records with metrics in custom fields. HTML email templates are exported as raw HTML files with merge-tag markup preserved, delivered as a named asset folder alongside the field mapping reference. Landing page URLs are documented with a redirect plan.
Automation and rebuild inventory delivery
We deliver the written inventory of e-shot Automated Series, Landing Pages, Forms, Preference Centre configurations, and Saved Filters. Each Automated Series entry includes trigger type, condition logic, step sequence, delays, and CRM actions, mapped to a Freshmarketer Journey Builder or Freshsales Workflow equivalent. Each Landing Page includes page URL, form field list, and submission destination. The customer's admin or a Freshworks partner uses this inventory to rebuild in Freshmarketer or an alternative. We do not rebuild automations as part of the standard migration scope.
Platform deep dives
e-shot
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 e-shot 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
e-shot: 500–5,000 requests per hour depending on tier (basic: 500, pro: 2,000, omni: 5,000).
Data volume sensitivity
e-shot 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 e-shot to Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your e-shot 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 e-shot
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.