CRM migration
Field-level mapping, validation, and rollback between XSale and Nutshell. We move data and schema; workflows are rebuilt natively in Nutshell.
XSale
Source
Nutshell
Destination
Compatibility
6 of 8
objects map 1:1 between XSale and Nutshell.
Complexity
CModerate
Timeline
2-4 weeks
Overview
XSale and Nutshell serve different operational models. XSale is a mobile-first direct store delivery platform that structures data around field activity: Reps, Routes, Visits, and Orders captured by mobile workers in the field. Nutshell is a cloud-based CRM designed for small and mid-market sales teams that tracks People, Companies, Deals, and Activities through a relational pipeline model. The migration requires a structural translation: XSale field execution records must be reconstructed as CRM-native objects. We extract Reps via the XSale API and map them to Nutshell People with routing territory stored as a custom field. We map Orders to Nutshell Deals, preserving the product line, quantities, and amounts. We reconstruct Visits and pre-order transactions as Activity records (calls, meetings, tasks) linked to the correct Person and Company so that the historical relationship timeline is intact in Nutshell. Route assignments do not have a native Nutshell equivalent and migrate as custom fields on the Person record. We do not migrate XSale automations, route-optimization logic, or mobile app configurations; these are platform-specific features that do not translate to Nutshell.
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 XSale 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.
XSale
Rep
Nutshell
Person
1:1XSale Rep records map to Nutshell People. We extract Rep name, email, phone, and any territory assignment from the XSale API and write these to the corresponding Nutshell Person fields. If XSale stores the Rep's role (e.g., Driver, Merchandiser, Account Executive), we store that as a custom field on the Person record. Active and inactive Rep status maps to Person's active flag. The Person is created before any associated Order or Visit records so that the Activity lookup resolves correctly.
XSale
Order
Nutshell
Deal
1:1XSale Order records map to Nutshell Deals. The Order amount maps to Deal value, Order status (pre-order, submitted, confirmed, delivered) maps to Nutshell pipeline stages, and Order date maps to the expected close date. If XSale stores a customer reference on the Order, we resolve that to the corresponding Nutshell Person lookup. Product line items on the XSale Order map to Deal line item text or to a custom field depending on the customer's product complexity.
XSale
Order Customer Reference
Nutshell
Person (lookup)
1:1XSale Order records reference a customer entity that may be a store, retailer, or account. We resolve this reference by name or external ID at migration time and link the Nutshell Deal to the corresponding Nutshell Person record. If the XSale customer maps to a business entity rather than an individual, we create a Nutshell Company first and link the Person to it, then attach the Deal to the Company.
XSale
Visit
Nutshell
Task (Activity)
1:manyXSale Visit records (check-ins at store locations during route execution) map to Nutshell Task records. Each Visit becomes a Task linked to the Rep's corresponding Nutshell Person and the Order's corresponding Nutshell Deal or Person. Visit timestamp, location, and completion status migrate to Task fields. Multiple Visits for a single Order become multiple Task records with a shared WhatId reference to preserve the visit sequence.
XSale
Route
Nutshell
Custom Fields on Person
lossyXSale Route records represent territory assignments and stop sequences that do not have a native Nutshell equivalent. We store route name, route code, assigned stops, and sequencing as custom text fields on the Nutshell Person record for the assigned Rep. Route-level geolocation coordinates migrate as a custom text field if the customer requires them for reporting. This is a configuration mapping, not a native object translation.
XSale
Pre-order Transaction
Nutshell
Deal (pre-close)
1:1XSale pre-order transactions represent orders placed during a visit before physical delivery. These map to Nutshell Deals with a stage indicating pre-close status. The pre-order amount, product, and customer reference migrate to the Deal. Pre-order notes migrate to a custom field on the Deal so that the customer can distinguish pre-orders from confirmed orders during pipeline analysis.
XSale
XSale Company/Account (if present)
Nutshell
Company
1:1If the XSale instance stores company or account records separate from the Order customer reference, these map to Nutshell Company. Company name, address, and any account manager assignment migrate as standard fields. The Rep assigned as account manager on the XSale company maps to a custom field on the Nutshell Company rather than the native Owner field to preserve the Rep-Person mapping.
XSale
XSale Product (if present)
Nutshell
Product (custom field on Deal)
1:1XSale Product records (SKUs, product names, prices associated with Orders) map to custom fields on the Nutshell Deal if Nutshell's native product catalog is not in use. Product name, SKU, and unit price migrate as custom text and currency fields on the Deal so that product-level reporting is available without enabling Nutshell's full product management module.
| XSale | Nutshell | Compatibility | |
|---|---|---|---|
| Rep | Person1:1 | Fully supported | |
| Order | Deal1:1 | Fully supported | |
| Order Customer Reference | Person (lookup)1:1 | Fully supported | |
| Visit | Task (Activity)1:many | Fully supported | |
| Route | Custom Fields on Personlossy | Fully supported | |
| Pre-order Transaction | Deal (pre-close)1:1 | Fully supported | |
| XSale Company/Account (if present) | Company1:1 | Fully supported | |
| XSale Product (if present) | Product (custom field on Deal)1: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.
XSale gotchas
SAP integration metadata is critical for ongoing operations
Mobile-captured data syncs from rugged devices
GPS tracking data volume is high
Catalog and brand naming inconsistency
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
Source audit and object inventory
We audit the XSale API to enumerate all Rep, Route, Visit, Order, pre-order transaction, and customer entity records. We identify which objects have been extended with custom fields and note any field types (text, numeric, date, dropdown) that require transformation during migration. We also identify inactive Reps, open versus closed Orders, and any data relationships that are implicit in the XSale schema but not enforced via foreign keys.
Nutshell target schema setup and custom field creation
We create the custom fields required in Nutshell before any data import: route assignment fields on the Person record, pre-order status fields on the Deal, and any product or SKU fields required on the Deal. We configure the Nutshell pipeline stages to accommodate the customer's XSale order statuses (pre-order, submitted, confirmed, delivered). We validate custom field creation via the Nutshell API before proceeding to extraction.
Rep-to-Person migration and lookup table construction
We extract all Rep records from XSale and insert them as Nutshell People. During this step we build the cross-reference lookup table that maps each XSale Rep ID to the corresponding Nutshell Person ID. This lookup table is the foundation for all subsequent parent-record resolution and must be complete before any Order or Visit migration begins.
Order and pre-order migration as Deals
We extract all Order records from XSale, resolve the customer reference to the corresponding Nutshell Person (or Company), and insert each Order as a Nutshell Deal with the appropriate stage value. Pre-order transactions are inserted with a pre-close stage value and a custom field flag. We validate Deal count and value totals against the XSale source before marking this phase complete.
Visit and activity migration
We extract all Visit records from XSale and insert them as Nutshell Tasks linked to the Rep's migrated Person and the Order's migrated Deal. Each Visit maps to a Task with TaskSubtype set to reflect the type of field activity (meeting or task). We preserve the original visit timestamp as the ActivityDate on each Task. This step resolves the N-to-1 relationship between Visits and Orders by creating separate Task records with shared WhatId references.
Route metadata and territory assignment
We extract Route records and populate the custom fields on the corresponding Nutshell Person records with route name, route code, and stop count. Geocoordinate data is stored as a custom text field. We do not create a separate Route object in Nutshell because no such object exists. Route metadata is preserved for reference and reporting but will not drive any Nutshell-native routing behavior.
Cutover, validation, and gap disclosure
We freeze XSale writes during the cutover window, run a final delta migration of any records modified during migration, and validate record counts in Nutshell against the source. We deliver the automation inventory document to the customer's admin team. We do not rebuild XSale automations in Nutshell; that is outside standard migration scope. We support a one-week post-cutover reconciliation window to address any record linkage issues raised by the sales team.
Platform deep dives
XSale
Source
Strengths
Weaknesses
Nutshell
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 1 of 8 objects need a manual workaround.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across XSale and Nutshell.
Object compatibility
1 of 8 objects need a manual workaround.
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
XSale: Not publicly documented — typical SaaS limits assumed and confirmed during scoping..
Data volume sensitivity
XSale 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 XSale to Nutshell migration scoping. Not seeing yours? Book a call.
Walk through your XSale 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 XSale
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.