CRM migration
Field-level mapping, validation, and rollback between Civicrm and Nutshell. We move data and schema; workflows are rebuilt natively in Nutshell.
Civicrm
Source
Nutshell
Destination
Compatibility
7 of 10
objects map 1:1 between Civicrm and Nutshell.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from CiviCRM to Nutshell is a platform switch from a nonprofit-specialized CRM to a sales-focused SMB CRM. CiviCRM's data model is built around nonprofit operations: Contributions, Memberships, Grants, Events, and CiviCase are first-class entities. Nutshell has none of these. We migrate what maps cleanly — Contacts, Activities, Custom Fields, and Tags — and we are explicit about what does not map: Contributions land in an export archive for the customer's finance team, Memberships are noted as manual-recreate candidates, and CiviCase has no Nutshell equivalent so case records are exported as a CSV with their activity chains. ECK (Entity Construction Kit) custom entities require individual scoping because they represent arbitrary schemas with no standard mapping path. We use a hybrid extraction approach: CiviCRM REST API for Contacts and Activities with direct database reads for large-volume custom tables where API pagination would be prohibitively slow. Nutshell's per-user pricing and free onboarding replace CiviCRM's hosting complexity, but the per-seat cost creates a budget consideration for large volunteer-heavy organizations that paid only for infrastructure under CiviCRM.
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 Civicrm 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.
Civicrm
Contact (Individual)
Nutshell
Person
1:1CiviCRM Individual subtype maps to Nutshell Person. We extract first_name, last_name, email (primary and secondary), phone (primary and secondary), address fields (street, city, state, postal_code, country), and the contact's preferred communication method. External identifier is preserved in a custom field for dedupe reference. Preferred language and prefix/suffix are not native Nutshell fields and migrate as custom Person fields.
Civicrm
Contact (Organization)
Nutshell
Company
1:1CiviCRM Organization subtype maps to Nutshell Company. We extract organization_name, legal_name, email (primary), phone, address, and website. The CiviCRM display_name (often a shortened form of the legal name) maps to Company Name. Dedupe is performed on website domain match. SIC code and number of employees are not native Nutshell fields.
Civicrm
Contact (Household)
Nutshell
Person (household head)
many:1CiviCRM Household subtype has no Nutshell equivalent. Households in CiviCRM represent family units with a household name, household address, and member relationships. We split each Household into its constituent Person records, assigning the household address to each Person record. The CiviCRM household_name is preserved in a custom field for reference. The customer chooses during scoping whether to create one Person record per household or one per individual with the address merged.
Civicrm
Activity
Nutshell
Activity (Note, Call, Meeting, Email)
1:1CiviCRM Activity records (Email, Call, Meeting, Task subtypes) map to Nutshell's activity types. We extract activity_type_id, subject, details (body), activity_date_time, duration_hours/minutes, location, and assignee. Nutshell activity types are typed as Note, Call, Meeting, or Email. The CiviCRM activity_status maps to Nutshell's activity status (completed, scheduled, etc). Activities without a subject get a generated subject from the activity type and date.
Civicrm
Custom Fields (Custom_*)
Nutshell
Custom Fields (Person, Company, Lead)
lossyCiviCRM single-record custom fields appear as fields on the parent entity via the API custom.* selector and map to Nutshell custom fields on the equivalent entity type. Nutshell supports Text (225 char max), Long Text, Currency, Date, Boolean, Number, and Single-Select for each entity type. Multi-record custom groups (prefixed Custom_) are loaded as separate row entries linked to the parent contact. We create Nutshell custom fields in the correct entity bucket (Lead, Person, Company) during pre-migration configuration. Supported field types are validated against Nutshell's field type list during mapping.
Civicrm
Groups
Nutshell
Lists or Tags
1:1CiviCRM Groups map to Nutshell Lists (static segments). We extract group_name, group_type (mailing list, access control, smart group), and the GroupContact membership records. Smart (dynamic) groups cannot be fully reproduced without re-running the underlying query logic, so we document the smart group definition as a written specification for the customer to recreate as a Nutshell List filter. Regular Groups migrate as Nutshell Lists with direct contact membership.
Civicrm
Tags
Nutshell
Tags
1:1CiviCRM Tags are flat labels that attach to any entity. We map the tag name and its entity_id link to Nutshell Tags. Multi-entity tagging requires separate association records per entity type. Tag naming conventions are preserved verbatim. Nutshell Tags are available on Person, Company, and Lead records.
Civicrm
Relationships
Nutshell
Custom Fields or Notes
lossyCiviCRM Relationships (household member, employee-employer, spousal, etc.) connect two contacts bidirectionally. Nutshell has no native relationship object, so we evaluate the relationship type and map accordingly: employer-employee relationships may become a custom field on the Person record pointing to the Company; household member relationships are preserved in a custom field on Person. The relationship type label is preserved as a tag or custom field value. Bidirectional nature is lost (Nutshell does not auto-create the reverse link).
Civicrm
Contributions
Nutshell
Archive (CSV export)
1:1CiviCRM Contributions (donations, pledges, payments) have no Nutshell equivalent. Nutshell is not a fundraising or billing CRM. We export Contributions as a structured CSV archive containing contribution_id, contact_id, financial_type, total_amount, currency, receive_date, payment_instrument, check_number, card_type_id, and the contribution status. The archive is delivered to the customer for import into a dedicated fundraising tool (GiveWP, Donorbox, Salesforce Fundraising and Engagement, or similar). Contribution metadata is preserved but loses its real-time CRM context.
Civicrm
Memberships
Nutshell
Custom Fields on Person/Company
1:1CiviCRM Membership records (type, status, start_date, end_date, source) can be migrated as a time-bounded custom record type. We map membership_type to a custom picklist on Person, membership_status to a custom status field, and start_date/end_date to date fields. Active membership status is preserved as a tag on the Person record. Recurring membership billing requires a separate payment tool since Nutshell does not handle recurring billing.
| Civicrm | Nutshell | Compatibility | |
|---|---|---|---|
| Contact (Individual) | Person1:1 | Fully supported | |
| Contact (Organization) | Company1:1 | Fully supported | |
| Contact (Household) | Person (household head)many:1 | Fully supported | |
| Activity | Activity (Note, Call, Meeting, Email)1:1 | Fully supported | |
| Custom Fields (Custom_*) | Custom Fields (Person, Company, Lead)lossy | Fully supported | |
| Groups | Lists or Tags1:1 | Fully supported | |
| Tags | Tags1:1 | Mapping required | |
| Relationships | Custom Fields or Noteslossy | Fully supported | |
| Contributions | Archive (CSV export)1:1 | Mapping required | |
| Memberships | Custom Fields on Person/Company1:1 | 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.
Civicrm gotchas
Server-to-server migration requires CMS settings file portability
Multi-record custom groups can hit MySQL's 61-join limit
No native bulk export — data portability is API- or database-dependent
CiviCase statuses are per-case-type — not a global status list
Hosted Spark tier has no documented API rate limit — performance varies by plan
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
Discovery and extraction method selection
We audit the source CiviCRM instance: CMS integration (WordPress, Drupal, Joomla, Backdrop), CiviCRM version, CiviSpark vs self-hosted deployment, API credentials availability, and direct database access feasibility. We enumerate all active entity types including ECK entity schemas, count custom groups and multi-record sets, and assess the volume of Contributions, Memberships, and CiviCase records. We also identify the hosting provider for self-hosted instances (WPEngine, Pantheon, AWS, shared hosting) since database credential provisioning varies. The discovery output is a written extraction plan specifying API vs direct database per entity, a preliminary object mapping, and the data-loss disclosure for nonprofit-specific entities.
Nutshell account provisioning and custom field pre-configuration
The customer provisions a Nutshell account at the appropriate tier (Foundation, Pro, Business, or Enterprise) before migration begins. We create Nutshell custom fields in the correct entity bucket (Lead, Person, Company) based on the CiviCRM source field's parent entity type. For multi-record custom groups (Custom_* prefix), we configure Nutshell custom fields to hold the row data and define a naming convention that preserves the original record linkage. We validate each custom field's type against Nutshell's supported field types (Text 225 char, Long Text, Currency, Date, Boolean, Number, Single-Select) and flag any CiviCRM field types that cannot be represented in Nutshell.
Household consolidation and relationship mapping
Before any record extraction, we finalize the Household consolidation strategy with the customer's team. We split CiviCRM Households into individual Nutshell Person records, assign the shared household address to each, and preserve the original household_name in a custom field. We evaluate CiviCRM Relationships (employer-employee, household member, spousal) and map them to the appropriate Nutshell representation: custom fields on Person records, tags, or notes. Bidirectional relationship behavior that CiviCRM handles natively cannot be reproduced in Nutshell and is documented as a post-migration workflow adjustment.
Record migration in dependency order
We run migration in record-dependency order: Companies first (from CiviCRM Organizations), then Persons (from CiviCRM Individuals with Household split applied), then Leads (for any CiviCRM contacts tagged as prospective donors or campaign targets), then Activities (emails, calls, meetings, tasks with assignee resolution), then Tags, then Groups as Lists. Contributions, Memberships, Cases, and Events are extracted to separate CSV archives and delivered independently. ECK entities are handled as a final phase with their own CSV or custom-field mapping based on the per-entity scoping decision made during discovery.
Sandbox validation and reconciliation
We run a full migration into Nutshell's test environment or a designated validation sandbox if available. The customer's team reconciles record counts across all entity types (Companies in, Persons in, Leads in, Activities in), spot-checks 25-50 random Person and Company records against the CiviCRM source, and validates that custom field data landed in the correct entity bucket. Any mapping corrections (wrong entity type, incorrect custom field placement, Household consolidation issues) are documented and corrected before production migration begins.
Production migration, cutover, and handoff
We run production migration with a freeze window where CiviCRM writes are paused. A final delta pass captures any records modified during the migration window. We enable Nutshell as the system of record and deliver the structured CSV archives for Contributions, Cases, Events, and ECK entities to the customer's team. We provide a written field mapping inventory documenting the destination of every migrated CiviCRM field. We do not rebuild CiviRules, CiviCase workflows, or CiviEvent registration automations; these are documented as manual-rebuild candidates for the customer's admin team.
Platform deep dives
Civicrm
Source
Strengths
Weaknesses
Nutshell
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 Civicrm and Nutshell.
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
Civicrm: Not publicly documented — Spark tier has no published limit; self-hosted performance is infrastructure-dependent.
Data volume sensitivity
Civicrm 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 Civicrm to Nutshell migration scoping. Not seeing yours? Book a call.
Walk through your Civicrm 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 Civicrm
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.