CRM migration

Migrate from EspoCRM to Nutshell

Field-level mapping, validation, and rollback between EspoCRM and Nutshell. We move data and schema; workflows are rebuilt natively in Nutshell.

EspoCRM logo

EspoCRM

Source

Nutshell

Destination

Nutshell logo

Compatibility

75%

9 of 12

objects map 1:1 between EspoCRM and Nutshell.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from EspoCRM to Nutshell is a migration from an open-source, self-hostable CRM with deep customization to a managed SaaS CRM built for small-to-mid-size B2B sales teams. EspoCRM's Entity Manager lets administrators create custom entity types with arbitrary relationships; Nutshell uses a more opinionated schema with standard objects (People, Companies, Deals, Cases) that covers most sales use cases out of the box. We handle the schema differences during discovery, extract custom entity definitions from EspoCRM metadata, topologically sort the import order to resolve foreign-key dependencies, and map multi-select fields that exceed Nutshell's picklist limits. Workflows, BPM processes, and custom PHP Before-Save scripts do not migrate; we deliver a written inventory of automations requiring rebuild in Nutshell's workflow builder. File attachments on self-hosted EspoCRM instances require a separate filesystem extraction step because they are not stored in the database.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

EspoCRM logo

EspoCRM

What's pushing teams away

  • Email and SMS follow-up functionality requires third-party integrations and does not work out of the box, frustrating teams expecting a complete CRM experience.
  • Integration ecosystem is narrow compared to HubSpot or Salesforce, with official integrations limited to Google Workspace, Outlook, Zoom, VoIP, and Stripe.
  • Customization depth requires increasing technical knowledge; complex entity relationships and custom PHP/Before-Save scripts become difficult to maintain across upgrades.
  • Performance degrades on large datasets without careful server configuration; teams with hundreds of thousands of records report slow list views and search.

Choosing

Nutshell logo

Nutshell

What's pulling them in

  • Lowest cost entry point among mid-market CRMs—Foundation plan starts at $13/user/month, making it accessible for teams validating CRM fit before committing.
  • Integrated sales automation and email sequencing on Pro plans without requiring a separate email marketing platform, per verified Capterra reviews.
  • Consistently praised for intuitive interface and fast onboarding, with case studies reporting 100% team adoption rates within initial deployment periods.
  • Strong customer support responsiveness cited across G2 reviews, with dedicated support tiers available on Enterprise plans.
  • Native integrations with WhatsApp, Facebook Messenger, Instagram, and Slack reduce reliance on third-party middleware for common communication channels.

Object mapping

How EspoCRM objects map to Nutshell

Each row shows how a EspoCRM object lands in Nutshell, including any object-level transformations, lookup resolution, or schema-design dependencies.

Typical mapping — final map is confirmed during the sample migration step.

EspoCRM

Account

maps to

Nutshell

Company

1:1
Fully supported

EspoCRM Account records map directly to Nutshell Company records. The company name becomes the primary match key during import. Nutshell Company stores address, website, phone, and industry fields. If EspoCRM stores industry as a multi-enum field with more than 20 options, we split into a single-select Industry field plus a secondary custom field for overflow values.

EspoCRM

Contact

maps to

Nutshell

Person

1:1
Fully supported

EspoCRM Contact records map to Nutshell Person records with first name, last name, email, phone, and address fields preserved. Multiple email addresses on a single EspoCRM Contact (multi-email field) are stored as the primary email on the Nutshell Person with secondary addresses in a custom notes field because Nutshell Person does not support a native multi-email structure.

EspoCRM

Lead

maps to

Nutshell

Person (unqualified)

1:1
Fully supported

EspoCRM Lead records map to Nutshell Person records. EspoCRM stores lead status, source, and conversion date fields; we preserve these in Nutshell Person custom fields because Nutshell does not have a separate Lead object distinct from Person. The original EspoCRM lead status value is retained for reconciliation audit.

EspoCRM

Opportunity

maps to

Nutshell

Deal

1:1
Fully supported

