CRM migration
Field-level mapping, validation, and rollback between erxes and Nutshell. We move data and schema; workflows are rebuilt natively in Nutshell.
erxes
Source
Nutshell
Destination
Compatibility
7 of 9
objects map 1:1 between erxes and Nutshell.
Complexity
BStandard
Timeline
2-3 weeks
Overview
Moving from erxes to Nutshell is a structural migration from a self-hosted, plugin-based experience operating system to a managed SaaS CRM built for SMB sales teams. erxes organizes data around Contacts, Companies, Deals in Pipelines, and Tasks with a GraphQL API that requires programmatic pagination for bulk export, since no native bulk export UI exists in the Community edition. Nutshell uses a straightforward People, Companies, and Deals model with a REST API, Import2 wizard, and custom fields available on People, Companies, and Leads. We handle the schema translation between erxes plugin modules and Nutshell's standard CRM objects, resolve owner mappings by email match, and validate erxes custom field values against Nutshell's type enforcement before import. Automation workflows, plugin-specific configurations, and Channel credentials do not migrate; we deliver a written inventory of these for the customer's admin to rebuild in Nutshell or document as non-recoverable.
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 erxes 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.
erxes
Contact
Nutshell
Person
1:1erxes Contacts map directly to Nutshell People. The primary fields (name, email, phone) translate to standard Nutshell Person fields. We extract custom field values from erxes and validate each against the target field type in Nutshell before insert; any value that violates Nutshell's type enforcement (for example, a text string in a date-typed field) is flagged and either remapped to a text custom field or logged for manual resolution. Owner assignment migrates by email match against Nutshell Users.
erxes
Company
Nutshell
Company
1:1erxes Company records map 1:1 to Nutshell Company records. The companyId reference in erxes Links field preserves the association to the related Person. We map industry, size, and website fields to their Nutshell equivalents and transfer custom field values with the same type-validation logic applied to Person records.
erxes
Deal
Nutshell
Deal
1:1erxes Deals map to Nutshell Deals with stage, amount, and responsible user preserved. The key translation is erxes pipeline stage to Nutshell pipeline stage; we confirm the target Nutshell pipeline has matching stage values configured before migration, or we flag a stage-mapping gap that requires Nutshell admin configuration before the Deal import phase begins.
erxes
Pipeline
Nutshell
Pipeline
lossyEach erxes Pipeline maps to a Nutshell Pipeline with stage translation. We verify that the destination Nutshell account has pipelines configured with the corresponding stage names and probabilities. If erxes uses multiple pipelines to segment business lines, we create parallel Nutshell pipelines and map Deal records accordingly. Stage IDs are translated to destination stage identifiers during import.
erxes
Task
Nutshell
Task
1:1erxes Tasks migrate to Nutshell Tasks with title, description, due date, status, and assigned user preserved. User assignment resolves via email match to the Nutshell User table. Tasks organized into Teams and Cycles in erxes are logged as custom field notes or activity flags since Nutshell does not use a Cycles model; the customer chooses how to represent team-scoping during scoping.
erxes
User
Nutshell
User
1:1erxes Users (team members with roles) map to Nutshell Users by email address. Role and permission configurations do not transfer because Nutshell's permission model differs structurally; we extract role names as notes and flag the Nutshell admin to reassign permissions manually post-migration.
erxes
Custom Field Schema
Nutshell
Custom Field
lossyerxes custom fields on Contacts, Companies, Deals, and Tasks require pre-creation in Nutshell before data import. We extract the field names, types, and options from erxes and create equivalent Nutshell custom fields via the Nutshell custom fields API. Type mapping: erxes text and number fields map to Nutshell text fields; erxes dropdown fields map to Nutshell dropdown with the same option list; erxes date fields map to Nutshell date fields. Any erxes field with no type definition (schema-less ingest) defaults to Nutshell text to avoid import rejection.
erxes
Conversation
Nutshell
Activity (Note or Task)
1:1erxes multi-channel Conversations (email, SMS, chat, WhatsApp) do not have a direct Nutshell equivalent because Nutshell uses Gmail and Outlook integration rather than a native inbox. We migrate conversation metadata and the most recent message body as a Note attached to the related Person or Company record. Older message threads are logged in a reconciliation document for the customer's admin to review. Message threading order depends on server-side timestamps in erxes; we preserve createdAt values in the Note body for reference.
erxes
Channel Credentials
Nutshell
Not applicable
1:1erxes Channel configurations (email accounts, SMS credentials, chat API keys, WhatsApp Business API credentials) do not migrate. These represent external service credentials that would require re-authentication regardless of migration path. We flag each active Channel in the source erxes instance and list the reconfiguration steps (which credentials to update, which API keys to regenerate) so the customer's admin can restore connectivity in Nutshell's communication settings post-migration.
| erxes | Nutshell | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal | Deal1:1 | Fully supported | |
| Pipeline | Pipelinelossy | Fully supported | |
| Task | Task1:1 | Fully supported | |
| User | User1:1 | Fully supported | |
| Custom Field Schema | Custom Fieldlossy | Fully supported | |
| Conversation | Activity (Note or Task)1:1 | Fully supported | |
| Channel Credentials | Not applicable1: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.
erxes gotchas
No native bulk export in Community edition
Plugin activation state affects data visibility
Custom fields have no type enforcement during import
Conversation message ordering depends on server timestamps
Nutshell gotchas
Contact tier limits enforced on import
No bulk API endpoint requires paginated extraction
Email sequences not exportable via API
Foundation plan disables key sales features
Pair-specific challenges
Migration approach
Pre-migration audit and plugin verification
We audit the source erxes instance to confirm all relevant plugins (Sales, Marketing, Operations) are active and accessible via the GraphQL API. We extract record counts across Contacts, Companies, Deals, Tasks, and Conversations, and identify the custom field schema for each object. We verify the destination Nutshell account has pipelines and stages configured to receive the erxes data, and confirm the import user has permissions to write to People, Companies, Deals, and Tasks.
GraphQL extraction with pagination
We extract data from erxes via paginated GraphQL queries, running one query per object type (Contacts, Companies, Deals, Tasks, Conversations) with cursor-based pagination. Large datasets (over 10,000 records per object) are chunked into batches to avoid query timeouts. We capture the original createdAt and updatedAt timestamps for each record to preserve ordering and audit trail. Custom field values are extracted as key-value pairs and validated against declared field types.
Schema design and custom field creation in Nutshell
We create equivalent Nutshell custom fields for every erxes custom field before data import begins. This includes text, long text, currency, date, and dropdown field types with matching option lists where applicable. Any erxes field with no type definition is created as a Nutshell text field. We configure Nutshell pipelines to match erxes pipeline stage names and probabilities, creating new pipelines if the destination lacks the required stage definitions.
Owner reconciliation
We extract every distinct owner (assigned user) from erxes Contacts, Companies, Deals, and Tasks and match by email address against the Nutshell User table. Any erxes owner without a matching Nutshell User goes to a reconciliation queue for the customer's admin to provision before record import. Migration cannot proceed past this step because User assignment is required on standard Nutshell record inserts.
Production migration in dependency order
We run production migration in record-dependency order: Companies first (standalone records with no dependencies), then People (with resolved owner and company links), then Deals (with resolved owner and stage mapping), then Tasks (with resolved owner), then Custom Field values (appended to each record). Each phase emits a row-count reconciliation report before the next phase begins. Conversation metadata migrates as Notes attached to the related Person or Company.
Cutover, validation, and automation handoff
We freeze erxes writes during cutover, run a final delta migration of records modified during the migration window, then enable Nutshell as the system of record. We deliver a written inventory of erxes Automation Workflows and Channel configurations for the customer's admin to rebuild in Nutshell or document as non-recoverable. We support a three-day hypercare window to resolve any immediate reconciliation issues. We do not rebuild erxes automations as Nutshell workflow rules inside the migration scope; that is a separate engagement.
Platform deep dives
erxes
Source
Strengths
Weaknesses
Nutshell
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 erxes and Nutshell.
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
erxes: Not publicly documented.
Data volume sensitivity
erxes 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 erxes to Nutshell migration scoping. Not seeing yours? Book a call.
Walk through your erxes to Nutshell migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave erxes
Other ways to arrive at Nutshell
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.