CRM migration
Field-level mapping, validation, and rollback between Keap and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
Keap
Source
Freshsales
Destination
Compatibility
9 of 10
objects map 1:1 between Keap and Freshsales.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Keap to Freshsales is a migration from an automation-centric all-in-one platform to a sales-focused CRM with built-in phone, email, and AI scoring. Keap's tag-driven automation sequences, contact-centric data model, and per-seat pricing shift to Freshsales's standard CRM objects (Contacts, Accounts, Deals) with Freddy AI lead scoring and built-in communication. We extract contacts and companies via Keap's REST API, map Opportunities to Freshsales Deals with stage translation, resolve the Company-to-Account association at insert time, and migrate invoice and product catalog records where applicable. Keap automation sequences (time-delayed, tag-triggered email and task sequences) are not structurally exportable via API and must be documented for manual rebuild in Freshsales Workflows. Landing pages, forms, and integration-specific configurations do not migrate and are inventoried separately for your team to address.
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 Freshsales, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Keap
Contact
Freshsales
Contact
1:1Keap Contacts map directly to Freshsales Contacts. Standard fields (First Name, Last Name, Email, Phone, Address) migrate as their Freshsales equivalents. Custom fields require pre-discovery of their Keap field IDs via /retrieveContactModel before values can be written; Freshsales custom fields must be created in the UI before the API can write to them, adding a manual pre-step to the migration scope.
Keap
Company
Freshsales
Account
1:1Keap Company records map to Freshsales Accounts. We preserve the Company-to-Contact link by resolving the Keap contact_company_map at insert time, creating Accounts first and then linking each Contact via its account_id reference. The Account's website, industry, and phone fields map from Keap's Company standard fields.
Keap
Opportunity
Freshsales
Deal
1:1Keap Opportunities (pipeline deals) map to Freshsales Deals. Keap's user-defined stage names map to Freshsales pipeline stages, which we create in Freshsales before migration. Deal value, expected close date, owner (resolved by email to Freshsales User), and notes migrate directly. The Keap deal_id is preserved in a Freshsales custom field keap_original_id__c for audit and reconciliation.
Keap
Tag
Freshsales
Contact Label
lossyKeap tags migrate as Freshsales Contact Labels (a native tagging feature on Contact records). Keap's tag categories may be prepended as prefixes during import if the customer wants category-scoped labels. Labels are applied to the corresponding Contact records after the base contact insert completes.
Keap
Invoice
Freshsales
Deal (Invoice Record)
1:1Keap invoice records (with line items, totals, status: draft/sent/paid, and associated contact) map to Freshsales Deal records with invoice metadata stored in custom fields. Keap's known issue #3275175 means pipeline activity logs do not display invoice events, so we query the invoice API endpoint directly rather than relying on deal activity logs to capture all invoice data.
Keap
Product
Freshsales
Product
1:1Keap product catalog items (name, SKU, price, description) map to Freshsales Products. Product images and advanced attributes stored as Keap custom fields migrate to Freshsales custom fields on the Product object. We resolve the Product-to-Invoice line item relationship during invoice migration.
Keap
Order
Freshsales
Deal
1:1Keap order records representing completed transactions migrate as Freshsales Deals with type = 'Existing Business' or equivalent. Order headers, line items, payment status, and order dates migrate as Deal fields and custom fields. Internal order notes and annotations migrate as Deal description text.
Keap
Task
Freshsales
Task
1:1Keap tasks linked to contacts or opportunities migrate to Freshsales Tasks tied to the corresponding Contact or Deal. Subject, due date, assigned user (resolved by email), status, and completion date migrate directly. We set the Freshsales Task's related_to field to the migrated Contact or Deal record using the resolved lookup reference.
Keap
Note
Freshsales
Note
1:1Keap notes associated with contacts or companies migrate to Freshsales Notes linked to the corresponding Contact or Account. Author and creation timestamp are preserved. Free-text content migrates as the Note body. Notes without an associated contact or company are imported as standalone Account notes after the Account creation phase.
Keap
Automation Sequence
Freshsales
Workflow
1:1Keap automation sequences store step definitions in a proprietary internal format not accessible via API. We export sequence names, step counts, and trigger condition labels as a reference inventory document. Freshsales Workflows use a different trigger-action model and must be rebuilt manually in Freshsales's visual workflow builder. The inventory document we deliver lists every sequence with its recommended Freshsales Workflow equivalent for the customer's admin to address post-migration.
| Keap | Freshsales | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Opportunity | Deal1:1 | Fully supported | |
| Tag | Contact Labellossy | Fully supported | |
| Invoice | Deal (Invoice Record)1:1 | Fully supported | |
| Product | Product1:1 | Fully supported | |
| Order | Deal1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| Automation Sequence | Workflow1: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
Freshsales gotchas
Freddy AI is Pro-tier only despite heavy marketing
Post-migration emails and sequences are disabled
Bot session credits are a one-time 500-session allocation
Phone credits charged per minute with no cap
File storage limits scale with plan tier
Pair-specific challenges
Migration approach
Discovery and API scoping
We connect to the Keap account via OAuth 2.0, probe both the REST API and XML-RPC endpoints to identify which returns the most complete data for each object type, and run a full data audit covering contact count, company count, opportunity count, tag volume, invoice records, product catalog size, and task/note volume. We also check for any XML-RPC-only data that would require a separate extraction pass. The discovery output is a written migration scope document with record counts, object dependency tree, and a timeline estimate.
Schema design and custom field preparation
We retrieve the Keap contact model via /retrieveContactModel to discover custom field IDs and map them to field labels. We document every custom field that needs a corresponding Freshsales custom field, and the customer's Freshsales admin creates those fields in the Freshsales UI before migration begins. We design the Freshsales pipeline stages to match the Keap opportunity stage names, create the pipeline in Freshsales, and configure deal fields to match the migrated opportunity structure.
Sample migration and reconciliation
We run a test migration with a representative sample of data (typically 100-500 records per object type) into a Freshsales trial or sandbox environment. The customer reconciles record counts, spot-checks field mapping accuracy, and confirms the pipeline stage assignments are correct. Any mapping corrections, missing custom fields, or stage naming changes happen at this stage before the full migration proceeds.
Owner and user resolution
We extract every distinct Keap user referenced on contact, company, opportunity, task, and note records and match by email address against the Freshsales User table. Any Keap user without a matching Freshsales User goes to a reconciliation queue for the customer's admin to provision. Migration cannot proceed past record creation phases until all OwnerId references are resolvable.
Full migration in dependency order
We run production migration in record-dependency order: Accounts (from Keap Companies, created first so their IDs are available), Products (for catalog completeness before invoice import), Contacts (with AccountId resolved from the Account mapping), Deals (Opportunities from Keap mapped to Freshsales Deals with AccountId and OwnerId resolved), Labels (applied to Contacts after base contact insert), Invoices and Orders (as Deals or with custom fields), Tasks and Notes (linked to Contact or Account by resolved lookup reference). 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 cutover, run a final delta migration of any records created or modified during the migration window, then enable Freshsales as the system of record. We deliver the automation sequence inventory document listing every Keap sequence with its name, step count, and recommended Freshsales Workflow equivalent. We do not rebuild Keap sequences as Freshsales Workflows inside the migration scope; that work is handled by the customer's admin using the delivered inventory. We support a five-day hypercare window for reconciliation issues raised during the first week of live use.
Platform deep dives
Keap
Source
Strengths
Weaknesses
Freshsales
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 Freshsales.
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 Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your Keap to Freshsales 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 Freshsales
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.