CRM migration
Field-level mapping, validation, and rollback between e-shot and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
e-shot
Source
Twenty CRM
Destination
Compatibility
6 of 12
objects map 1:1 between e-shot and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
e-shot is a contact-centric email marketing platform; Twenty CRM is a relational CRM with Company, Person, and Opportunity objects. These are fundamentally different data models, so migration from e-shot to Twenty is a re-design as much as a data move. We extract e-shot contacts with their custom field definitions and merge-tag fallback rules, then map them into Twenty's Person object with optional Company linking. Automated Series and campaign engagement history do not have native Twenty equivalents — we represent them as custom object records and a written automation rebuild guide for the customer's admin. Preference centre data becomes custom fields on Person. Saved filters and segment logic are documented for manual rebuild in Twenty's views. Landing pages, forms, and website popups are not migrated as functional objects; we deliver a written inventory of these items requiring rebuild in Twenty or a replacement tool.
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 Twenty CRM, 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
Twenty CRM
Person
1:1e-shot Contacts map to Twenty Person records. Every standard system field (email, name, phone, address) maps directly. Custom contact fields defined in e-shot Settings > Contacts Field Manager must be pre-created in Twenty as custom fields on Person before import. We extract the full field schema including field type, required flag, and any picklist options. Tag assignments stored as list membership in e-shot are resolved and written to a tags__c multi-select field on Person.
e-shot
Contact Fields
Twenty CRM
Person (custom fields)
lossye-shot's fully customisable contact field schema requires pre-creation in Twenty before any records load. We extract every field definition (name, type, merge-tag syntax *_fieldname_*) and replicate it in Twenty's Settings > Data Model as custom fields on Person. The mapping document is the critical dependency: without it, imports fail on undefined field references. Field type translation includes date fields, numeric fields, boolean checkboxes, and picklist values.
e-shot
Campaign
Twenty CRM
Custom Object: Campaign
1:1e-shot Campaigns do not have a native Twenty equivalent. We create a Campaign custom object in Twenty with fields for campaign name, subject line, send date, open rate, click rate, bounce rate, and unsubscribe rate pulled from campaign report data. Campaign content (HTML body, template assets) is preserved as Notes attached to the Campaign custom object record. This is a re-design decision: the customer chooses whether to migrate historical campaign metrics as audit records or to start fresh with new campaign tracking post-migration.
e-shot
Automated Series
Twenty CRM
Custom Object: Automated Series (audit) + rebuild guide
lossye-shot Automated Series are workflow-based email sequences with trigger conditions and delays. Twenty has no native equivalent to marketing automation sequences. We export the series name, trigger condition, step count, and step content as records in a Campaign Automation custom object for audit purposes. The customer receives a written rebuild guide that documents each series as a step-by-step workflow description with recommended Twenty or third-party automation alternatives (such as n8n, Make, or a custom GraphQL workflow) so the admin can rebuild sequences post-migration.
e-shot
Forms
Twenty CRM
Note or Custom Object
1:1e-shot Forms store field definitions, form structure, and contact inputs. We export form field types and labels as a form definition record in a Form custom object in Twenty. Form submission data (actual contact responses) is written to the related Person record where the form field matches a custom field. Form configuration (redirect URLs, thank-you messages) is preserved in the notes field for manual rebuild.
e-shot
Preferences
Twenty CRM
Person (custom fields)
1:1e-shot contact preferences track opt-in status and subscription interests. These map to custom fields on the Twenty Person record — one custom field per preference topic. Tier limits on active preferences in e-shot (basic: 25, pro: 50, omni: unlimited) do not apply in Twenty; we create all preference fields within the customer's custom field budget. Preference values migrate as field values, not as a separate preference centre object.
e-shot
Tags
Twenty CRM
Person.tags__c (multi-select picklist)
lossye-shot tags are stored as field values or list memberships, not as a separate tag management object. We extract every distinct tag value across all contacts and create a multi-select picklist field tags__c on the Person object in Twenty. Tag assignments per contact are written as pipe-delimited values in the field. If more than 200 distinct tags exist, we recommend a separate Tags custom object with a many-to-many relationship to Person via a junction table.
e-shot
Saved Filters
Twenty CRM
Twenty Views (manual rebuild)
lossye-shot Saved Filters define dynamic contact segments using field conditions. We export the filter name and full condition logic (field, operator, value) for each active saved filter as a written specification document. Twenty Views replicate saved filter functionality using field-based filtering. The customer's admin rebuilds each view in Twenty using the exported filter specification. Filter logic does not migrate as code.
e-shot
Campaign Reports
Twenty CRM
Campaign custom object records
1:1e-shot campaign analytics (opens, clicks, bounces, unsubscribes, delivery health) are exportable from the analytics dashboard. We pull historical report snapshots per campaign and write them as custom fields on the Campaign custom object records created during migration. This preserves campaign performance data for historical reference and reporting in Twenty's analytics views.
e-shot
Templates
Twenty CRM
Note (attached to Person or Campaign)
1:1e-shot email templates store reusable HTML content blocks with embedded styles and merge tags. We export templates as HTML files and attach them as Notes to the relevant Person or Campaign record in Twenty. Merge tag syntax (*_fieldname_*) is preserved as-is in the template body for manual reactivation in a template tool post-migration. If the customer uses Twenty's note-based template system, we provide a template mapping guide.
e-shot
Landing Pages
Twenty CRM
Written inventory for rebuild
lossye-shot Landing Pages are tier-gated (basic: 0, pro: 25, omni: 100) and hold published content with form elements. Twenty has no native landing page builder. We export landing page content as HTML files and form field mappings as a written inventory. The customer's admin rebuilds landing pages in a dedicated landing page tool (Twenty compatible or standalone) and maps form submissions to Twenty Person records using the exported field mapping.
e-shot
Website Popups
Twenty CRM
Written inventory for rebuild
lossye-shot Website Popups are campaign-triggered web overlays tied to contact identification. Tier limits apply (basic: 0, pro: 25, omni: 100). Twenty has no native popup or website overlay feature. We export popup configurations, trigger rules, and display logic as a written inventory. The customer rebuilds popup functionality in a website overlay tool compatible with Twenty's tracking (e.g., OptinMonster, Privy) and maps new submissions to Twenty Person records.
| e-shot | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Contact Fields | Person (custom fields)lossy | Mapping required | |
| Campaign | Custom Object: Campaign1:1 | Fully supported | |
| Automated Series | Custom Object: Automated Series (audit) + rebuild guidelossy | Mapping required | |
| Forms | Note or Custom Object1:1 | Fully supported | |
| Preferences | Person (custom fields)1:1 | Mapping required | |
| Tags | Person.tags__c (multi-select picklist)lossy | Mapping required | |
| Saved Filters | Twenty Views (manual rebuild)lossy | Mapping required | |
| Campaign Reports | Campaign custom object records1:1 | Fully supported | |
| Templates | Note (attached to Person or Campaign)1:1 | Fully supported | |
| Landing Pages | Written inventory for rebuildlossy | Mapping required | |
| Website Popups | Written inventory for rebuildlossy | 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.
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
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Discovery and schema audit
We audit the source e-shot account across tier (basic/pro/omni), active contact count, custom contact field definitions, active Automated Series count, landing page count, form definitions, preference centre structure, saved filter definitions, and campaign report history. We pair this with a Twenty workspace readiness check: custom object creation permissions, available custom field slots, and self-hosted vs SaaS deployment choice. The discovery output is a written migration scope with object-level row counts and a Twenty schema design document.
Schema design in Twenty
We design the destination schema in Twenty's Settings > Data Model. This includes creating the Campaign custom object (if campaign history is in scope), the Campaign Automation custom object for Series audit records, and any custom fields on Person for contact fields, preferences, and tags. We pre-create all fields before any import begins to avoid the CSV import rejecting records on undefined field references. Schema is validated in a Twenty sandbox or secondary workspace before production migration.
Paginated extraction from e-shot API
We extract contacts via paginated e-shot REST API calls, throttled to the account's per-hour rate limit. For basic and pro plans with large contact lists, extraction runs across multiple sessions to avoid hitting the hourly cap during active campaign windows. Custom field values, tag assignments, and preference data are included in each contact record export. Campaign report data is pulled from the analytics dashboard export function in parallel. We implement resume logic so a session interruption does not require restarting from record one.
Data transformation and merge-tag fallback replication
We transform e-shot contact records into Twenty Person records, mapping standard fields (name, email, phone, address) directly and writing custom field values to the corresponding Twenty custom fields created in schema design. Every merge-tag fallback definition from e-shot is written as a default value on the corresponding Twenty custom field. Tag assignments are consolidated into the tags__c multi-select field. The transformation output is a set of CSV files organised by object type, ready for Twenty import.
Sandbox validation and reconciliation
We run a full migration into a Twenty sandbox workspace or secondary instance using production-like data volume. The customer's admin reviews record counts (Persons in, Companies linked, preference fields populated, tags assigned), spot-checks 25-50 random Person records against the source e-shot contact data, and validates that custom field types and picklist values are correctly set. Schema corrections and mapping adjustments happen here before production migration begins.
Production migration and cutover
We run production migration in dependency order: custom fields (already created), Persons (from e-shot contacts), Companies (extracted from contact domain or company field), Company-to-Person linking, preference data, tag assignments, Campaign custom object records (if in scope), Campaign Automation audit records, and campaign report data. We freeze e-shot writes during the cutover window, run a final delta extraction of any records modified during migration, then mark Twenty as the system of record. We deliver the automation rebuild guide, landing page inventory, and form inventory documents to the customer's admin team.
Platform deep dives
e-shot
Source
Strengths
Weaknesses
Twenty CRM
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 Twenty CRM.
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 Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your e-shot to Twenty CRM 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 Twenty CRM
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.