CRM migration
Field-level mapping, validation, and rollback between e-shot and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
e-shot
Source
Salesforce Sales Cloud
Destination
Compatibility
9 of 13
objects map 1:1 between e-shot and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
3-5 weeks
Overview
e-shot is an email marketing and automation platform built around a flat, contact-centric data model with no native Account or Opportunity concept. Salesforce Sales Cloud requires contacts to attach to Account records and separates unqualified prospects into Lead objects from qualified contacts. We resolve that structural gap during scoping by creating the Account hierarchy before contact import, and we preserve e-shot's custom contact fields and merge-tag fallback definitions as Salesforce custom fields with default values. Automated Series, Landing Pages, and Website Popups do not migrate as code; we deliver a written inventory of every active series, form, and popup requiring rebuild in Salesforce Flow or Experience Cloud. We sequence contact extraction within e-shot's tier-based rate limits (500 to 5,000 API calls per hour) using throttled pagination and resume logic, and we convert any campaign links pointing to file attachments into hyperlink references to preserve tracked click data without triggering spam filters.
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 Salesforce Sales Cloud, 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
Salesforce Sales Cloud
Contact + Account (hierarchy created)
1:manye-shot contacts are flat records with no Account affiliation. We create Salesforce Account records from the contact's company domain (extracted from email address) during import, then attach each Contact to the matching Account via AccountId. Contacts without a resolvable company are attached to a Default Account or held for manual Account assignment. The e-shot contact ID is stored in a custom field legacy_e-shot_id__c as an external ID for future sync.
e-shot
Contact Field (custom)
Salesforce Sales Cloud
Custom Field on Contact or Account
1:1e-shot's custom contact fields (defined in Settings > Contacts Field Manager) map to Salesforce custom fields on the Contact object. Field types are type-mapped: text to Text(255), number to Number, date to Date, checkbox to Checkbox, dropdown to Picklist. Merge-tag fallback values (*_fieldname=fallback('text')_*) are extracted and set as Salesforce Default Value on each custom field so contacts without a value display the fallback rather than a blank or raw merge tag.
e-shot
Campaign
Salesforce Sales Cloud
Campaign + EmailTemplate
1:1e-shot campaigns (email content, subject line, sender details, schedule) map to Salesforce Campaign records with the Campaign Type set to Email. The HTML email body migrates as a Salesforce EmailTemplate record linked to the Campaign. Campaign status (Draft, Live, Ended) maps to Salesforce Campaign Status values. Historical send stats (opens, clicks, bounces, unsubscribes) migrate as CampaignMember records with corresponding Activity History.
e-shot
Automated Series
Salesforce Sales Cloud
Flow (rebuild inventory delivered)
lossyAutomated Series are workflow-based email sequences with trigger conditions and delay steps. e-shot tiers gate the number of live series (3 on basic, 25 on pro, 100 on omni). We export the series configuration (trigger, conditions, steps, delays, email references) as a written inventory document with a recommended Salesforce Flow equivalent for each series. The customer's admin rebuilds them in Flow Builder; we do not convert the automation logic as code.
e-shot
Landing Page
Salesforce Sales Cloud
Experience Cloud Site Page (rebuild inventory delivered)
lossyLanding pages are tier-gated on e-shot (0 on basic, 25 on pro, 100 on omni). Additional pages can be created but not set live within the plan limit. We export the published page content and form field definitions as a written handoff document. Salesforce Experience Cloud Sites replace landing pages with Page Builder or Digital Experiences; we do not migrate the page as code.
e-shot
Form
Salesforce Sales Cloud
Web-to-Lead or Experience Cloud Form
1:1e-shot forms store field inputs and subscription preferences linked to each contact record. We export form definitions (field types, required flags, layout) and map them to Salesforce Web-to-Lead form fields or Experience Cloud form builders. Form submissions migrate as Salesforce Leads or Contacts with the submitted field values mapped to the corresponding custom fields.
e-shot
Preference
Salesforce Sales Cloud
HasOptedOutOfEmail + Custom Subscription Fields
1:1Contact preferences track opt-in status and subscription interests. Tier limits on active preferences apply (25 basic, 50 pro, unlimited omni). We map subscription preferences to a combination of Salesforce's standard HasOptedOutOfEmail field and custom multi-select picklist fields representing each e-shot preference topic. The preference centre structure migrates as a configuration map for rebuilding in Salesforce Preference Centre or Marketing Cloud Account Engagement.
e-shot
Website Popup
Salesforce Sales Cloud
Flow or Experience Cloud Component (rebuild inventory delivered)
lossyWebsite Popups are campaign-triggered web overlays tied to contact identification. Tier limits cap live popups (0 basic, 25 pro, 100 omni). We export popup configurations, trigger rules, and display logic as a written inventory for rebuilding in Salesforce Flow with Screen components or Experience Cloud. The popup HTML and CSS do not migrate directly.
e-shot
Tag
Salesforce Sales Cloud
Multi-Select Picklist or Campaign Membership
1:1e-shot tags label contacts and segments without a formal taxonomy; they are stored as field values or list memberships rather than a separate tag object. We extract tag assignments and map them to Salesforce multi-select picklist fields on Contact, or to Campaign membership records if the tag functions as a static audience segment. The customer chooses the tag strategy during scoping.
e-shot
Saved Filter
Salesforce Sales Cloud
Salesforce Reports with Filters or Campaign static Lists
1:1Saved filters define dynamic contact segments using field conditions (basic: 10, pro: 25, omni: unlimited). We export filter definitions as segment rules and replicate them as Salesforce Reports with filter criteria, or as Campaign static Lists for marketing audience segmentation. The dynamic refresh behaviour of e-shot filters maps to Salesforce Report filters or Campaign smart lists.
e-shot
Campaign Report
Salesforce Sales Cloud
Campaign with CampaignMember History
1:1e-shot campaign analytics (opens, clicks, bounces, unsubscribes, delivery health) export from the analytics dashboard. We pull historical report snapshots and import them as Salesforce CampaignMember records with corresponding activity dates. Open and click rates become custom numeric fields on Campaign; bounce and unsubscribe rates map to Salesforce tracking fields on CampaignMember.
e-shot
Template
Salesforce Sales Cloud
EmailTemplate
1:1Email templates store reusable HTML content blocks with embedded styles and merge tags. We export templates as HTML with embedded styles. Merge tags are preserved as source values (*_fieldname_*) so they can be re-enabled in Salesforce's email template syntax. Dynamic content blocks require manual reassembly in Salesforce's Lightning Email Builder or Content Builder.
e-shot
Owner
Salesforce Sales Cloud
User
1:1e-shot has unlimited users across all tiers, and contacts may reference an owner or campaign manager. We resolve owners by email match against the Salesforce destination org's User table. Any e-shot owner without a matching Salesforce User is held in a reconciliation queue for the customer's admin to provision before record import resumes.
| e-shot | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Contact | Contact + Account (hierarchy created)1:many | Fully supported | |
| Contact Field (custom) | Custom Field on Contact or Account1:1 | Fully supported | |
| Campaign | Campaign + EmailTemplate1:1 | Fully supported | |
| Automated Series | Flow (rebuild inventory delivered)lossy | Mapping required | |
| Landing Page | Experience Cloud Site Page (rebuild inventory delivered)lossy | Fully supported | |
| Form | Web-to-Lead or Experience Cloud Form1:1 | Fully supported | |
| Preference | HasOptedOutOfEmail + Custom Subscription Fields1:1 | Fully supported | |
| Website Popup | Flow or Experience Cloud Component (rebuild inventory delivered)lossy | Fully supported | |
| Tag | Multi-Select Picklist or Campaign Membership1:1 | Fully supported | |
| Saved Filter | Salesforce Reports with Filters or Campaign static Lists1:1 | Fully supported | |
| Campaign Report | Campaign with CampaignMember History1:1 | Fully supported | |
| Template | EmailTemplate1:1 | Fully supported | |
| Owner | User1: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
Salesforce Sales Cloud gotchas
Workflow Rules and Process Builder are retired
Bulk API batch quota exhaustion during large imports
Storage overage billing is non-obvious
Account-Contact many-to-many relationship mapping
Territory and team member import ordering dependencies
Pair-specific challenges
Migration approach
Discovery and scope definition
We audit the e-shot portal across tier (basic/pro/omni), active Preferences count, running Automated Series count, live Landing Pages and Website Popups, custom contact field schema with merge-tag fallback definitions, contact volume, campaign history, and saved filter complexity. We also establish the Salesforce destination org readiness: edition, existing schema, User count, and any active validation rules or required field constraints. The discovery output is a written migration scope document including the merge-tag fallback inventory, Active Object count against plan limits, and a Salesforce edition recommendation.
Schema design and Salesforce sandbox setup
We design the destination Salesforce schema in a Sandbox org before production migration. This includes provisioning custom fields on Contact and Account (mapped from e-shot custom contact fields with default values set from merge-tag fallbacks), Salesforce Campaign records with EmailTemplate linkage, and any Account-Contact hierarchy logic required to resolve e-shot's flat contact model. We configure validation rules to allow migration-context inserts and set up the Bulk API permission set for the migration user.
Throttled contact extraction within API rate limits
We extract e-shot contacts using paginated API calls within the plan's hourly rate limit (500-5,000 calls per hour depending on tier). We implement throttled pagination with resume token logic and exponential backoff on 429 responses. Custom contact fields and merge-tag fallback definitions are extracted from Settings > Contacts Field Manager and mapped to Salesforce custom fields during the same pass. Account resolution uses email domain extraction for Account creation before contact import.
Sandbox migration and reconciliation
We run a full migration into a Salesforce Sandbox using production-like data volume. The customer's RevOps or admin lead reconciles record counts (Contacts in, Accounts in, Campaign Members in), spot-checks 25-50 random contacts against the e-shot source for field accuracy and merge-tag fallback application, and validates email template rendering in Salesforce before sign-off. Any mapping corrections and fallback rule additions happen here, not in production.
Campaign, preference, and form data migration
After contact and Account validation, we migrate campaign content (EmailTemplate with HTML body), campaign analytics as CampaignMember records, preference centre structure as custom subscription fields, form definitions as Web-to-Lead or Experience Cloud form field maps, saved filter rules as Salesforce Report filters or Campaign static Lists, and tag assignments as multi-select picklist values or Campaign membership. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, delta sync, and automation rebuild handoff
We freeze e-shot writes during cutover, run a final delta migration of any records modified during the migration window, then enable Salesforce as the system of record. We deliver the Automated Series, Landing Page, and Website Popup inventory documents to the customer's admin team. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's team. We do not rebuild e-shot Automated Series as Salesforce Flow inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
e-shot
Source
Strengths
Weaknesses
Salesforce Sales Cloud
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 Salesforce Sales Cloud.
Object compatibility
1 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 Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your e-shot to Salesforce Sales Cloud 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 Salesforce Sales Cloud
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.