CRM migration
Field-level mapping, validation, and rollback between Keap and Nutshell. We move data and schema; workflows are rebuilt natively in Nutshell.
Keap
Source
Nutshell
Destination
Compatibility
9 of 10
objects map 1:1 between Keap and Nutshell.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Keap to Nutshell is a structural migration toward a simpler, lower-cost CRM for small to mid-sized sales teams. Keap's tag-driven contact model — where tags serve as both segmentation filters and automation triggers — does not map 1:1 to Nutshell's native label and custom-field approach. We export tags as a comma-delimited custom property or as individual Nutshell labels, preserving the contact grouping data while acknowledging that Keap automation sequences cannot be extracted and must be rebuilt. Keap's REST API enforces a 500 calls-per-minute limit that extends export time for accounts with tens of thousands of contacts; we paginate across multiple windows to stay within this ceiling. We do not migrate automation sequences, landing pages, or web forms as these are not accessible via Keap's API in structured form. We deliver a written inventory of any active sequences for the customer's admin to rebuild in Nutshell's automation builder.
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 Keap 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.
Keap
Contact
Nutshell
Person or Company-linked Contact
1:1Keap Contacts map to Nutshell Persons, which are standalone contact records without mandatory company linkage. Where a Keap Contact has an associated Company record, we create the Nutshell Company (Account) first and then link the Person to it via the companyId field during Person import. Standard fields (name, email, phone, address) map directly. Custom field values are resolved using the Keap contact model schema endpoint before writing, ensuring field IDs resolve to correct values at migration time.
Keap
Company
Nutshell
Company
1:1Keap Company records map to Nutshell Companies. The Company-to-Person association is preserved as a Person-Company link in Nutshell. Company-level standard fields (name, website, phone, address) map cleanly. Companies without any linked Contacts are imported as standalone Company records for later association.
Keap
Tag
Nutshell
Tag or customFields string property
lossyKeap tags serve dual roles: contact classification and automation trigger definition. We export all tags and import them into Nutshell as Tags attached to the Person record. The tag-trigger automation context cannot be carried over (automation sequences do not export), so the tag inventory is preserved as labels for segmentation purposes only. Customers choose during scoping whether tags import as Nutshell native Tags or as a comma-delimited custom property string for reporting compatibility.
Keap
Opportunity (Pipeline Deal)
Nutshell
Deal
1:1Keap Opportunities map to Nutshell Deals with stage, value, owner, and expected close date. Keap's user-defined stage names map to Nutshell pipeline stages, creating new stages in Nutshell's pipeline if the source stage names do not already exist in the destination account. We preserve deal value and expected close date as native Deal fields. The pipeline name in Keap becomes the pipeline name in Nutshell.
Keap
User (Team Member)
Nutshell
User
1:1Keap user accounts (name, email, role) map to Nutshell Users by email match. Any Keap user without a matching Nutshell User is held in a reconciliation queue for the customer's admin to provision before record import resumes. Owner assignment on Deals, Tasks, and Notes resolves via the User mapping table created during this phase.
Keap
Task
Nutshell
Task
1:1Keap Tasks export with subject, due date, assigned user, status, and completion date. They import to Nutshell as Tasks linked to the corresponding Person or Deal via the PersonId and relatedId fields. Keap tasks with no associated contact or deal are imported as standalone Nutshell tasks. Completion status and timestamps are preserved. Task priority maps from Keap priority values to Nutshell's task priority scale.
Keap
Note
Nutshell
Note
1:1Keap Notes (free-text content with author and creation timestamp) map to Nutshell Notes attached to Person, Company, or Deal records. Note body content migrates as plain text. Author and creation date are preserved as metadata fields. If the author is not a resolved Nutshell User, the note is attached without an assigned owner.
Keap
Custom Field
Nutshell
customFields
1:1Keap custom field values export via the REST API after resolving field IDs from the contact model endpoint. Nutshell stores custom fields within a customFields dictionary on Person, Company, or Deal records using the field name as the key. We create the destination custom field in Nutshell by name before writing values, handling text, number, date, and currency types as supported by Nutshell's custom field schema. Note: Keap custom fields must be created inside Keap before their IDs become available via API — we apply the same discovery-then-export pattern in reverse for the destination.
Keap
Invoice
Nutshell
Note or Attachment
1:1Keap Invoice records (line items, totals, status, contact) do not have a native Nutshell equivalent object. We export invoice metadata as structured notes attached to the Person record, preserving invoice number, total amount, status, and date. Line item detail migrates as note body content. The known Keap issue (#3275175) where pipeline activity history does not display invoice events means we query the invoice API endpoint directly rather than relying on deal activity logs to capture this data.
Keap
Product
Nutshell
Product
1:1Keap Products (name, SKU, price, description) map to Nutshell Products. ProductCode from Keap maps to Nutshell Product code; price maps to unit_price. We create the Product records before any associated Order or Invoice data to satisfy referential integrity. Product images and advanced attributes not supported by Nutshell's Product object are noted for manual handling.
| Keap | Nutshell | Compatibility | |
|---|---|---|---|
| Contact | Person or Company-linked Contact1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Tag | Tag or customFields string propertylossy | Fully supported | |
| Opportunity (Pipeline Deal) | Deal1:1 | Fully supported | |
| User (Team Member) | User1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| Custom Field | customFields1:1 | Fully supported | |
| Invoice | Note or Attachment1:1 | Fully supported | |
| Product | Product1: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.
Keap gotchas
API rate limit of 500 calls per minute
Automation sequences are not structurally exportable
Custom fields require in-app creation before API use
Pipeline activity history bug with invoices
V2 REST API parity gaps with XML-RPC
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 data audit
We audit the source Keap account via the REST API and XML-RPC endpoints, capturing record counts for Contacts, Companies, Tags, Opportunities, Invoices, Products, Orders, Tasks, and Notes. We identify custom field definitions via the contact model endpoint, flag any fields not yet accessible via API, and document active automation sequences with their trigger tags and step counts for the rebuild inventory. We also confirm which API endpoint (REST v2 or XML-RPC) provides the most complete data for each object type during this discovery window.
Tag strategy and pipeline stage mapping
We align Keap's tag taxonomy with Nutshell's tagging model. Customers choose between importing tags as Nutshell native Tags (best for segmentation and filtering) or as a comma-delimited custom property string (best for reporting compatibility). We map Keap pipeline stage names to Nutshell deal pipeline stages, creating any missing stages in Nutshell before migration. Pipeline values, expected close dates, and deal owners are documented in a mapping table that drives the import configuration.
User and owner reconciliation
We extract every distinct Keap user (owner) referenced across Contacts, Companies, Deals, Tasks, and Notes and match them by email against Nutshell's existing User table. Any Keap user without a matching Nutshell User is placed in a reconciliation queue for the customer to provision before record import continues. Owner resolution is required before Deals, Tasks, and Notes can be imported because Nutshell assigns these records to a User.
Custom field schema creation in Nutshell
We create all required custom fields in Nutshell before writing any record values, ensuring that the customFields dictionary keys are defined and typed. Text, number, date, and currency field types from Keap map to their Nutshell equivalents. For each custom field, we record the Keap field ID and label so that the transform layer can correctly route values during the data migration phase.
Migration in dependency order
We run the migration in record-dependency order: Nutshell Users (validated), Companies (from Keap Companies), Persons (from Keap Contacts, with companyId resolved), Deals (with ownerId, personId, and stage resolved), Products, Tasks and Notes (linked to Person or Deal). Keap's API rate limit of 500 calls per minute is managed via request throttling with batch pagination across multiple windows. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze writes in Keap during the cutover window, run a final delta migration of any records modified during the migration, and validate record counts and field-level accuracy against the source. We deliver the automation sequence inventory document to the customer's admin for rebuilding in Nutshell's automation builder. We support a one-week hypercare window for reconciliation issues. We do not rebuild Keap sequences as Nutshell automations as part of the standard migration scope; that is a separate configuration engagement.
Platform deep dives
Keap
Source
Strengths
Weaknesses
Nutshell
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 3 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 Keap and Nutshell.
Object compatibility
3 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
Keap: 500 requests per minute per tenant, reset per minute.
Data volume sensitivity
Keap 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 Keap to Nutshell migration scoping. Not seeing yours? Book a call.
Walk through your Keap 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 Keap
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.