EspoCRM Opportunity records map to Nutshell Deal records. The deal name, amount, stage, probability, expected close date, and description transfer directly. EspoCRM Opportunity stages map to Nutshell Deal stages; we create the Nutshell stages during setup to match the EspoCRM stage names and order before migration begins. Closed-won and closed-lost outcomes map directly.

EspoCRM

Opportunity Stage

maps to

Nutshell

Deal Stage

lossy
Fully supported

Each EspoCRM pipeline becomes a set of Nutshell Deal stages. Stage order, names, and probability percentages transfer to Nutshell Deal stages. If EspoCRM uses multiple pipelines, we create separate Nutshell Deal categories or stage sets and assign deals accordingly during import. Nutshell's stage configuration happens in the CRM settings before any deal records are imported.

EspoCRM

Case

maps to

Nutshell

Case

1:1
Fully supported

EspoCRM Case records map directly to Nutshell Case records. Status, priority, resolution, and description fields transfer. The linked Account and Contact references resolve to Nutshell Company and Person IDs during the migration so that case relationships are preserved on import.

EspoCRM

Activity: Call, Meeting, Task

maps to

Nutshell

Activity

1:1
Fully supported

EspoCRM Activities (Calls, Meetings, Tasks) map to Nutshell Activity records. Activity type, subject, date, duration, outcome, and description transfer. Each Activity is linked to a Nutshell Person or Company ID resolved from the EspoCRM parent reference. The EspoCRM activity stream order is preserved by setting the Activity date to the original timestamp.

EspoCRM

Activity: Email

maps to

Nutshell

Activity (email subtype)

1:1
Fully supported

EspoCRM Email activity records migrate to Nutshell Activity records with the email subtype flag. Email body content transfers as the Activity description. Attachments on EspoCRM email records migrate as file references; self-hosted attachment files require the separate filesystem extraction step detailed in the gotchas section.

EspoCRM

Campaign

maps to

Nutshell

Campaign

1:1
Fully supported

EspoCRM Campaign records migrate to Nutshell Campaign records with campaign name, status, type, start date, and budget preserved. Nutshell Campaign tracks campaign metadata and links to target People; we create the campaign records and link the targeting list during migration. Email send history does not transfer because it is event-log data rather than record data.

EspoCRM

User

maps to

Nutshell

User

1:1
Fully supported

EspoCRM User records map to Nutshell User accounts by email address match. Role assignments and team memberships are preserved in a written inventory for the customer's admin to reconfigure in Nutshell's user management settings post-migration because Nutshell does not expose role hierarchies via its public API in the same way EspoCRM does.

EspoCRM

Custom Entity (Entity Manager)

maps to

Nutshell

Custom Field on Standard Object

lossy
Fully supported

Custom entity types created in EspoCRM via Entity Manager require a schema review before migration. Entities that represent a classification or tag (status, type, category) map to Nutshell custom fields on the nearest standard object (Person, Company, Deal). Entities that represent standalone records with their own relationships are flagged as requiring a manual rebuild in Nutshell because Nutshell does not support arbitrary custom object creation. We provide a custom field creation guide and a 'cannot migrate' summary for each standalone custom entity type.

EspoCRM

Attachment (self-hosted)

maps to

Nutshell

File

lossy
Fully supported

On self-hosted EspoCRM instances, uploaded files live in the data/files/ directory on the server filesystem, not in the database. We extract the referenced files during the filesystem archive phase, transfer them alongside the database migration, and attach them to the corresponding Nutshell Person, Company, Deal, or Case record. Nutshell supports file attachments on records. Cloud-hosted EspoCRM instances use database-stored attachments that we extract via the API alongside record migration.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

EspoCRM logo

EspoCRM gotchas

Medium

Default 200-record API GET ceiling requires pagination

High

Server migration leaves WebSocket references pointing to old domain

Medium

Multi-enum field option cap of 20 limits data fidelity

High

Custom entity import ordering creates chicken-and-egg reference problems

Medium

Attachments on self-hosted instances are filesystem-stored

Nutshell logo

Nutshell gotchas

High

Contact tier limits enforced on import

Medium

No bulk API endpoint requires paginated extraction

Medium

Email sequences not exportable via API

