CRM migration
Field-level mapping, validation, and rollback between Keap and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Keap
Source
Twenty CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Keap and Twenty CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Keap to Twenty CRM is a migration from an all-in-one marketing automation and CRM suite to an open-source CRM focused on data ownership and extensibility. Keap stores contacts with a flat contact-company relationship and drives automation through tag triggers that cannot be exported; Twenty uses a Company-Person model where companies and people are separate objects and workflows must be rebuilt using Twenty's workflow builder. We resolve the schema dependency between Keap's Contact-Company relationship and Twenty's Company-Person structure before migration, map all tag assignments as labels or custom properties, and handle Keap's 500 calls per minute API rate limit through paginated export windows. Automation sequences, landing pages, and forms cannot be migrated and must be rebuilt manually in Twenty; we deliver a written inventory of all active sequences for your admin to reference during rebuild.
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 Twenty CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Keap
Contact
Twenty CRM
Person
1:1Keap Contacts map directly to Twenty Persons. Standard fields (name, email, phone, address) migrate as typed fields on the Person object. The Keap contact's associated Company ID maps to the Twenty Person's companyId field, which references a Company record created first during migration. We resolve the Company lookup at migration time to avoid orphaned Persons.
Keap
Company
Twenty CRM
Company
1:1Keap Company records map to Twenty Company objects. Company name becomes displayName, domain becomes websiteUrl. We import Companies before Persons so that the Person-to-Company relationship is satisfied at insert time. Keap Company records with no linked contacts are preserved as standalone Companies in Twenty.
Keap
Tag
Twenty CRM
Label or Custom Field
lossyKeap tags serve dual purposes: contact segmentation and automation triggers. We export all tags and map them as Labels on the Person record in Twenty, which provides visibility into the original tag assignments. For tags carrying business-critical classification (such as customer tier, lead source, or product interest), we recommend creating a multi-select picklist custom field on the Person object and mapping tags to that field. The customer decides during scoping which tag strategy applies. Automation-trigger tags do not migrate as triggers; they are preserved as data for manual workflow reconstruction.
Keap
Opportunity
Twenty CRM
Opportunity
1:1Keap Opportunities map to Twenty Opportunities with stage, value, owner, and expected close date. Keap stage names are user-defined; we map each to a Twenty Opportunity stage, creating new stages in Twenty's pipeline settings as needed. Opportunity value maps to the amount field, and the linked Contact and Company map to the Twenty Person and Company lookups.
Keap
Pipeline Stage
Twenty CRM
Opportunity Stage
lossyEach Keap pipeline becomes a Twenty pipeline. Keap stage names, probabilities, and ordering migrate as stage definitions in Twenty's pipeline configuration. The customer reviews and approves stage mapping during the discovery phase before any data moves.
Keap
Invoice
Twenty CRM
Custom Object (Invoice)
1:1Keap invoices map to a Twenty Custom Object named Invoice, created in Settings > Data Model before migration. Invoice fields (number, date, total, status) map to custom fields on the object. We use the Keap invoice API endpoint directly rather than relying on pipeline activity logs due to the known Keap issue where invoice events do not appear in deal activity history (knownissues.keap.com #3275175). Line items migrate as JSON in a custom field or as related records if the customer prefers a separate line-item object.
Keap
Product
Twenty CRM
Custom Object (Product)
1:1Keap product catalog items (name, SKU, price, description) map to a Twenty Custom Object named Product. We create the object and all fields via Twenty's /metadata GraphQL API before import. Product images and advanced catalog attributes are not included in the standard export; we document these for manual re-entry.
Keap
Order
Twenty CRM
Custom Object (Order)
1:1Keap order records map to a Twenty Custom Object named Order, linked to the Person (customer) and Product records. Order headers, line items, payment status, and order dates migrate to custom fields. Order-level notes and internal annotations migrate as Note records linked to the Order. We pull orders via the Keap order API endpoint.
Keap
Task
Twenty CRM
Task
1:1Keap tasks (subject, due date, assigned user, status, completion date) map to Twenty Tasks linked to the corresponding Person or Opportunity. We resolve the assigned user by email match against the Twenty workspace members provisioned before migration.
Keap
Note
Twenty CRM
Note
1:1Keap notes associated with contacts or companies migrate as Twenty Notes linked to the Person or Company record. Note body, author, and creation timestamp preserve. We set the createdAt timestamp to match the original Keap creation date.
Keap
User
Twenty CRM
WorkspaceMember
1:1Keap user accounts (name, email, role) map to Twenty Workspace Members. We resolve by email match. Any Keap user without a matching Twenty account goes to a reconciliation queue for the customer to provision before record import resumes.
Keap
Automation Sequence
Twenty CRM
Workflow (manual rebuild)
lossyKeap automation sequences cannot be exported via API. We export sequence names and step counts as a written inventory delivered to the customer. The customer rebuilds sequences in Twenty's workflow builder using the inventory as a reference. This is the highest-effort rebuild item in any Keap migration.
| Keap | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Tag | Label or Custom Fieldlossy | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| Pipeline Stage | Opportunity Stagelossy | Fully supported | |
| Invoice | Custom Object (Invoice)1:1 | Fully supported | |
| Product | Custom Object (Product)1:1 | Fully supported | |
| Order | Custom Object (Order)1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| User | WorkspaceMember1:1 | Fully supported | |
| Automation Sequence | Workflow (manual rebuild)lossy | 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
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Discovery and Keap API audit
We audit the source Keap account via API: contact volume, company volume, tag inventory, opportunity count and pipeline structure, invoice and order records, task and note counts, custom field schema via the /retrieveContactModel endpoint, and user accounts. We also extract automation sequence names and step counts for the rebuild inventory. This phase produces a written data audit report and a migration scope that defines which objects migrate, which are excluded, and which require custom object creation in Twenty.
Twenty workspace setup and schema design
We set up the Twenty workspace: provision workspace members matching the Keap user list, create the pipeline and stage definitions mapped from Keap's pipeline structure, and create any custom objects (Invoice, Order, Product) via the /metadata GraphQL API. We create all custom fields on the Person and Company objects before any data import. This follows Twenty's documented requirement that fields must exist before import.
Export from Keap with rate-limit pacing
We export all objects from Keap using the REST API with request throttling to stay within the 500 calls per minute limit. Tags are retrieved via the Tag Tracker report (Keap Pro and Max) because the standard CSV contact export does not include tag assignments. Invoices are pulled via the invoice API endpoint, not from pipeline activity logs, to bypass the known issue where invoice events do not appear in deal activity history. We paginate large exports across multiple minute windows and run deduplication transforms before staging the data for import.
Import into Twenty in dependency order
We import into Twenty in dependency order: Companies first (standalone Company records), then Persons with the resolved companyId linking to the correct Company, then Opportunities with PersonId and CompanyId resolved, then Tasks and Notes linked to Persons, then custom object records (Invoice, Order, Product). Tag assignments are applied as Labels on Person records, or mapped to a multi-select custom field if the customer selected that strategy during scoping. Owner resolution happens by email match against workspace members provisioned in Step 2.
Sandbox reconciliation and mapping validation
We run a trial migration into a test workspace or staging environment. The customer reconciles record counts against the Keap source, spot-checks 25-50 records for field-level accuracy, and validates that the Person-to-Company relationship renders correctly in Twenty's UI. Any field mapping corrections, missing custom fields, or stage name adjustments happen here before the production migration begins.
Production cutover and automation rebuild handoff
We freeze Keap writes during cutover, run a final delta migration of records modified during the migration window, then mark Twenty as the system of record. We deliver the automation sequence inventory to the customer for manual rebuild in Twenty's workflow builder. We support a one-week hypercare window for reconciliation issues. We do not rebuild Keap automation sequences or sequences in Twenty as part of standard migration scope; this is a separate rebuild engagement.
Platform deep dives
Keap
Source
Strengths
Weaknesses
Twenty CRM
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 Twenty CRM.
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 Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Keap to Twenty CRM 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 Twenty CRM
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.