Medium

Foundation plan disables key sales features

Pair-specific challenges

  • Custom entity dependency ordering creates import failures

    EspoCRM Entity Manager creates custom entity types with link-multiple and foreign-key relationships that reference each other. Importing in the wrong order produces orphaned foreign keys because EspoCRM enforces referential integrity on save and will reject a record with a missing parent reference. We perform a dependency graph analysis of all EspoCRM entity types during discovery, topologically sort the import order, and use ID remapping tables to resolve forward references when source IDs differ from destination IDs. Custom entities that reference each other in a circular loop are flagged for manual拆解 before migration begins.

  • Multi-enum fields with more than 20 options exceed Nutshell picklists

    EspoCRM multi-enum fields are capped at 20 selectable options by default, and the destination mapping may require more than 20 values in a single field. We detect multi-enum fields during discovery, report the option counts per field, and advise whether to split into multiple fields or map the excess values to a text field before migration. Nutshell custom fields do not enforce a hard option cap but are typed as picklist or text, so the split decision must be made before the field schema is created in Nutshell.

  • Self-hosted attachment files require separate filesystem extraction

    On self-hosted EspoCRM instances, uploaded files are stored on the server filesystem under the data/files/ directory rather than as blob records in the database. A standard database export does not capture these files. We identify attachment records during discovery, extract the referenced files from the filesystem archive, and transfer them alongside the record migration. Without the filesystem step, attachment file references are preserved in the Nutshell record but point to files that do not exist, creating broken links in the destination CRM.

  • EspoCRM 200-record API ceiling requires paginated extraction

    The EspoCRM REST API returns a maximum of 200 records per GET request by default. Migrating large datasets requires chunked, paginated extraction loops. We detect the total record count from the first response header and orchestrate sequential page fetches to pull all records without silent truncation. We also configure the maxSize parameter explicitly during migration to balance throughput against server load, and we validate that the final record count matches the expected total before marking the extraction phase complete.

  • Nutshell does not have a native document management object

    EspoCRM Documents (stored as Attachment records) do not have a direct equivalent in Nutshell's object model. We migrate Document records as file attachments on the nearest standard Nutshell object (Person, Company, Deal, or Case) using Nutshell's file attachment feature. If the EspoCRM Document is linked to multiple entity types or serves as a standalone library record, we flag it for manual organization in Nutshell post-migration because Nutshell does not support a standalone document library object.

Migration approach

Six steps for a successful EspoCRM to Nutshell data migration

  1. Discovery and data audit

    We audit the source EspoCRM instance across all entity types, including standard objects (Contacts, Accounts, Leads, Opportunities, Cases, Campaigns) and any custom entity types created via Entity Manager. We identify the total record counts per entity, custom field definitions (field type, required flag, picklist options), multi-enum option counts, relationship types (link-multiple, foreign key, custom), and attachment record counts with an assessment of whether the instance is cloud-hosted or self-hosted. Self-hosted instances trigger the filesystem archive request in the discovery questionnaire.

  2. Schema design and custom entity strategy

    We design the Nutshell destination schema during this phase. Standard fields map directly to Nutshell Person, Company, Deal, and Case objects. Custom fields from EspoCRM are created as Nutshell custom fields of the matching type. Custom Entity Manager types are classified into two buckets: classification entities (which become custom picklist fields on the nearest standard object) and standalone entity types (which are documented in a cannot-migrate inventory with rebuild instructions). We create the Nutshell Deal stages to match the EspoCRM Opportunity stage names and order before any record data is imported.

  3. Entity dependency analysis and import ordering

    We perform a dependency graph analysis across all EspoCRM entity types to identify foreign-key and link-multiple references between entities. This produces a topologically sorted import order that prevents orphaned foreign-key errors. Entities with circular references are flagged for customer review and manual拆解. We also build the ID remapping table that maps source EspoCRM record IDs to destination Nutshell record IDs so that relationship lookups are resolved correctly during the multi-pass import.

  4. Filesystem extraction (self-hosted only)

    For self-hosted EspoCRM instances, we extract the data/files/ directory from the server archive, identify the files referenced by attachment records, and prepare a file-to-record mapping. Files are transferred to a staging location and re-registered against the corresponding Nutshell record during the import phase. Cloud-hosted EspoCRM instances skip this step because attachments are stored in the database and extracted via the API alongside records.

  5. Data transformation and import sequencing

    We run the import in dependency order: Companies first (no dependencies), People second (Companies must exist for the Company link), Deals third (Companies and People must exist for the lookup), Cases fourth (Company and Person links resolved), Activities fifth (Person and Company links resolved), Campaigns sixth, and custom entity data last (after all standard objects that they may reference). Each phase emits a row-count reconciliation report and a field-level validation report before the next phase begins. Multi-enum fields exceeding Nutshell picklist limits are split or remapped per the decision made during schema design.

  6. Cutover, validation, and automation inventory handoff

    We freeze EspoCRM writes during cutover, run a final delta migration of any records modified during the migration window, then enable Nutshell as the system of record. We deliver the custom entity cannot-migrate inventory and the workflow automation rebuild guide to the customer's admin team. Workflows, BPM processes, and custom PHP/Before-Save scripts from EspoCRM do not migrate as code; they require manual rebuild in Nutshell's workflow builder. We support a three-day hypercare window for reconciliation issues raised during the first week of Nutshell usage.

Platform deep dives

Context on both ends of the pair

EspoCRM logo

EspoCRM

Source

Strengths

  • AGPLv3 open-source license with no per-contact or per-seat recurring fee on self-hosted deployments.
  • Entity Manager provides a UI for creating custom entity types, fields, and relationships without writing code.
  • Full REST API covers all standard CRUD operations plus stream, metadata, and currency rate endpoints.
  • Cloud plans include daily backups with 7-day retention and all official extensions at no additional cost.
  • Both cloud-hosted and fully self-hosted deployment options with explicit customer data ownership.

Weaknesses

  • Email and SMS functionality requires third-party integrations and does not work natively out of the box.
  • Official integrations are limited to Google Workspace, Outlook, Zoom, VoIP, and Stripe.
  • Multi-enum field type is capped at 20 options by default and requires configuration changes to extend.
  • Large record volumes without server-side performance tuning cause slow list views and degraded search performance.
  • WebSocket domain references can persist after server migration if internal URL configuration is not fully updated.
Nutshell logo

Nutshell

Destination

Strengths

  • Simple, intuitive interface with minimal learning curve for sales teams new to CRM
  • Per-seat pricing is transparent and predictable, with annual billing reducing monthly cost
  • Full data export tool available for all account data including backups
  • Open JSON-RPC API allows programmatic access to all core objects
  • Native multichannel engagement (email, SMS, WhatsApp) without third-party add-ons for communication

Weaknesses

  • Reporting and analytics are considered weak, requiring manual Excel exports for detailed analysis
  • No bulk API endpoint—migration requires paginated API reads that must be rate-limited carefully
  • JSON-RPC API is less common than REST, requiring custom integration code compared to standard REST CRMs
  • Add-on costs (Forms, Nutshell IQ, Email Marketing) are per-company charges that stack on top of per-seat pricing
  • Feature restrictions on entry-level plans mean teams often need mid-tier to get basic automation

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across EspoCRM and Nutshell.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    EspoCRM: Not publicly documented; rate limits can be configured server-side in the EspoCRM config file.

  • Data volume sensitivity

    B

    EspoCRM doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your EspoCRM to Nutshell migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about EspoCRM to Nutshell data migrations

Answers to the questions buyers ask most during EspoCRM to Nutshell migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your EspoCRM to Nutshell migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between two and four weeks for accounts under 10,000 records with no custom Entity Manager types. Migrations with custom entity types, cross-referenced relationships, large attachment volumes on self-hosted instances, or more than 100,000 records move to six to ten weeks because of the dependency graph analysis, multi-pass import ordering, and filesystem file-transfer step. The discovery and schema design phase typically takes five to seven business days before any data moves.

Adjacent paths

Related migrations to explore

Ready when you are

Move from EspoCRM.
Land in Nutshell, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day